카테고리 없음

언제 NoSQL을 사용해야 하는가?

뽀글뽀글 개발자 2023. 3. 16. 20:26

채팅을 구현하기 위해 검색하면서 참가자 목록과 같은 데이터는 RDB에 저장하고, 채팅 메세지에 대한 데이터는 NoSQL을 사용하는 서비스가 많다는 글을 보고 NoSQL과 RDB의 차이에 대해 알아보았다.

대부분의 경우에는 RDB를 사용하는 것이 디폴트라고 생각하고 NoSQL을 사용하면 좋은 경우에 대해서만 알아보겠다.

 

* NoSQL은 종류가 많기 때문에 아래의 특징이 적용되지 않는 DB도 많다. (이 글은 MongoDB를 기준으로 작성했다.)

 

 

NoSQL을 사용하기 적합한 경우 

  • 스키마의 변경이 빈번한 경우
    • NoSQL은 스키마가 없는 스키마 리스가 특징으로 스키마가 변하더라도 기존 DB를 수정할 일이 없다.
    • 초반에 스키마가 어떻게 구성될 지 확실하지 않은 상황에서 빠르게 개발을 진행할 수 있다.
  • 수평확장
    • 데이터가 많이 쌓이게 되면 확장을 해야한다. 이때 주로 서버를 증설하는 수평 확장을 하게 되는데, 이를 위해 데이터 샤딩이 필요하다. (샤딩이란 데이터를 쪼개서 분산 저장하는 데이터 처리 기법이다.)
    • 샤딩과 분산 환경에서 트랜잭션을 관리하는 것은 복잡한 작업이며, NoSQL에서는 자동 샤딩 분산 트랜잭션을 지원하는 경우가 많다.
  • 높은 가용성
    • NoSQL은 자동으로 클러스터 내의 각 노드에 데이터의 사본을 유지해서 하나의 노드에 장애가 발생하더라도 바로 다른 노드로 대체할 수 있다.
  • 빠른 I/O
    • DB 쓰기 작업에서 서비스가 비동기 방식으로 구현되어 있더라도 DB가 동기 방식이면 결국은 동기 방식으로 쓰기가 진행된다.
    • RDB는 대부분 동기 방식의 쓰기를 지원하지만 NoSQL의 경우 비동기 쓰기를 지원하는 경우가 많다.
    • 분산 환경에서 데이터를 저장하고 처리하기 때문에 데이터를 병렬로 처리하여 전체적인 처리 속도가 빠르다.
    • 쓰기 작업에서 데이터를 즉시 디스크에 기록하지 않고 메모리에 일시적으로 저장(캐싱)한 뒤 나중에 배치 작업을 통해 일괄 저장하여 읽기와 쓰기 속도가 올라간다.  (이부분은 RDB도 지원한다.)
    • 스키마가 존재하지 않기 때문에 읽기에서 스키마를 확인하는 작업이 사라진다. = 해시코드만으로 조회하기 때문에 빠르다