Transactions
getTxJob의 MongoDB ClientSession transaction, Reactor Context session propagation, retry 책임과 Spring transaction 경계를 설명합니다.
getTxJob
getTxJob(...)은 MongoExecutionContext.startSession()으로 ClientSession을 열고 transaction을 시작한 뒤 Reactor Context에 session binding을 넣습니다. 정상 완료 시 commit, error/cancel 시 active transaction abort, 마지막에 session close 순서로 처리합니다.
Session scope
transaction session은 MongoExecutionContext#getSessionScope()가 같은 DSL 실행에만 전파됩니다. 기본 DriverMongoExecutionContext는 자신의 MongoClient를 session scope로 사용합니다.
Transaction retry는 호출 측 책임입니다
getTxJob(...)은 TransientTransactionError 같은 MongoDB transaction 오류를 자동 retry하지 않습니다. 재시도 여부와 횟수는 operation의 멱등성, 외부 side effect, 업무 규칙을 아는 호출 애플리케이션에서 결정합니다.
Spring transaction과의 경계
Spring @Transactional / TransactionalOperator
Spring Data MongoDB가 관리하는 transaction/session 경계입니다.
ReactiveMongoDsl#getTxJob
DSL이 직접 ClientSession을 시작하고 Reactor Context로 전달합니다.