본문 바로가기
클라우드/opentelemetry

🚀 OpenTelemetry의 숨겨진 호환성 비밀: B3와 Jaeger 전파자 파헤치기

by gasbugs 2025. 10. 14.

안녕하세요! 최신 클라우드 네이티브 환경에서 Observability(관측 가능성)는 이제 선택이 아닌 필수입니다. 그 중심에는 분산된 서비스들의 요청 흐름을 한눈에 추적할 수 있게 해주는 분산 추적(Distributed Tracing) 기술이 있죠.

그리고 이 분산 추적의 표준으로 자리 잡은 OpenTelemetry! 오늘은 OpenTelemetry가 어떻게 최신 표준을 지키면서도 기존 시스템들과 아름다운 공존을 만들어내는지, 그 비밀스러운 호환성의 열쇠 🔑, 바로 전파자(Propagator)에 대해 깊이 알아보겠습니다.

🌐 OpenTelemetry의 기본: W3C Trace Context

OpenTelemetry는 기본적으로 W3C Trace Context라는 웹 표준을 사용합니다. 이는 여러 서비스가 서로 통신할 때, 추적 정보를 일관된 방식으로 주고받기 위한 약속과도 같아요. 마치 국제우편물에 정해진 양식으로 주소를 적는 것과 비슷하죠! 📮

하지만 모든 시스템이 처음부터 이 최신 표준을 사용했던 것은 아닙니다. OpenTelemetry가 등장하기 전에도 이미 훌륭한 분산 추적 시스템들이 현업에서 널리 사용되고 있었죠. 만약 우리 회사의 일부 서비스는 아직 예전 시스템을 사용하고 있다면 어떻게 될까요? 추적 정보가 중간에 끊겨버리는 대참사가 발생할 수 있습니다! 😱

🤝 오래된 동료들과의 악수: B3와 Jaeger 전파자

걱정 마세요! 똑똑한 OpenTelemetry는 이런 상황을 대비해 다양한 전파 형식을 지원하며 기존 시스템과의 호환성을 보장합니다. 그 대표적인 주자가 바로 B3Jaeger입니다.

1️⃣ B3 전파자 (From Zipkin)

B3는 트위터에서 개발한 분산 추적 시스템인 Zipkin에서 유래한 전파 형식입니다. 오랫동안 많은 시스템에서 사실상의 표준처럼 사용되어 왔기 때문에, 여전히 많은 레거시 시스템과 라이브러리에서 찾아볼 수 있습니다.

B3는 HTTP 요청 헤더에 다음과 같은 정보를 담아 컨텍스트를 전파합니다.

  • X-B3-TraceId: 전체 트랜잭션을 나타내는 고유 ID
  • X-B3-SpanId: 해당 작업 단위를 나타내는 고유 ID
  • X-B3-ParentSpanId: 이전 작업의 Span ID
  • X-B3-Sampled: 추적 데이터의 샘플링 여부

만약 여러분의 시스템 어딘가에 Zipkin이 아직 열심히 일하고 있다면, OpenTelemetry SDK에서 B3 전파자를 활성화하여 끊김 없는 추적 환경을 구축할 수 있습니다. 🔗

2️⃣ Jaeger 전파자 (From Jaeger)

Jaeger는 Uber에서 개발하여 CNCF의 졸업 프로젝트가 된 또 다른 인기 분산 추적 시스템입니다. Jaeger 역시 자신만의 고유한 전파 형식을 가지고 있었습니다.

Jaeger는 uber-trace-id라는 단일 헤더를 사용하여 추적 정보를 압축적으로 전달합니다.

  • uber-trace-id: {trace-id}:{span-id}:{parent-span-id}:{flags} 형식으로 구성됩니다.

OpenTelemetry는 Jaeger 전파자 또한 지원하므로, 기존 Jaeger 클라이언트를 사용하는 서비스와도 완벽하게 연동하여 매끄러운 추적 데이터를 확보할 수 있습니다. ✨

🤔 잠깐, 이건 전파 형식이 아니에요! (흔한 오해)

분산 추적의 컨텍스트 전파를 이야기할 때 가끔 혼동되는 개념들이 있습니다. 이 기회에 확실히 짚고 넘어가요!

  • TCP and UDP 🌐: 이들은 데이터를 전송하는 네트워크 프로토콜입니다. 데이터를 실어 나르는 배나 비행기 역할이지, 주소가 적힌 편지(컨텍스트) 그 자체는 아닙니다.
  • SOAP and XML-RPC ✉️: 웹 서비스 통신을 위한 프로토콜입니다. 서비스 간에 어떻게 메시지를 주고받을지 약속하는 규칙에 가깝습니다.
  • GraphQL and gRPC 🚀: 이들은 API를 위한 쿼리 언어이거나 원격 프로시저 호출(RPC) 프레임워크입니다. 컨텍스트 정보가 이들을 통해 전달될 수는 있지만, 그 정보의 '형식'을 정의하지는 않습니다.

✨ 마치며

OpenTelemetry가 강력한 이유는 단순히 새로운 표준을 제시하는 데 그치지 않고, 과거의 유산과도 지혜롭게 공존하는 방법을 제공하기 때문입니다. B3, Jaeger와 같은 다양한 전파자를 지원함으로써, 우리는 대규모의 복잡한 시스템에서도 점진적으로 현대적인 Observability 환경을 구축해 나갈 수 있는 유연성을 얻게 됩니다.

여러분의 서비스 환경에 맞는 전파자를 선택하여, 끊김 없이 흐르는 데이터의 강물을 만들어보세요! 🏞️

OpenTelemetry, 분산 추적, Observability, 마이크로서비스, W3C Trace Context, B3, Jaeger, Zipkin, 컨텍스트 전파