Spring Boot 3.x에서 Zipkin 이용

Kim jisu·2025년 4월 16일

TIL

목록 보기
33/43

Spring Boot 3.x에서 Zipkin을 이용한 분산 추적 구현

Spring Boot 3.x 환경에서 Zipkin을 이용한 분산 추적 시스템을 구축하는 방법과 발생할 수 있는 문제점 정리.

1. Spring Cloud Sleuth에서 Micrometer Tracing으로의 변화

Spring Boot 3.x로 버전업되면서 분산 추적 시스템에도 큰 변화가 있었습니다. 이전 버전에서는 Spring Cloud Sleuth를 사용했지만, 3.x 버전부터는 Micrometer Observation API와 Micrometer Tracing을 기반으로 하는 새로운 방식으로 변경되었습니다.

주요 변경사항

  • spring-cloud-starter-sleuth와 spring-cloud-starter-zipkin 의존성이 더 이상 사용되지 않음
  • Micrometer Observation과 Tracing API를 기반으로 한 새로운 분산 추적 아키텍처 도입
  • Brave, OpenTelemetry 등 다양한 추적 시스템과의 연동 방식 변경

2. Docker Compose로 Zipkin 서버 구성하기

먼저 Zipkin 서버를 Docker Compose로 구성해보겠습니다.

services:
  zipkin:
    container_name: zipkin
    image: openzipkin/zipkin
    ports:
      - "9411:9411"
    networks:
      - app_network

networks:
  app_network:
    driver: bridge

이 설정으로 Zipkin 서버를 로컬에서 실행할 수 있으며, http://localhost:9411로 Zipkin UI에 접근할 수 있습니다.

3. Spring Boot 3.x에서 Zipkin 연동을 위한 의존성 설정

Spring Boot 3.x에서 Zipkin을 연동하기 위해서는 다음과 같은 의존성을 추가해야 합니다.

dependencies {
    // 기존 의존성들...
    
    // Zipkin 관련 의존성
    implementation 'io.micrometer:micrometer-observation'
    implementation 'io.micrometer:micrometer-tracing'
    implementation 'io.micrometer:micrometer-tracing-bridge-brave'
    implementation 'io.micrometer:micrometer-registry-prometheus'
    implementation 'io.zipkin.reporter2:zipkin-sender-urlconnection'
    implementation 'io.zipkin.reporter2:zipkin-reporter-brave'
}

각 의존성의 역할

  1. micrometer-observation

    • 관측 가능성(Observability)을 위한 기본 인프라를 제공
    • 애플리케이션의 다양한 지점에서 관측 데이터를 수집하는 API 제공
  2. micrometer-tracing

    • 분산 추적을 위한 핵심 추상화 제공
    • Tracer, Span, SpanBuilder 등 추적에 필요한 인터페이스 포함
  3. micrometer-tracing-bridge-brave

    • Brave 추적 시스템을 Micrometer Tracing API와 연결하는 브릿지
    • Brave는 Zipkin의 Java 클라이언트 라이브러리
  4. zipkin-sender-urlconnection

    • Java의 URLConnection을 사용하여 Zipkin 서버로 추적 데이터를 전송
    • HTTP를 통해 Zipkin 서버와 통신하는 데 필요
  5. zipkin-reporter-brave

    • Brave에서 생성된 추적 데이터를 Zipkin 형식으로 변환하여 보고

4. application.properties 설정

# 애플리케이션 이름 설정
spring.application.name=competition-service

# Zipkin 구성
management.tracing.sampling.probability=1.0
management.zipkin.tracing.endpoint=http://localhost:9411/api/v2/spans

# Actuator 설정
management.endpoints.web.exposure.include=*
management.endpoint.health.show-details=always
management.endpoint.prometheus.enabled=true

# 디버깅을 위한 로그 설정
logging.level.io.micrometer.tracing=DEBUG

주요 설정 항목

  • spring.application.name: Zipkin에서 서비스를 식별하는 데 사용
  • management.tracing.sampling.probability: 추적 샘플링 비율 (1.0은 모든 요청 추적)
  • management.zipkin.tracing.endpoint: Zipkin API 엔드포인트 URL

결론

Spring Boot 3.x에서 Zipkin을 이용한 분산 추적 구현은 이전 버전과 크게 달라졌습니다. Micrometer Observation API와 Tracing 기반의 새로운 접근 방식을 이해하고, 필요한 의존성을 정확히 구성하는 것이 중요합니다.

특히 micrometer-observation, micrometer-tracing, zipkin-sender-urlconnection과 같은 핵심 의존성이 필요하며, 이들이 함께 작동하여 애플리케이션의 추적 데이터를 수집하고 Zipkin 서버로 전송하는 전체 파이프라인을 구성합니다.

profile
Dreamer

0개의 댓글