[참고자료]
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와 같은 방법으로 개발자가 직접 처리해야했다.
→ 즉 데이터를 여러 도큐먼트에 수정하거나 써야 하는 상황에서
등장 배경으로는 하나의 도큐먼트는 원자성을 보장하지만, 여러 도큐먼드끼리는 원자성을 보장하지 않고, 각 도큐먼트는 내장된 도큐먼트가 있음으로 인해서 이들을 함께 트랜잭션하려면 매우 복잡했다.
아래와 같은 두가지 특성을 지키기가 어려우면서