Skip to content

[feature] 요청별 traceId MDC 로깅 도입 - #164

Merged
gihhyeon merged 1 commit into
developfrom
feat/163-request-traceid-logging
Sep 9, 2026
Merged

gihhyeon merged 1 commit into
developfrom
feat/163-request-traceid-logging

Conversation

@gihhyeon

@gihhyeon gihhyeon commented Sep 9, 2026 •

Copy link
Copy Markdown
Member

요약

요청마다 traceId를 MDC에 심어 모든 로그에 노출하고, nginx의 X-Request-Id를 재사용해 nginx와 앱 로그를 같은 id로 연결한다.

What — 무엇을 바꿨나

  • common/logging/MdcFilter 추가: 요청 진입 시 traceId를 MDC에 세팅, 종료 시 MDC.clear()
    • @Order(HIGHEST_PRECEDENCE)로 Security 필터체인보다 먼저 실행 → 401·예외 로그에도 traceId가 남음
    • X-Request-Id 헤더 우선 사용(길이 64·[A-Za-z0-9-] 검증), 없거나 부적합하면 UUID 생성
  • application.yml에 logging.pattern.level: "%5p [%X{traceId:-}]" 추가 (전 프로파일 상속)
  • MdcFilterTest 추가 (순수 단위)

Why — 왜 필요한가

  • 로그에 요청 식별자가 없어 한 요청이 남긴 로그들을 이어서 추적할 수 없다.
  • nginx 접근로그와 앱 로그를 연결할 공통 id가 없어, 장애 제보 시 "그 요청이 앱 로그의 어디냐"를 특정하기 어렵다.

How — 어떻게 구현했나

  • 로그 인젝션/스푸핑 방지를 위해 헤더 값을 그대로 믿지 않고 길이·문자 검증 후 사용, 부적합하면 생성값으로 대체
  • 전체 콘솔 패턴을 재작성하지 않고 logging.pattern.level만 확장해 최소 변경으로 traceId를 노출(%X{traceId:-}로 traceId 없는 스레드는 [] 처리)
  • 범위: 이 PR은 동기 요청 스레드 로그까지만 다룬다. 기존 @Async 메서드 내부 로그로의 전파(스레드 경계 넘김)는 후속 이슈(@async 풀 분리 + MDC TaskDecorator)에서 처리한다. 머지 시점에 async 로그의 traceId가 비어 있는 것은 정상

체크리스트

  • 불필요한 주석/코드 제거
  • 테스트 추가/갱신 및 통과 (./gradlew test)
  • 공개 계약 영향 확인 (엔드포인트·응답 형태 변경 없음)

관련 이슈

기타 / 리뷰 포인트

  • nginx 설정 별도 필요: 앱은 X-Request-Id를 받도록 구현했고, nginx↔앱 상관관계를 완성하려면 배포 서버 nginx에 아래 반영이 필요하다.
    proxy_set_header X-Request-Id $request_id;
    log_format main '$request_id $remote_addr "$request" $status $body_bytes_sent';
    access_log /var/log/nginx/access.log main;
  • traceId는 UUID 앞 8자리로 축약(가독성). 충돌 가능성은 낮지만, 완전한 유일성이 필요하면 전체 UUID로 조정 가능

요청마다 traceId를 MDC에 심어 모든 로그에 노출한다.
- MdcFilter를 최우선 순서로 등록해 Security 필터체인보다 먼저 실행(401·예외 로그도 포함)
- nginx의 X-Request-Id를 우선 사용(길이·문자 검증), 없거나 부적합하면 생성
- 로그 패턴에 %X{traceId} 추가
@gihhyeon gihhyeon self-assigned this Sep 9, 2026
@gihhyeon gihhyeon added the ✨ Feature 기능 개발 label Sep 9, 2026
@gihhyeon
gihhyeon merged commit 8e10ce1 into develop Sep 9, 2026
2 checks passed
@gihhyeon
gihhyeon deleted the feat/163-request-traceid-logging branch September 15, 2026 04:22
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

✨ Feature 기능 개발

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[feature] 요청별 traceId MDC 로깅 도입

1 participant