회사의 일부 서비스에서 MongoDB, ElasticSearch, DocumentDB 등 NoSQL 데이터베이스 관리 시스템을 사용하고 있어
왜 / 어떤 경우에 NoSQL을 사용하는지 등장 배경부터 한번 정리해봤습니다. (NoSQL 사용 이유)
NoSQL(Not Only SQL) 이란?
- SQL만을 사용하지 않는 DBMS(Database Managment System, 데이터베이스 관리 시스템)들을 지칭하는 용어
- 과거 RDBMS(Relational Database Managment System, 관계형 데이터베이스 관리 시스템)와 달리 SQL이 아닌 다른 방식으로 데이터를 처리 / 조회 (물론 SQL과 비슷한 명령어를 지원하기도 함)
- Redis, MongoDB, HBase, ElasticSearch, AWS DynamoDB 등이 NoSQL 데이터베이스 관리 시스템
등장 배경
주 배경: 트래픽의 증가
- FaceBook, Twitter, GoogleAnalytics 등의 서비스에서 트래픽이 폭발적으로 증가
- 증가한 트래픽을 기존 RDBMS만으로는 감당하기 힘들어짐
- 기존 RDBMS 대부분이 클러스터 환경을 지원하지 않기에 Scale-up으로 대응해야 하는데 이는 물리적인 한계와 많은 비용 발생
증가한 트래픽에 대응하기
1. Scale-out 을 지원: 클러스터 환경을 지원하는 데이터 관리시스템으로 트래픽에 대응
2. 서버의 데이터 처리 최소화
- RDBMS처럼 다수의 Join이 있다면 클러스터 환경에서 데이터를 처리하기 힘듦
- Key-value, Document 형태로 데이터의 집합을 통째로 저장하고 사용함(Join 등의 서버 측 데이터 처리 불필요)
이외 등장 배경
- 1. 네트워크 대역폭 증가: 더 이상 네트워크가 서비스의 병목이 아님(서비스의 병목이 네트워크 속도에서 서버의 처리속도로 변화)
- 2. 저렴해진 저장 장치: Key-value, Document 형태로 데이터를 저장하면 데이터의 중복 저장으로 저장소 용량이 커질 수 있음, 하지만 저장 장치의 가격이 저렴해졌기에 큰 문제가 되지 않음
- 3. 클라이언트 성능의 향상: 클라이언트(노트북, 스마트폰, 기타 IoT 장비) 장비의 성능이 대폭 향상되어 데이터베이스 관리시스템에서 통째로 데이터를 전달해도 클라이언트에서 빠른 처리가 가능 (ex. 중첩된 Json 데이터의 파싱)
NoSQL 데이터베이스 관리시스템의 종류
아래와 같이 다양한 형태의 종류가 있음
| NoSQL Type 분류 |
종류 |
| Key-Value |
Redis, Amazone Dynamo DB, MemcacheDB, Riak, LevelDB 등 |
| Document |
MongoDB, ElasticSearch, CouchDB, MarkLogic 등 |
| Bigtable (Column-Family) |
HBase, Cassandra, Cloudata, Hypertable, Accumulo 등 |
| Graph |
Neo4j, FlockDB 등 |
NoSQL Type별 특성 (출처: Data On-Air, https://dataonair.or.kr/db-tech-reference/d-guide/data-practical/?mod=document&uid=389)
NoSQL 데이터베이스 장점, 단점 및 사용 시기
장점
- 클러스터 환경에서 대용량 서비스에 대응할 수 있음
- 고정된 스키마가 없기에 일단 Value, Document 형태로 데이터를 넣어 빠르게 개발할 수 있음
단점
- RDBMS처럼 안정적인 트랜잭션을 보장하지 못함
- 업데이트가 자주 일어나는 테이블에는 부적합할 수 있음 (여러 데이터를 갱신해야 하는 경우 발생)
- 빠르게 개발할 수 있으나 유지보수는 어려워질 수 있음 (스키마가 정해져 있지 않기에 케이스별 코드 / 예외처리가 필요할 수 있음, Type이 엄격하지 않은 Python과 같은 언어와 Type이 엄격한 Java, C++ 등의 차이와 비슷한 거 같기도 합니다.)
사용 시기
- 대용량의 데이터를 Scale-out으로 처리해야 하는 경우 (게임 로그, 서비스 로그 저장 등)
기타 궁금하신 사항은 편하게 댓글 남겨주세요.
감사합니다.
참고자료
- 1. 나무 위키, [NoSQL], https://namu.wiki/w/NoSQL#fn-6
- 2. Data On-Air, [NoSQL 범주], https://dataonair.or.kr/db-tech-reference/d-guide/data-practical/?mod=document&uid=389
- 3. 샴샴님 블로그, [NoSQL의 등장 배경, 정의, 특징], https://blog.naver.com/PostView.nhn?blogId=fkdltmxlr3&logNo=222081793617
- 4.人CoDOM, [NoSQL 정의 및 역사], http://www.incodom.kr/NoSQL_%EC%A0%95%EC%9D%98_%EB%B0%8F_%EC%97%AD%EC%82%AC