MongoDB readConcern과 readPreference 완벽 정리 — 일관성과 가용성의 핵심 키워드

 MongoDB는 고가용성과 확장성을 자랑하는 NoSQL 데이터베이스입니다. 하지만 분산 시스템인 만큼, "언제 어디서 데이터를 읽느냐" 에 따라 결과가 달라질 수 있습니다.

바로 이때 중요한 설정이 readConcern과 readPreference입니다.

이 포스트에서는 MongoDB의 읽기 일관성(readConcern)과 읽기 우선순위(readPreference)를 정리하고, 조합 시의 특징까지 알아봅니다. 실무에서 어떻게 적용하면 좋을지도 함께 살펴보세요.


✅ readConcern이란?

readConcern은 읽은 데이터의 일관성 수준을 지정합니다.
다르게 말하면, "이 데이터가 얼마나 확실하게 저장된 건지"를 결정하죠.


readConcern 수준설명
local(기본값) primary 노드의 메모리 상 데이터. 빠르지만 아직 복제되지 않았을 수도 있음.
available어떤 노드든 응답 가능하면 데이터를 반환. 일관성 거의 없음.
majority다수 노드에 커밋된 데이터만 읽음. 일관성과 안정성 우수.
linearizable가장 강력한 일관성. 단일 쓰기/읽기 작업의 순서 보장. 느리고, 반드시 primary에서만 동작.
snapshot트랜잭션에서 사용되는 일관된 데이터 스냅샷. 복잡한 트랜잭션 처리 시 유용.

💡 실무 팁: 일반적인 애플리케이션에서는 majority가 안정성과 성능의 균형이 좋습니다.


✅ readPreference란?

readPreference는 클라이언트가 어떤 노드에서 데이터를 읽을지를 지정합니다.
분산 환경에서의 부하 분산, 지연 시간 최적화 등에 중요합니다.


readPreference설명
primary(기본값) 항상 primary 노드에서만 읽음. 가장 일관성 있음.
primaryPreferred가능하면 primary, 안 되면 secondary. 장애 대응에 유연.
secondary항상 secondary에서 읽음. primary 부하 분산. 하지만 최신 데이터 아닐 수 있음.
secondaryPreferredsecondary 우선, 없으면 primary. 읽기 가용성 우선.
nearest가장 응답이 빠른 노드에서 읽음 (네트워크 latency 기반). 빠르지만 일관성은 낮음.

💡 실무 팁읽기 지연(latency)이 중요한 경우에는 nearest가, 데이터 일관성이 중요한 경우에는 primary 또는 majority 조합이 적합합니다.

🔀 조합 시 특징


readPreferencereadConcern특징
primarymajority안정적이고 일관성 높은 읽기. 일반 서비스에 적합.
secondarylocal빠르지만 데이터 지연 가능성 있음. 캐시 성격의 읽기 요청에 적합.
nearestmajority빠르면서도 어느 정도 일관성 확보. 네트워크 최적화용.
primarylinearizable가장 높은 일관성. 단일 키 일관성이 중요한 시스템(예: 은행). 느릴 수 있음.
primarysnapshot트랜잭션 내 일관된 데이터 처리. 여러 문서를 묶어 처리할 때 적합.

📌 정리

  • readConcern은 읽을 때 데이터가 얼마나 안전하게 커밋되었는가를 의미
  • readPreference는 어느 노드에서 데이터를 읽을지를 설정
  • 실무에서는 majority + primary 조합이 가장 안전한 기본값
  • 트랜잭션이 필요한 경우 snapshot 사용
  • 데이터 지연을 감수해도 성능이 중요할 땐 secondary 또는 nearest 고려


📚 마무리

MongoDB는 읽기 설정만으로도 다양한 일관성과 가용성 전략을 선택할 수 있는 유연한 데이터베이스입니다.
readConcern과 readPreference는 단순한 설정값이 아니라, 비즈니스의 요구사항에 따라 데이터의 안전성과 성능을 맞출 수 있는 중요한 도구입니다.

다음 이전