일관성 유지 계층
![Untitled](https://s3-us-west-2.amazonaws.com/secure.notion-static.com/5f76e8b9-092c-4e3e-a906-8fe8c8fb3c4a/Untitled.png)
- Single Document : 몽고 db는 Single Document에 대한 일관성을 유지하며, 복제를 통해서 HA(High Availability)를 구성하기 때문에 ‘언젠가는 항상 일관된 데이터를 보장한다.’
- Transaction : 여러 Document와 여러 작업에 대한 원자성을 보장해주다.
- Replica Set Member : 멤버간의 일관성을 제어
- Sharded Cluster : Shard간의 동일한 데이터가 없다는 것을 보장. 만약에 양쪽에 동일한 데이터가 있다면 merge하는 데 문제가 생길 수 있으므로
- 여기에서 Replica Set에 대한 제어는 데이터를 어떻게 읽고 저장할지 사용자가 정의할 수 있다.
![Untitled](https://s3-us-west-2.amazonaws.com/secure.notion-static.com/79577b88-2f5c-4525-8852-7232e8f29b51/Untitled.png)
다시 한번 Replica Set에 대해서 정리하자면,
- Write에 대한 작업을 하는 Primary와
- Read에 대한 처리를 할 수 있는 여러 Secondary(A, B)가 존재하며,
- Oplog에 작업 내역을 저장하므로써 이후에 Secondary(A)에 변경사항을 전달해주고, Secondary(B)끼리도 변경사항을 Sync할 수 있게 한다.
- 그렇다면!! 어느 시점에 대해서 Primary가 Write다가 죽게 되면 그 시점에 Primary와 Secondary와의 Sync가 안 맞을 수 있고,
- 또한, 첫번재 Oplog를 Sync하고 있는 Secondary(A)가 아닌, 그 다음 Secondary(B)에 대해서 작업을 할 때 B와 A의 Secondary가 들고 있는 데이터가 달라지게 된다!
저런 경우에 대해서 개발자는 처리해야 하므로 Read Preference와 Read Concern과 Write Concern에 대해서 알아야 한다.