mongoDB의 트랜잭션

윤종성·2025년 4월 26일
0

실무

목록 보기
2/5

아래는 기본적인 트랜잭션의 개념이지만
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

분산 트랜잭션은 다음과 같이 원자적입니다.

  • 트랜잭션은 모든 데이터 변경 사항을 적용하거나 변경 사항을 롤백합니다.
  • 트랜잭션이 커밋되면 트랜잭션에서 이루어진 모든 데이터 변경 사항이 저장되고 트랜잭션 외부에서 볼 수 있습니다. 트랜잭션이 커밋될 때까지 트랜잭션에서 변경된 데이터는 트랜잭션 외부에 표시되지 않습니다.
  • 트랜잭션이 중단되면 트랜잭션에서 발생한 모든 데이터 변경 사항은 표시되지 않고 삭제됩니다. 예를 들어, 트랜잭션의 작업이 실패하면 트랜잭션이 중단되고 트랜잭션의 모든 데이터 변경 사항이 표시되지 않은 채로 폐기됩니다.

정리

  1. 잠금 단위: 문서

  2. 트랜잭션이 잠금을 획득하는 시기: 문서 수정(읽기는 잠금 x)

  3. 트랜잭션이 문서를 읽을 때 기준 시점: 트랜잭션 시작 시의 스냅샷 기준

    트랜잭션 내부의 읽기 작업은 오래된 데이터를 반환할 수 있으며 이를 부실 읽기라고 합니다. 트랜잭션 내부의 읽기 작업은 커밋된 다른 트랜잭션이나 트랜잭션이 아닌 쓰기에서 수행되는 쓰기를 볼 수 없습니다. 예를 들어 다음 순서를 생각해 보세요.

    1. 트랜잭션이 진행 중입니다.
    2. 트랜잭션 외부에서 쓰면 문서가 삭제됩니다.
    3. 트랜잭션 내부의 읽기 작업은 쓰기 작업 이전의 스냅샷을 사용하므로 현재 삭제된 문서를 읽을 수 있습니다.

    매뉴얼 - 트랜잭션 - 프로덕션 고려 사항 - 진행 중인 트랜잭션 및 오래된 읽기

  4. 트랜잭션이 수정한 문서를 외부에서 볼 수 있는 시점: 트랜잭션 커밋

    트랜잭션이 커밋될 때까지 트랜잭션에서 변경된 데이터는 트랜잭션 외부에 표시되지 않습니다.

    매뉴얼 - 트랜잭션 - 트랜잭션 및 원자성

  5. 트랜잭션이 잠금을 획득한(수정 중인) 문서를 트랜잭션 외부에서 수정하려고 하면: 쓰기 충돌 대기

    트랜잭션이 진행 중이고 문서 수정을 잠긴 경우 트랜잭션 외부에서 쓰기가 동일한 문서를 수정하려고 하면 트랜잭션이 종료될 때까지 쓰기가 대기합니다.

    매뉴얼 - 트랜잭션 - 프로덕션 고려 사항 - 진행 중인 트랜잭션 및 쓰기 충돌

  6. 트랜잭션 스냅샷 이후 외부에서 수정한 문서를 트랜잭션 내부에서 수정하려고 하면: 트랜잭션 중단

    트랜잭션이 진행 중이고 트랜잭션 외부의 쓰기가 나중에 트랜잭션의 작업이 수정하려고 하는 문서를 수정하는 경우, 쓰기 충돌로 인해 트랜잭션이 중단됩니다.

    매뉴얼 - 트랜잭션 - 프로덕션 고려 사항 - 진행 중인 트랜잭션 및 쓰기 충돌

profile
알을 깬 개발자

0개의 댓글