💡 핵심 인사이트
분산 추적(Distributed Tracing)은 가시성의 3대 요소 중 하나로, 수십 개의 컨테이너 서버로 쪼개진 마이크로서비스 아키텍처(MSA)에서, 사용자의 '마우스 클릭 한 번(하나의 요청)'이 서버 A ➔ B ➔ C ➔ D를 타고 넘어다닐 때 그 여정을 꼬리표(Trace ID)를 달아 1초 단위로 완벽하게 미행(Tracking)하는 탐정 기술입니다.
Ⅰ. 왜 분산 추적이 필요한가? (MSA 디버깅의 지옥)
과거 통짜 서버(Monolithic) 시절: 사용자가 '결제'를 누르면 하나의 덩어리 서버가 주문 확인, 재고 차감, 카드 승인을 다 처리했습니다. 로그 파일 1개만 까보면 에러가 어디서 났는지 바로 보입니다.
현재 MSA 클라우드 환경: 사용자가 쇼핑몰 앱에서 '결제' 버튼을 딱 한 번 눌렀을 뿐인데, 뒤에서는...
- 프론트 API 게이트웨이(A 서버)가 요청을 받음.
- 장바구니 서비스(B 서버)에 물건 확인 요청.
- 재고 서비스(C 서버)에 수량 확인 요청.
- 카드사 연동 서비스(D 서버)로 결제 요청.
이 4개의 과정이 각각 다른 서버(다른 컴퓨터)에서 핑퐁으로 일어납니다. 만약 고객 화면에서 빙글빙글 10초간 무한 로딩(에러)이 떴다면? A가 느린지, B가 죽었는지, D가 뻗었는지, 엔지니어는 4대의 서버 로그를 일일이 뒤져서 "이 로그가 아까 그 고객이 누른 그 결제 건 로그가 맞나?" 퍼즐을 맞춰야 하는 지옥(살인적인 디버깅)이 열립니다.
Ⅱ. 분산 추적의 동작 원리 (Trace ID와 Span)
이 지옥을 해결하기 위해 구글이 'Dapper'라는 논문으로 제안하고, 현재 Jaeger, Zipkin, Datadog 같은 툴이 사용하는 꼬리표 기술입니다.
1. 트레이스 ID (Trace ID) - "손님 팔찌 번호"
- 고객이 '결제' 버튼을 누르고 최초로 A 서버(게이트웨이)에 들어오는 그 0.1초의 순간, 시스템은 이 요청 덩어리 전체에
Trace ID: 9988이라는 세상에 하나뿐인 고유한 주민번호(꼬리표)를 발급하여 헤더에 붙입니다. - 이
Trace ID는 A ➔ B ➔ C ➔ D 서버로 HTTP 통신을 타고 넘어갈 때마다 바이러스처럼 감염되어 모든 로그 파일에 똑같이 쾅쾅 찍힙니다.
2. 스팬 (Span) - "각 방의 체류 시간"
- 전체 여정이 Trace라면, 스팬(Span)은 **"A 서버에서 B 서버로 넘어가는 1개의 짧은 징검다리 작업"**을 의미합니다.
- 각 스팬은 "나는 B 서버야. A한테서 요청받았고, C한테 넘길 건데 내 방에서 처리하는 데 총 0.5초 걸렸어!"라는 시작 시간과 종료 시간, 에러 유무를 기록합니다.
Ⅲ. 폭로되는 병목의 민낯 (시각화)
나중에 장애가 터졌을 때, 관리자는 툴(Jaeger) 검색창에 Trace ID: 9988 하나만 딱 검색합니다.
그러면 화면에 다음과 같은 시각적 막대그래프(폭포수 차트)가 쫙 뜹니다.
전체 결제 요청 (Trace ID: 9988) ➔ 총 10.2초 소요 (에러!)
├─ A: API 게이트웨이 검증 ➔ 0.1초 (성공)
├─ B: 장바구니 재고 확인 ➔ 0.1초 (성공)
└─ D: 카드사 결제 연동 API ➔ 10.0초 대기 중 (Timeout 💥 에러 폭발 구간!)
관리자는 1초 만에 "아, 우리 서버가 잘못된 게 아니라, 카드사 연동하는 D 서버 쪽 네트워크가 응답이 없어서 결제가 10초간 멈추고 뻗은 거구나!"라고 정확한 병목 지점(Bottleneck)을 핀셋으로 집어냅니다.
📢 섹션 요약 비유: 분산 추적은 초대형 놀이공원에서 잃어버린 아이를 찾는 **'GPS 위치 추적 팔찌(Trace ID)'**입니다. 아이가 정문(A 서버)으로 들어올 때 팔찌를 채워두면, 아이가 회전목마(B 서버)에서 10분 놀고, 바이킹(C 서버)에서 30분 논 기록(Span)이 중앙 통제실 모니터에 선명하게 그려집니다. 아이가 귀가의 집(D 서버)에서 나오지 않고 갇혀서 길을 잃었다는 것을 관리자는 단 1초 만에 파악하고 구조대(버그 수정)를 보낼 수 있습니다.