본문 바로가기

SpringBoot23

스프링 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.
Spring Batch MultiThread 병렬 처리 시 특정 item이 n번 Process되는 이슈와 이유 Spring Batch Multi Thread를 통하여 작업 처리 도중 이상하게 특정 item들을 ItemProcessor단계에서 여러 번 호출하여 처리하는 이슈가 발생하였다. 이에 대한 원인과 해결책을 찾아보도록 하였다. 우선 전체 코드를 확인해본다.@Slf4j@Configuration@RequiredArgsConstructorpublic class FreeSubNotiRegBatchMultiThreadConfig { private final EntityManagerFactory entityManagerFactory; private final int chunkSize=4; private final FootBallOpenFeignClient footBallOpenFeignClient; .. 2025. 5. 19.