언제 NoSQL을 사용해야 하는가?
대량의 단순 정보를 빠르게 저장하고 조회할 때, 관계형 데이터베이스가 처리하지 못하는 대량의 데이터를 입력할 때 (보통 수십 기가바이트의 데이터). 스키마가 고정되지 않은 데이터를 저장하고 조회할 때 등이 해당된다. 관계형 데이터베이스 특성상 제공 가능한 성능에 한계가 있다. 그 한계를 넘어선 성능이 필요할 때 NoSQL을 선택하면 된다.(수십 기가 바이트의 데이터로 실시간 서비스를 하기 위해서는 데이터베이스의 하드웨어에 들어간 비용이 이미 수천만원을 호가할 것이며, 나중에는 더 이상 하드웨어에 CPU나 메모리를 추가 증설할 슬롯 조차 남아 있지 않을 것이다.)
사실 NoSQL을 사용해야 하는가? 와 같은 질문보다 더 중요한 것은 ‘어떤 NoSQL을 선택해야 하는가?’다.
관계형 데이터베이스에서 NoSQL로 데이터 저장소를 변경할 때, 가장 먼저 고려해야 할 사항은 일관성 모델이다. 구현된 서비스에 강한 일관성 모델이 필요한지, 느슨한 일관성 모델을 사용해도 큰 문제가 없는지에 대한 판단이 우선 되어야 한다.
NoSQL을 선택할 때 고려사항은 다음과 같다.
- 일관성 모델
- 데이터모델
- 읽기 쓰기 성능
- 단일 고장점
- 원자성 지원
- 하드웨어 구성
- 무중단 시스템
기본 지식 없이 무턱대고 NoSQL을 사용하여 서비스한다면, 안정화까지 매우 많은 시간과 노력이 들게 된다. 이번 장을 제대로 이해한다면 최소한 서비스에 맞지 않는 NoSQL을 선택하는 오류를 피할 수 있을 것이다.
NoSQL은 관계형 데이터베이스의 한계를 극복하고 모든 장점만을 모아둔 솔루션이 아니다. 기존의 관계형 데이터베이스가 제공하는 테이블 조인, 트랜잭션, SQL문과 같은 편의성을 포기하고 스케일 아웃과 같은 NoSQL의 장점을 얻은 또다른 데이터베이스다. ‘얻는 것이 있으면 잃는 것도 있다’라는 진리를 잊지 말아야 한다.