본문 바로가기

SpringBoot24

Kafka Consumer 예외 처리 핸들링 안녕하세요. 다른 서비스와의 통신 결합도를 낮추고 비동기 처리를 위해 Spring Kafka를 도입했습니다. 비동기 환경에서는 메시지 처리 중 발생하는 예외에 대한 안정적인 핸들링 전략이 필수적입니다.오늘은 Spring Kafka를 도입함에 따라 반드시 고려해야 하는 Consumer 예외 처리 핸들링 방식들에 대해 이야기해보려 합니다. 예외 처리 정책우선 제가 정의한 예외 처리 정책은 다음과 같습니다.예외 유형재시도최종 조치재시도 가능한 예외3회 재시도[kafka-fail] 토픽에 메시지 발행재시도 불가능한 예외 재시도 X[kafka-fail] 토픽에 메시지 발행[kafka-fail] 토픽 역할: 실패 로그(DB 저장) 처리 전용 DLT(Dead Letter Topic) 지금부터 예외 핸들링 방식들을.. 2025. 10. 7.
스프링 Errorcode 개선기 안녕하세요.이번 글에서는 기존 ErrorCode 처리 방식에서 보였던 부족한 점들을 개선하기 위해 고민한 과정을 정리해 보려 합니다. 중점 사항에러 코드는 중복 불가이며, 가능하다면 컴파일 단계에서 방지해야 한다.상황에 맞는 HttpStatus를 사용해야 한다.ErrorCode를 왜 커스터마이징했는지, 왜 세분화했는지는 이미 많이 다뤄진 주제이므로 이번 글에서는 생략하겠습니다.우선 기존 Error Code들은 어떻게 처리했는지 살펴봅시다.기존 방식우선 클라이언트에게 응답할 응답 객체를 정의하였습니다.@Getter@Builder@NoArgsConstructor@AllArgsConstructor@JsonInclude(JsonInclude.Include.NON_NULL)public class ApiRespon.. 2025. 8. 19.
@TransactionalEventListener가 기대한 대로 동작하지 않은 이유와 해결 과정 안녕하세요. 이번 글에서는 프로젝트 내에서 회원가입, 로그인, 알림 등록 등 특정 이벤트 발생 시 고객에게 알림을 전송하는 기능을 구현하며 고민했던 내용들을 정리해 보려 합니다. 제가 구현하고자 했던 기능의 핵심 요구사항은 다음과 같습니다:회원가입, 로그인, 로그아웃과 같은 주요 이벤트는 성공한 이후에만 알림이 발송되어야 한다.그러나 알림 발송 실패로 인해 해당 이벤트의 처리가 영향을 받아서는 안 된다.이제부터 제가 구현했던 방식들을 보여드리겠습니다. 1. 알림 발송 서비스 객체 직접 참조 방식먼저, 회원가입이 완료된 후 NotificationFacade를 직접 호출하여 알림을 발송하도록 구현했습니다.@Service@RequiredArgsConstructorpublic class JoinService {.. 2025. 8. 1.
Spring Batch MultiThread 병렬 처리 시 LazyInitializationException 발생 원인과 해결 과정(2) 이번 장에선 해결 과정에 대해 설명한다. 앞선 장에서 설명한 발생 원인을 간단하게 설명하면 아래와 같다.JpaPagingItemReader를 모든 스레드가 공유하며 내부적으로 사용하는 EntityManager 또한 공유되고 결론적으론 영속성 컨텍스트를 공유한다. 여러 Chunk가 서로 다른 스레드에서 동시에 실행되는데, 이 때, JpaPagingItemReader.doReadPage 메소드 내부 영속성 컨텍스트 초기화 로직으로 인해 다른 스레드의 영속성 컨텍스트까지 영향을 받아 Lazy로딩 시 LazyInitializationException 발생한다. 기존 에러 발생한 코드들을 본다.@Entitypublic class FreeSubNotiEntity { @Id @GeneratedValue(.. 2025. 6. 20.