Summary 잘못된 형식의 데이터(Poison Pill)가 들어왔을 때, 컨슈머 전체가 마비되는 현상을 방지하기 위해 ErrorHandlingDeserializer를 도입했습니다.

1. 도입 배경 (The Problem)

💀 포이즌 필(Poison Pill) 현상

Producer가 실수로 JSON 형식이 아닌 데이터나, 약속된 DTO와 다른 타입의 데이터를 보냈다고 가정해 봅시다.

  1. 기존 방식 (JacksonJsonDeserializer 직접 사용)

2. 해결 방안 (The Solution)

🛡️ ErrorHandlingDeserializer 적용

Spring Kafka는 이런 상황을 막기 위해 **ErrorHandlingDeserializer**라는 안전장치를 제공합니다.

3. 적용 설정 (Configuration)

application.yml에 다음과 같이 적용되었습니다. Key는 에러 확률이 낮아 그대로 두고, **Value(JSON)**에만 안전장치를 적용했습니다.

spring:
  kafka:
    consumer:
      # [안전장치 적용]
      # 직접 Jackson을 쓰지 않고, ErrorHandlingDeserializer를 메인으로 설정
      value-deserializer: org.springframework.kafka.support.serializer.ErrorHandlingDeserializer

      properties:
        # [위임 설정]
        # "실제로 JSON 변환을 수행할 일꾼(Delegate)은 Jackson입니다"라고 등록
        spring.deserializer.value.delegate.class: org.springframework.kafka.support.serializer.JacksonJsonDeserializer

참고: https://velog.io/@kshired/Spring-Kafka-ErrorHandlingDeserializer