[BE-02] application.yml — registry·tracing·env 태그 config

작업 내용 (설계 의도)

근거 TDD: ../TDD.md “인터페이스·엔드포인트 계약”, ADR-001, ADR-005.

변경 사항

backend/src/main/resources/application.ymlmanagement 블록을 관측 스택에 맞게 재구성한다. Datadog export 블록을 제거하고, Prometheus 노출·100% 샘플링 tracing·OTLP 발신·env 태그 매핑을 설정한다.

  • 제거: management.datadog.metrics.export.* (application.yml:160-167)
  • 유지: management.endpoints.web.exposure.includeprometheus,metrics (registry가 생겨 실제 동작)
  • 유지: management.metrics.tags.env: ${APP_ENV:local} (신규 키 미도입 — ADR-005)
  • 추가: management.tracing.sampling.probability: 1.0
  • 추가: management.otlp.tracing.endpoint: ${MANAGEMENT_OTLP_TRACING_ENDPOINT:http://localhost:4318/v1/traces} (Spring Boot 3.3.5는 OTLP tracing HTTP 전용 — Collector HTTP 포트 4318 + /v1/traces. transport 프로퍼티는 3.4+ 전용이라 두지 않는다 — 구현 중 확정, ADR-003 참조)
  • 추가: exemplar 옵션(P2, best-effort): management.prometheus.metrics.export exemplar 관련 프로퍼티 — 무리하면 생략(구현에서 생략)

무중단: MANAGEMENT_OTLP_TRACING_ENDPOINT 미주입 시 로컬 기본값으로 사실상 no-op → Collector 준비 전에도 앱 정상(플래그 등가). 롤백: management 블록 revert.

파일 소유는 application.yml 단독 — BE-03(kt config)·BE-04(logback)와 파일 교집합 없음.

의존

  • BE-01 (tracing 의존성이 있어야 management.tracing/management.otlp가 바인딩됨)

다이어그램

처리 흐름

sequenceDiagram
    participant A as App
    participant Y as application.yml
    participant C as OTel Collector
    A->>Y: management config 로드
    A->>A: PrometheusMeterRegistry 활성 (/actuator/prometheus 200)
    A->>C: OTLP trace 발신 (sampling 1.0)
    Note over A,C: endpoint 미설정 시 no-op

클래스 의존

flowchart LR
    YML["application.yml"] --> MET["management.metrics.tags.env"]
    YML --> TR["management.tracing.sampling"]
    YML --> OTLP["management.otlp.tracing.endpoint"]

테스트 케이스

  • 앱 부팅 후 GET /actuator/prometheus가 200을 반환하고 jvm_memory_used_bytes를 포함한다.
  • 노출된 메트릭에 env="local" 태그가 부착돼 있다(APP_ENV 미설정 기본값).
  • management.datadog 프로퍼티가 application.yml에 존재하지 않는다(회귀 감지).
  • OTEL_EXPORTER_OTLP_ENDPOINT 미설정 상태에서도 앱이 정상 부팅한다(export no-op, 요청 처리 무영향).
  • management.tracing.sampling.probability가 1.0으로 로드된다.