본문 바로가기

Spring9

Spring WebClient + Reactor 기반 비동기 흐름 정리 subscribe(), doOnSuccess, onErrorResume의 동작 방식과 예외 처리 흐름, 그리고 실패 이력 저장까지. 실무 중심으로 정리한 비동기 처리를 정리했습니다. 왜 이 글을 쓰게 됐는가Spring WebClient 또는 Reactor (Mono, Flux) 기반의 비동기 처리 코드를 다루다 보면, 이런 고민이 한두 번씩은 생깁니다.subscribe() 내부에서 예외를 던지면 호출자가 인식할까?doOnSuccess, onErrorResume은 실제 흐름을 어떻게 바꾸는 걸까?메시지 전송 실패를 DB에 기록하려면 로직을 어디에 넣는 게 좋을까?이 글은 그런 궁금증을 실제 코드와 함께 짚어보고, 실무에 적용할 수 있도록 정리해봤습니다.Mono는 언제 실행되는가?다음처럼 생긴 코드는 많이 .. 2025. 5. 20.
Spring Kotlin JPA에서의 @Transactional 활용 및 트랜잭션 전파 전략 안녕하세요. 이번 글에서는 Spring 기반 애플리케이션에서 트랜잭션 관리가 어떻게 동작하는지, @Transactional 어노테이션을 사용하면 발생할 수 있는 이슈와 그에 따른 해결책을 트러블슈팅 경험을 바탕으로 설명드리고자 합니다. 특히, 전파 옵션 중 REQUIRES_NEW의 필요성과 설정 방법, 그리고 Unchecked Exception과 Checked Exception에 따른 예외 처리 정책 차이에 대해 구체적으로 다루어보겠습니다.1. Spring의 트랜잭션 관리 원리 및 전파 옵션Spring에서는 AOP 기반 프록시를 통해 @Transactional 어노테이션이 적용된 메서드를 호출할 때 자동으로 트랜잭션을 시작하고, 정상 실행 시 커밋, 예외 발생 시 롤백하는 방식으로 트랜잭션을 관리합니다... 2025. 3. 14.
@Async 비동기 메서드와 No thread-bound request found 오류 문제 양상 java.lang.IllegalStateException 이 발생했다. 한 줄기 희망인 Exception log 를 살펴보았다. Exception log 내용 Unexpected exception occurred invoking async method: publicNo thread-bound request found: Are you referring to request attributes outside of an actual web request, or processing a request outside of the originally receiving thread? If you are actually operating within a web request and still receive th.. 2023. 5. 30.
로그인 체크 기능 간결하고 낮은 결합도로 구현해보기 문제점 - 프로젝트를 진행하다 보니 로그인한 사용자만 접근할 수 있는 기능(주문, 결제 등)이 생겼습니다. - 이러한 상황은 인증이 필요한 API마다 로그인 체크 코드를 작성해야 하는 문제로 연결됐습니다. - 핵심 기능 로직과 로그인 체크 코드를 분리시켜서 결합도 낮추는 방법을 고민하였습니다. 해결 방법 1) Class로 분리하여 DI하기 - 처음에 로그인 체크 기능을 메서드나 클래스로 분리하여 DI하는 방법을 사용했습니다. - LoginCheck클래스를 생성하고 로그인 체크 코드를 분리했습니다. HttpSession을 @RequiredArgsConstructor어노테이션을 사용하여 주입받고 session 속성을 체크하여 인증 여부를 확인하는 로직입니다. package com.flab.doorrush.g.. 2022. 1. 28.