[참고자료]
https://medium.com/@marchpig/mongodb-multi-document-transactions-d51e047f811d
https://trend21c.tistory.com/2155
https://rastalion.me/mongodb-transaction-management/
몽고db 4.X 버전부터 트랜잭션 기능을 지원함.
사실 트랜잭션은 원래 가능했으나, 이는 같은 도큐먼트 내에서만 가능한 single-documnet transaction 방식이었다.
→ 이렇게 해야 데이터 무결성이 보장되기 때문이다.
Relational 데이터 모델에서는 서로 관계가 있는 데이터들을 정규화하여 서로 다른 테이블에 저장하지만, Document 데이터 모델에서는 서로 관계가 있는 데이터들을 정규화하지 않고 하나의 Document에 저장
을 하기 때문에
그러나 하나의 도큐먼트에서만 트랜잭션을 해도 괜찮은 이상적인 상황만 있는 것은 아니므로 이전에는 2-phase-commits
와 같은 방법으로 개발자가 직접 처리해야했다.
→ 즉 데이터를 여러 도큐먼트에 수정하거나 써야 하는 상황에서
등장 배경으로는 하나의 도큐먼트는 원자성을 보장하지만, 여러 도큐먼드끼리는 원자성을 보장하지 않고, 각 도큐먼트는 내장된 도큐먼트가 있음으로 인해서 이들을 함께 트랜잭션하려면 매우 복잡했다.
아래와 같은 두가지 특성을 지키기가 어려우면서