행궁동 데이터 엔지니어

반응형

회사의 일부 서비스에서 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

반응형

이 글을 공유합시다

facebook twitter kakaoTalk kakaostory naver band