아래는 기본적인 트랜잭션의 개념이지만
gpt가 자꾸 헛소리로 우겨서 내가 직접 찾아 정리함.
https://www.mongodb.com/ko-kr/docs/manual/core/transactions/#transactions-and-atomicity
https://www.mongodb.com/docs/manual/core/transactions-production-consideration/#std-label-txns-locks
분산 트랜잭션은 다음과 같이 원자적입니다.
잠금 단위: 문서
트랜잭션이 잠금을 획득하는 시기: 문서 수정(읽기는 잠금 x)
트랜잭션이 문서를 읽을 때 기준 시점: 트랜잭션 시작 시의 스냅샷 기준
트랜잭션 내부의 읽기 작업은 오래된 데이터를 반환할 수 있으며 이를 부실 읽기라고 합니다. 트랜잭션 내부의 읽기 작업은 커밋된 다른 트랜잭션이나 트랜잭션이 아닌 쓰기에서 수행되는 쓰기를 볼 수 없습니다. 예를 들어 다음 순서를 생각해 보세요.
- 트랜잭션이 진행 중입니다.
- 트랜잭션 외부에서 쓰면 문서가 삭제됩니다.
- 트랜잭션 내부의 읽기 작업은 쓰기 작업 이전의 스냅샷을 사용하므로 현재 삭제된 문서를 읽을 수 있습니다.
매뉴얼 - 트랜잭션 - 프로덕션 고려 사항 - 진행 중인 트랜잭션 및 오래된 읽기
트랜잭션이 수정한 문서를 외부에서 볼 수 있는 시점: 트랜잭션 커밋
트랜잭션이 커밋될 때까지 트랜잭션에서 변경된 데이터는 트랜잭션 외부에 표시되지 않습니다.
매뉴얼 - 트랜잭션 - 트랜잭션 및 원자성
트랜잭션이 잠금을 획득한(수정 중인) 문서를 트랜잭션 외부에서 수정하려고 하면: 쓰기 충돌 대기
트랜잭션이 진행 중이고 문서 수정을 잠긴 경우 트랜잭션 외부에서 쓰기가 동일한 문서를 수정하려고 하면 트랜잭션이 종료될 때까지 쓰기가 대기합니다.
매뉴얼 - 트랜잭션 - 프로덕션 고려 사항 - 진행 중인 트랜잭션 및 쓰기 충돌
트랜잭션 스냅샷 이후 외부에서 수정한 문서를 트랜잭션 내부에서 수정하려고 하면: 트랜잭션 중단
트랜잭션이 진행 중이고 트랜잭션 외부의 쓰기가 나중에 트랜잭션의 작업이 수정하려고 하는 문서를 수정하는 경우, 쓰기 충돌로 인해 트랜잭션이 중단됩니다.
매뉴얼 - 트랜잭션 - 프로덕션 고려 사항 - 진행 중인 트랜잭션 및 쓰기 충돌