
백엔드
Spring Boot MongoDB 트랜잭션 도입 실전 가이드
두줄요약
MongoDB 트랜잭션의 동작 조건과 Snapshot Isolation, Write Conflict를 설명했습니다. 또한 복제 지연과 이벤트 발행 타이밍 문제를 PRIMARY 설정과 AFTER_COMMIT 이벤트로 해결했습니다.
핵심 내용
- Spring Boot와 MongoDB에서 트랜잭션을 도입할 때의 동작 조건과 설정 요소 정리
- Replica Set, Sharded Cluster, WiredTiger, Write Concern, Read Preference, MongoTransactionManager의 역할 설명
- 트랜잭션 중 PRIMARY/SECONDARY 복제 지연과 Snapshot Isolation, Write Conflict 사례를 통한 주의점 제시
문제 상황
- SECONDARY 복제 지연으로 조회 시 최신 데이터를 못 찾아 Not Found Exception이 발생할 수 있는 문제
- @Transactional 내부에서 SQS 메시지를 먼저 발행해 커밋 전 데이터를 소비자가 조회하는 비일관성 문제
해결 방법
- 트랜잭션 전용 readPreference를 PRIMARY로 설정해 일관성 확보
- @TransactionalEventListener(AFTER_COMMIT)와 ApplicationEventPublisher로 커밋 이후 이벤트 발행
- Outbox 패턴, 지연 전송은 대안이지만 현재 사례에서는 우선 적용하지 않음
적용해볼 점
- 트랜잭션 환경과 단일 노드 환경의 설정 의미 차이 확인
- 읽기 일관성이 중요한 구간만 PRIMARY 기준으로 분리 적용
- 데이터 저장과 메시지 발행 시점을 분리해 커밋 이후 처리 구조 검토
