Test 3

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

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

백엔드 멘토링 2025.12.14

[회고록] Nomadic 프로젝트 API 완성도 기록지

굉장히 늦은 감이 있는 Nomadic 프로젝트의 회고록이다. 이렇게 늦게 회고록 느낌의 글을 쓰는 이유는 나는 Spring 기반의 웹 서버 개발자를 희망하기에, 주로 백엔드 개발을 공부하고, 연습한다. 따라서, 이 프로젝트의 경우에도 백엔드 부분은 모든 기능을 완성했고, 이를 Postman과 같은 툴을 사용해서 테스트까지 마쳤지만, 프론트가 없고, 실제 배포를 해서 유지하는 프로젝트가 아닌 만큼, 추후에 다른 사람이 이 프로젝트의 기능이 잘 작동하는지 확인할 방법이 없었다. 따라서 나는 내가 만든 프로젝트의 모든 api들의 작동을 Postman으로 호출하여, 어떻게 응답이 오는지 기록을 해놓고자 했고, 이 회고록을 쓰게 되었다. 이 회고록의 목적이 기술적 기록이 아닌 프로젝트의 완성도에 대한 기록이니만큼..

백엔드 멘토링 2024.09.28

계좌 잔액 업데이트 동시성 문제 해결 과정

이 글에서는 프로젝트를 진행하면서 겪은 동시성 문제와 이를 해결한 과정을 기록하고자 한다. 주식 투자 시뮬레이션 프로젝트를 진행하는 과정에서, 나는 특정 주식에 대한 매도와 매수 기능을 구현해야했다. @RequiredArgsConstructor@Servicepublic class TradeService { private final TradeTraceService traceService; private final MemberRepository memberRepository; private final AccountRepository accountRepository; private final StockService stockService; @Transactional public..

백엔드 멘토링 2024.09.03