NoSQL 데이터베이스 (NoSQL Databases)
목차
NoSQL이란
NoSQL 은 관계형 데이터베이스가 아닌 다양한 데이터 모델을 사용하는 데이터베이스 계열을 묶어 부르는 표현입니다. 보통 문서형, 키-값형, 컬럼 패밀리형, 그래프형 데이터베이스가 여기에 들어갑니다.
이 문서는 저장소 선택과 제품 특성 관점에서 NoSQL을 설명하는 문서입니다.
시스템 설계 면접에서 “왜 이 서비스에 NoSQL을 선택하는가”라는 의사결정 흐름은 데이터베이스 설계 문서와 함께 보면 더 자연스럽습니다.
중요한 점은 NoSQL이 하나의 제품이나 하나의 일관성 모델을 뜻하지 않는다는 것입니다.
따라서 NoSQL은 하나의 성질로 묶기보다, 제품별 데이터 모델과 보장 수준을 기준으로 설명하는 편이 좋습니다.
왜 NoSQL이 등장했는가
NoSQL이 주목받은 배경은 다음과 같습니다.
- 대규모 분산 환경 대응
- 유연한 데이터 모델 필요
- 수평 확장 요구
- 특정 접근 패턴에 특화된 저장소 필요
예를 들어:
- 세션 저장은 키-값 저장소가 자연스럽고
- 소셜 그래프는 그래프 DB가 더 적합하며
- 로그 이벤트 저장은 문서형이나 컬럼 계열이 더 잘 맞을 수 있습니다.
주요 유형
문서형 데이터베이스
- 예시: MongoDB, CouchDB
- 특징: JSON/BSON 같은 문서 단위 저장
- 적합한 경우: 프로필, 카탈로그, 콘텐츠, 반정형 데이터
키-값 데이터베이스
- 예시: Redis, DynamoDB
- 특징: 키를 통해 빠르게 값을 조회
- 적합한 경우: 캐시, 세션, 간단한 상태 저장
컬럼 패밀리형 데이터베이스
- 예시: Cassandra, HBase
- 특징: 대규모 분산 저장과 쓰기 처리에 강한 경우가 많음
- 적합한 경우: 로그, 시계열, 대용량 이벤트 데이터
그래프 데이터베이스
- 예시: Neo4j
- 특징: 노드와 엣지 중심 모델
- 적합한 경우: 추천, 소셜 관계, 경로 탐색
RDBMS와의 차이
| 항목 | RDBMS | NoSQL |
|---|---|---|
| 데이터 모델 | 테이블과 스키마 중심 | 제품별로 다양 |
| 강점 | 조인, 무결성, 트랜잭션 | 확장성, 유연성, 특정 패턴 최적화 |
| 스케일링 | 전통적으로 수직 확장 중심 | 수평 확장 친화적인 경우가 많음 |
| 스키마 | 엄격한 편 | 유연한 편 |
| 적합한 경우 | 정형 데이터와 강한 무결성 | 대규모 분산, 반정형 데이터, 특화된 접근 패턴 |
함께 기억할 점은 다음과 같습니다.
- RDBMS도 샤딩과 복제로 수평 확장이 가능합니다.
- NoSQL도 제품에 따라 트랜잭션과 강한 일관성을 지원합니다.
- 저장소 선택은 유행보다 데이터 구조와 접근 패턴이 기준이 됩니다.
CAP과 일관성 모델
CAP 이론은 네트워크 파티션이 발생했을 때 일관성과 가용성 중 무엇을 우선할지 생각하는 틀입니다.
다만 NoSQL 전체를 하나의 CAP 성향으로 묶을 수는 없습니다.
- DynamoDB는 기본적으로 eventually consistent read를 사용하지만, strongly consistent read도 제공합니다.1
- MongoDB도 read concern, write concern, read preference 조합에 따라 읽기/쓰기 보장 특성이 달라집니다.2
그래서 NoSQL을 설명할 때는 보통 다음 흐름으로 정리합니다.
- NoSQL 제품은 분산 환경을 전제로 설계된 경우가 많다
- 일관성 모델은 제품마다 다르다
- 워크로드와 장애 허용 범위에 맞춰 선택해야 한다
NoSQL을 선택할 때 보는 기준
- 데이터 모델이 관계형인가, 문서형인가
- 조인이 핵심인가
- 수평 확장이 얼마나 중요한가
- 일관성을 어디까지 요구하는가
- 접근 패턴이 단순 키 조회인지, 복잡한 관계 탐색인지
선택 예시는 대략 이렇습니다.
- RDBMS가 유리한 경우: 주문, 결제, 회계, ERP
- NoSQL이 유리한 경우: 세션, 로그, 피드, 콘텐츠, 추천, 고속 캐시
정답은 “NoSQL이 더 최신이라서”가 아니라, 문제 구조에 저장소가 맞는가입니다.
면접 포인트
- NoSQL은 하나의 제품이 아니라 여러 데이터 모델 계열의 묶음입니다.
- NoSQL은 제품별 데이터 모델과 일관성 모델이 다르다는 점을 함께 설명하는 편이 좋습니다.
- 제품별 일관성 모델과 트랜잭션 지원 범위를 구분해 설명해야 합니다.
- RDBMS와 NoSQL은 대체 관계보다 문제 유형에 따라 역할이 갈리는 경우가 많습니다.
- 답변에서는 데이터 모델, 스케일링, 일관성, 대표 사용 사례를 같이 묶어 설명하는 편이 좋습니다.