Note
[Monitoring, Todak-Todag] Application Performance Monitoring
쉽게 말하면 APM(Application Performance Monitoring)은 애플리케이션의 성능과 요청 흐름을 관찰하면서, 어디서 지연이나 오류가 발생했는지 찾기 위한 모니터링 도구 또는 체계라고 보면 된다
예를 들어 APM에서는 다음과 같은 정보를 확인할 수 있다
- 요청 응답시간
- 에러율
- 서비스별 지연 시간
- Trace / Span
- 특정 요청이 어떤 서비스를 거쳤는지
- 어느 구간에서 병목이나 오류가 발생했는지
- 메트릭·로그·Trace를 함께 확인해 원인을 좁히는 과정
상용 APM의 예로는 Datadog APM, New Relic 등이 있다
다만 Todak-Todag 프로젝트의 문제는 관측 도구가 없는 것이 아니었다 이미 Prometheus·Loki·Zipkin을 통해 메트릭·로그·Trace를 각각 수집하고 있었지만, RabbitMQ 발행·소비와 Feign 호출 구간에서 Trace Context 전파가 누락되어 하나의 요청 흐름이 여러 Trace로 끊기는 문제가 있었다
따라서 상용 APM을 추가로 도입하는 것보다, 기존 관측 환경을 유지하면서 끊어진 Trace Context 전파 구간을 연결하는 방향이 문제에 더 직접적인 해결책이라고 판단했다
RabbitMQ Producer·Consumer와 Feign 구간에 Micrometer Observation/Tracing을 적용해 Trace Context를 전파했고, 이후 하나의 요청을 서비스 간 전체 흐름으로 추적할 수 있도록 구성했다
용어사전
APM : Application Performance Monitoring. 애플리케이션의 성능과 요청 흐름을 관찰하고 문제 원인을 찾기 위한 모니터링 방식 또는 도구
Observability(관측 가능성) : 메트릭·로그·Trace 같은 외부 데이터를 통해 시스템 내부에서 어떤 일이 일어나고 있는지 파악할 수 있는 정도
Trace : 하나의 요청이 여러 서비스와 작업을 거치는 전체 흐름
Span : 하나의 Trace 안에 포함된 개별 작업 구간. 예를 들어 RabbitMQ publish, Consumer 처리, Feign 호출 등이 각각 Span이 될 수 있다
Trace Context : Trace ID와 Span 정보처럼, 현재 요청의 추적 정보를 다음 처리 구간으로 전달하기 위한 정보
Context Propagation : Trace Context를 HTTP 요청이나 메시지 헤더 등을 통해 다음 서비스 또는 작업으로 전달하는 과정
'Note' 카테고리의 다른 글
| [Transaction] TransactionSynchronizationManager 구조 (0) | 2026.10.06 |
|---|---|
| [Transactional] 트랜잭션이 시작됐는데, Connection을 어디다 들고 있지? (0) | 2026.10.06 |
| [Java] Character (0) | 2026.10.05 |
| [Java] StringBuilder (0) | 2026.10.05 |
| [Java] == vs equals (0) | 2026.10.05 |