MSA(Microservices Architecture)에서 trace ID와 span ID는 **분산 추적(distributed tracing)**에서 사용되는 고유 식별자들이야. 시스템 전체에서 요청의 흐름을 추적할 수 있게 해주는 핵심 개념입니다.
1. Trace ID
- 하나의 전체 요청(Request)을 식별하는 고유한 ID입니다.
- 예: 사용자가 웹에서 어떤 버튼을 클릭해서 API 요청이 들어오고, 그 요청이 여러 개의 마이크로서비스를 거쳐 처리되는 경우, 이 전체 흐름을 하나의 trace로 봅니다.
- 즉, trace ID는 **“이 요청이 어디서 시작돼서 어디까지 갔는가”**를 나타냄.
2. Span ID
- trace 안에서 **각각의 작업 단위(작은 호출 하나하나)**를 식별하는 ID입니다.
- 예: A 서비스가 B 서비스와 C 서비스를 호출하면, A-B, A-C 각각이 별도의 span이 되고, 각각에 대한 span ID가 있습니다.
- Span은 시작 시간, 종료 시간, 어떤 작업인지 등 세부 정보도 포함됩니다.
구조 예시
[Trace ID: abc123]
┌─────────────┐ ┌─────────────┐
│ User Request│──────▶│ API Gateway │───┐
└─────────────┘ └─────────────┘ │
▼
┌────────────┐
│ Service A │───┐
└────────────┘ │
▼
┌────────────┐
│ Service B │
└────────────┘
- 전체 요청의 흐름이 하나의 Trace ID (
abc123)를 공유하고, - 각 서비스 간 호출은 서로 다른 Span ID를 가짐.
요약
| 항목 | 설명 |
|---|---|
| Trace ID | 전체 요청 흐름을 추적하기 위한 고유 ID |
| Span ID | Trace 내에서 개별 작업을 구분하는 ID |
첨언
- 실제 MSA 구현시 front end에서 api request시점부터 trace id와 span id가 채번되고
- 예를 들어, bff -> api-gateway -> user-service 를 통해 request 가 흘러간다면, 각 서비스는 동일한 trace id로 추적이 되어야 합니다.