Skip to content

[FEAT] 카프카 에러 격리를 위한 DLT 컨슈머 구축 #33

Description

@ji-circle

📄 이슈 내용 (기능 요약)

  • Inventory 서비스에서 카프카 메시지 소비 실패 시 이를 격리 보관 및 모니터링하기 위한 DLT 컨슈머를 구축
  • DLT 연동 테스트 중 발견된 토픽 충돌, 역직렬화 보안 정책, OSIV 커넥션 점유 등을 수정하여 파이프라인 안정화

📝 상세 내용 및 요구사항

  1. DLT 컨슈머 구축 (격리 병동):
    • 3회 재시도 후에도 실패한 '독성 메시지'를 처리하기 위해 DeadLetterConsumer를 추가.
    • 단일 텍스트 블록 로깅 및 KafkaHeaders.DLT_EXCEPTION_STACKTRACE를 추출하여 원본 페이로드와 상세 에러 원인을 파악할 수 있도록 구현.
  2. 토픽 이름 충돌(Topic Collision) 결함 수정:
    • 기존에 오더의 '명령'과 인벤토리의 '결과'가 stock.restored라는 동일한 토픽을 사용하여 발생하던 역직렬화 에러 및 장애 도미노 현상 해결.
    • 오더 -> 인벤토리 명령 토픽을 order.stock-restore.requested로 명확히 분리.
  3. Kafka 역직렬화(Deserialization) 신뢰 정책 완화:
    • spring.json.trusted.packages가 특정 패키지로 제한되어 타 서비스(Order 등)의 이벤트를 입구에서 차단하던 문제 해결.
    • 신뢰 범위를 미슐랭 전체 도메인("com.michelet.*")으로 확장하여 안전하게 매핑.
  4. OSIV 비활성화 및 JpaConfig 분리 (성능/테스트 최적화):
    • API 환경에서 불필요한 DB 커넥션 점유(Connection Timeout 유발)를 막기 위해 spring.jpa.open-in-view: false 적용.
    • @WebMvcTest 구동 시 메인 클래스의 @EnableJpaRepositories로 인해 발생하던 DB Bean 생성 에러를 막기 위해 JpaConfig로 설정 분리.

✅ 체크리스트 (구현할 내용)

  • DeadLetterConsumer 클래스 생성 및 *.DLT 텍스트 블록 로깅 구현
  • OrderEventConsumer의 수신 토픽을 order.stock-restore.requested로 변경
  • application.ymlspring.json.trusted.packages 값을 "com.michelet.*"로 변경
  • application.ymlspring.jpa.open-in-view: false 속성 추가
  • 메인 클래스에서 @EnableJpaRepositories를 제거하고 JpaConfig 클래스로 분리

📍 레퍼런스

  • Spring Kafka DLT (Dead Letter Topic) Pattern
  • Catalog 서비스의 DLT 컨슈머 구축 사례 및 OSIV 커넥션 튜닝

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

enhancementNew feature or request

Projects

No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions