목록 보기
MongoDB와 Transaction
백엔드

MongoDB와 Transaction

넥스트리
넥스트리
2023년 6월 29일

두줄요약

Spring Boot와 MongoDB에서 `@Transactional` 사용 시 단일 인스턴스에서는 트랜잭션 오류가 발생했습니다. 레플리카 셋을 구성하고 primary에 연결해야 정상적으로 롤백과 커밋을 처리할 수 있었습니다.

문제 상황

  • Spring Boot와 MongoDB에서 @Transactional 적용 시 Transaction numbers are only allowed on a replica set member or mongos 오류 발생
  • 단일 MongoDB 인스턴스가 아니라 레플리카 셋 또는 샤드 클러스터 환경이 필요한 제약 확인

원인 분석

  • MongoDB 트랜잭션이 논리적 세션과 oplog 기반 동기화에 의존
  • 트랜잭션과 롤백을 위해 복제 구조와 일관성 유지 메커니즘 필요
  • 단일 서버 구성에서는 트랜잭션 번호 사용 자체가 제한

해결 방법

  • Docker로 MongoDB 레플리카 셋 3노드 구성
  • keyfile, rs.initiate(), rs.add()로 복제 집합 초기화
  • Spring Boot에서 primary에 연결하고 MongoTransactionManager 등록

성능/운영 포인트

  • 작은 규모는 레플리카 셋, 대규모·고성능은 샤드 클러스터 선택 경향
  • primary 장애 시 선거로 secondary가 승격되는 구조
  • rollback 가능성에 대비한 WriteConcern 조정 필요

댓글 0

댓글을 작성하려면 로그인이 필요합니다.

댓글을 불러오는 중...