WooLam

락과 트랜잭션 경계 분리: 좌석 예약을 구현하며 배운 실무 패턴

락과 트랜잭션 경계 분리: 직접 겪어보며 정리한 실무 패턴 좌석 예약 기능을 만들면서 락과 트랜잭션의 경계를 어디에 둬야 하는지 한참 고민했다. 처음에는 @Transactional 메서드 안에서 분산 락을 잡고 푸는 식으로 짰다. 그런데 코드 리뷰를 받고 구조를 다시 뜯어보니, 이 방식이 왜 문제가 되는지 그리고 보통은 어떤 패턴을 쓰는지가 눈에 ...

Testcontainers Docker 연결 오류를 해결하지 못하고 다시 yml 방식으로 돌아간 이유

들어가며 개인 프로젝트에서 통합 테스트 환경을 꾸리면서 Testcontainers로 Docker 컨테이너를 띄우는 방식을 다시 시도했다. 예전에는 docker-compose.yml로 테스트 환경을 구성해 큰 탈 없이 써 왔다. 이번에는 좀 더 테스트 친화적인 구조를 만들고 싶었고, 그래서 Testcontainers를 골랐다. 결과부터 말하면 잘 ...

Spring 테스트 구조에서 sourceSet 분리와 Testcontainers를 써보며 느낀 점

들어가며 좌석 예약 동시성 테스트를 구현하면서 unit / integration 테스트를 명확히 나누고 싶다는 생각이 들었다. 패키지만 갈라놓고 끝내는 대신, Gradle의 sourceSet으로 테스트 자체를 물리적으로 떼어내고, 통합 테스트에서는 Testcontainers(MySQL) 로 실제와 유사한 환경을 만들어보려 했다. 해보고 내린 결론은...