Elastic APM Agent vs RUM Agent
서비스가 느리다는 얘기가 나오면 어디서 시간을 쓰는지부터 봐야 합니다. 애플리케이션 로그만으로는 요청 하나가 어느 구간에서 걸렸는지가 안 나오니, 구간별로 시간을 찍어 주는 APM 을 붙입니다.
그런데 Elastic APM 문서를 열면 Agent 가 APM Agent 와 RUM Agent 두 종류로 나옵니다. 이름만 봐서는 둘 다 성능을 재는 물건이라, 왜 나뉘어 있는지도 둘 다 깔아야 하는 건지도 안 읽힙니다. 갈리는 기준은 재는 위치라서, 붙이는 코드를 나란히 놓으면 바로 보입니다.
// APM Agent — 서버 애플리케이션 맨 위에서 한 번
require('elastic-apm-node').start({
serviceName: '<백엔드 이름>',
serverUrl: 'https://<apm-server>',
})
<!-- RUM Agent — 사용자 브라우저에서 실행 -->
<script src="elastic-apm-rum.umd.min.js"></script>
<script>
elasticApm.init({
serviceName: '<프론트엔드 이름>',
serverUrl: 'https://<apm-server>',
})
</script>
하나는 서버 프로세스 안에서 돌고 하나는 사용자 브라우저에서 돕니다. 보내는 곳 (serverUrl)은
같지만 도는 자리가 다르니, 요청 하나를 놓고도 서로 다른 구간을 잽니다. serviceName 을 따로 준
것도 그래서고, 콘솔에서도 백엔드와 프론트엔드가 별개 서비스로 잡힙니다.
APM Agent만 붙이면 보이는 구간
Node.js 나 Java 같은 서버 애플리케이션에 붙여서 요청이 서버에 들어와 응답이 나갈 때까지를 봅니다. 서버 사이드 응답 시간과 처리량, 백엔드 에러와 예외, DB 쿼리 성능, 외부 서비스 호출 성능, 서버의 CPU·메모리까지가 이 범위에 들어옵니다.
바꿔 말하면 그 앞뒤는 안 보입니다. 브라우저가 응답을 받아 화면을 그리는 구간도, 사용자가 클릭하고 반응을 기다리는 구간도 서버 로그 어디에도 안 남습니다.
RUM Agent를 더하면 보이는 구간
RUM 을 붙이면 사용자가 체감하는 로딩 속도, 즉 웹 바이탈 지표가 들어옵니다.
- FCP(First Contentful Paint), LCP(Largest Contentful Paint)
- INP(Interaction to Next Paint), CLS(Cumulative Layout Shift) — INP는 2024년 3월 Core Web Vitals에서 FID를 대체했습니다
- TTFB(Time to First Byte)
여기에 사용자가 무엇을 클릭했고 어느 페이지로 이동했는지, AJAX 요청이 어떻게 나갔는지가 같이 붙습니다. JavaScript 런타임 에러나 네트워크 요청 실패 같은 프론트엔드 에러도 이쪽에서 잡히고, 브라우저 종류와 OS, 모바일인지 데스크톱인지도 같이 들어옵니다.
백엔드는 200ms인데 느리다는 말이 나올 때
백엔드 응답 시간은 200ms 로 찍히는데 사용자는 느리다고 하는 상황이 있습니다. 그때 APM Agent 만 보고 있으면 서버는 빠르다고 나오니 원인을 잡을 데가 없고, 두 Agent 를 굳이 같이 붙이는 이유가 여기 있습니다.
그 간극을 만드는 건 대개 브라우저 쪽인데, 큰 JavaScript 번들이나 렌더링을 막는 리소스, 이미지 로딩, 여러 번 오가는 AJAX 왕복 같은 것들이라 RUM 에만 보입니다. 서버가 아무리 빨라도 화면에 뜨기까지가 느리면 사용자 입장에서는 느린 서비스입니다.
Elastic Cloud 콘솔 화면에서도 이 차이가 그대로 드러나서, APM Agent 만 붙이면 서비스 목록에 백엔드 서비스만 나오고, RUM 을 더하면 프론트엔드 서비스가 별도로 잡히면서 트랜잭션 뷰에 페이지 로드나 라우트 변경 같은 프론트엔드 트랜잭션이 추가됩니다.
서버 성능은 APM, 체감 속도는 RUM
서버 성능만 볼 거면 APM Agent 로 충분하고, 사용자가 체감하는 속도까지 봐야 하면 RUM 을 더합니다. 판단 기준은 지금 답하고 싶은 질문이 어느 쪽이냐입니다. 서버가 느린지 알고 싶으면 APM 이고, 사용자가 느리다고 느끼는지 알고 싶으면 RUM 입니다. 백엔드는 빠른데 불만이 들어오는 상황이라면 이미 RUM 이 보는 구간의 문제입니다.
댓글 0