크리스티나 초도로 , 섀넌 브래드쇼 , 오언 브라질 님의 "몽고DB 완벽 가이드" 책을 정리한 포스팅 입니다.
MongoDB의 만들어진 배경과 지향점, 선택해야 하는 이유를 설명합니다.
1. 손쉬운 사용
Document-Based Database
항목 | 설명 | 예시 (MongoDB) |
분산 확장의 용이성 | 분산 시스템에서 데이터를 쉽게 분산/관리할 수 있음 |
샤딩 지원
|
유연한 모델 | 미리 정의된 스키마 없이 데이터 저장 ✅ ➡️ 빠른 개발 가능 |
동적으로 도큐먼트 필드 추가/삭제 가능 ex) JSON |
복잡한 계층 관계 표현 | 내장 도큐먼트 및 배열을 하나의 레코드로 표현 ✅ ➡️ OOP 개발에 적합 |
embedded documents, arrays 지원 |
2. 확장 가능한 설계
설계 배경
- 애플리케이션의 발전으로 다루는 데이터 규모가 커짐 (대용량 데이터 처리 필요성 증가)
- 값싼 저장장치와 가용 대역폭이 증가함
- 데이터베이스의 확장이 필수화됨
- Scale-Out은 경제적이고 확장에 용이하지만, 클러스터 관리가 복잡함
Mongo DB의 설계 방향
- 이러한 문제를 해결하기 위해 MongoDB는 도큐먼트 기반 데이터 모델을 채택함
- 라우터를 통해 데이터 분산과 부하 분산 관리를 자동으로 지원함
3. 다양한 기능
항목 | 설명 |
인덱싱 |
- Secondary Index 지원
- 다양한 인덱스 유형 지원 (unique, compound, geo, full-text, partial 등) |
집계 | 파이프라인 기반 집계 프레임워크 제공 - 간단하고 효율적으로 처리할 수 있음 - 분석 엔진 구현에 적합 |
특수 컬렉션 유형 |
TTL 컬렉션 지원
- 로그, 세션 데이터에 활용 |
파일 스토리지 |
대용량 파일 저장을 위한 전용 프로토콜 제공
- 분할 저장 및 관리 지원 |
4. 고성능
- 많은 요청을 병렬로 처리하여 전체 처리량을 극대화하려 설계됨
- 제한된 메모리에서 효율적인 인덱스 선택으로 성능을 최적화함
구분 | 설명 |
와이어드타이거 스토리지 엔진 | MongoDB의 기본 스토리지 엔진 - 다중 버전 동시성 제어(MVCC): 문서를 수정하는 동안 다른 트랜잭션은 수정 전 버전을 읽을 수 있음 → 동시성: repetable read 보장 → 성능 향상: 읽기 작업이 락 없이 빠르게 처리됨 |
기회적 락(Opportunistic Locking) | 낙관적 락의 한 종류 - 커밋할 때, 데이터의 버전이 중간에 다른 트랜잭션에 의해 바뀌었는지만 확인하기 위해 락을 검 - 락의 적용 범위를 최소화 → 대기 시간이 줄고, 처리량이 올라감 |
예시) 기회적 락
더보기
상품 A: 재고 10개
1. 트랜잭션 시작
- 사용자 A: 상품 A의 재고 수량을 읽고, 상품 A를 3개 구매하려고 함.
- 사용자 B: 상품 A의 재고 수량을 읽고, 상품 A를 5개 구매하려고 함.
2. 트랜잭션 동안 버전 기록
- 사용자 A: 상품 A의 재고 수량을 읽고, "10개"라는 버전을 기록
- 사용자 B: 상품 A의 재고 수량을 읽고, "10개"라는 버전을 기록
3. 트랜잭션 수행
- 사용자 A: 상품 A의 재고 수량을 읽고, 상품 A 3개 구매 (상품 갯수 업데이트)
- 사용자 B: 상품 A의 재고 수량을 읽고, 상품 A 5개 구매 (상품 갯수 업데이트)
3. 트랜잭션 커밋 직전
- 사용자 A: 기억한 버전와 현재 버전이 일치하는지 확인 (기회적 락 활성화)
- 사용자 B에 의해 현재 버전의 값은 15로 변경됨 (충돌 발생 -> 롤백 or 재시도)
- 사용자 B: 기억한 버전와 현재 버전이 일치하는지 확인 (기회적 락 활성화)
- 사용자 A에 의해 현재 버전의 값은 13로 변경됨 (충돌 발생 -> 롤백 or 재시도)
트랜잭션 동안 읽은 "버전"을 다 기억함
커밋 순간에만 락을 짧게 걸어서 버전이 바뀌었는지 확인
- 이상 없으면 바로 반영
- 이상 있으면 롤백 or 재시도
'Database > MongoDB' 카테고리의 다른 글
[몽고DB 완벽 가이드] 6. 특수 인덱스와 컬렉션 유형 (0) | 2025.04.30 |
---|---|
[몽고DB 완벽 가이드] 5. 인덱싱 (0) | 2025.04.29 |
[몽고DB 완벽 가이드] 4. 쿼리 (1) | 2025.04.28 |
[몽고DB 완벽 가이드] 3. 도큐먼트 생성, 갱신, 삭제 (0) | 2025.04.28 |
[몽고DB 완벽 가이드] 2. 몽고DB 기본 (1) | 2025.04.27 |