Transaction 2

@TransactionalEventListener(AFTER_COMMIT) 제대로 테스트하기

사이드 프로젝트로 레시피 서비스를 만들면서, 이런 요구사항이 생겼다.“회원가입이 완료되면, 이 유저에게 냉장고를 하나 자동으로 만들어 붙여주자.” 도메인적으로는 꽤 자연스러운 흐름인데, 트랜잭션을 생각하기 시작하니까 조금 복잡해진다.냉장고 생성은 부가 기능이다.냉장고 생성이 실패했다고 해서 회원가입까지 롤백되면 안 된다.하지만 회원가입과 냉장고 생성은 연쇄적으로 일어나야 한다.그래서 선택한 게 Spring 이벤트(@TransactionalEventListener) + AFTER_COMMIT + 별도 트랜잭션 조합이었다.구현까진 잘 됐는데, 문제는 그다음이었다.“이걸 테스트하려고 하니까, JPA 슬라이스 테스트, H2, AFTER_COMMIT, 트랜잭션이 서로 싸우기 시작했다…” 이 글은 내가 실제로 겪었..

백엔드 멘토링 2025.12.14

Transaction이란?

Transaction이란? Transaction이란 데이터의 상태를 변화시키기 위한 작업들의 집합 단위이다. Spring에서 @Transactional의 동작과정 @Transaction이 적용되어 있을 경우 해당 클래스에 대한 트랜잭션 기능이 적용된 프록시 객체가 생성된다. 이 프록시 객체는 @Transactional이 포함된 해당 메서드가 호출될 경우 트랜잭션을 시작하고, 정상 여부에 따라 Commit 또는 Rollback을 수행한다. 정상여부는 default로 RuntimeException이 발생했는지 안했는지의 기준으로 결정된다. Transaction의 특징 Transaction은 ACID라고 불리는4가지의 특징이 있는데 원자성 (Atomicity) : 트랜잭션이 데이터베이스에 모두 반영되던가, 아..

백엔드 멘토링 2023.09.23