학습일지/Architecture
[Architecture] 분산 추적
Merge Log
2025. 9. 18. 11:39
분산추적 왜 필요한가?
- MSA 에서 여러 서비스간 호출을 수행합니다. 이때 문제가 발생했을때 복잡한 호출관계 때문에 원인을 파악하기 어려울 수 있습니다
- 이를 해결하기 위해 서비스 호출 흐름을 시각화하여 표현하거나 로깅을 할 수 있습니다
주요 개념 - 트레이스(Trace), 스팬(Span), 컨텍스트(Context)
트레이스(Trace)
- 트레이스는 하나의 요청이 시작부터 끝까지 각 서비스를 거치는 전체 흐름을 나타냅니다
- 하나의 트레이스는 여러 스팬으로 구성 → 스팬의 묶음 == 하나의 트레이스
- 트레이스 ID 는 각 스팬에 공통으로 부여되며 이를 통해 트레이스 ID 하나로 서비스 전체 요청 흐름을 추적할 수 있습니다
스팬(Span)
- 분산 추적에서 가장 작은 단위이며 개별 작업 또는 요청을 나타냅니다
- 스팬은 시작 시간과 종료 시간을 기록, 작업의 지속 시간을 표현할 수 있습니다
- 고유한 스팬 ID 를 가지며 트레이스 ID 와 함께 작업을 식별하는 역할을 합니다
- 부모-자식 관계를 가질 수 있으며 호출 계층 구조를 표현할 수 있습니다
- 메타데이터(태그, 로그, 이벤트 등)을 추가할 수 있습니다
컨텍스트(Context)
- 요청이 서비스 간에 전달될때 함께 전파되며 각 서비스가 요청의 전체 흐름에 대한 정보를 가질 수 있도록 합니다
- 컨텍스트는 트레이스 ID, 스팬 ID 등의 정보를 포함하며 서비스 요청의 출처와 경로를 추적할 수 있도록 도와줍니다
zipkin 을 통한 호출 흐름 시각화

테스트 코드
- OrderService → ProductService 호출 흐름
- https://github.com/leeMK09/MemoMemo/tree/main/Playground/loadBalance_ribbon_eureka