티스토리 뷰

개발

NoSQL이란?

bambookim 2022. 8. 28. 17:27

NoSQL이란?

개요

NoSQL은 Not-Only SQL, Non Relational SQL 등등 여러 의미로 사용되는, 기존의 관계형 데이터베이스와는 다른 새로운 방식의 데이터베이스를 가리키는 용어의 총칭이다. SQL만으로 데이터를 다루지 않고, 비관계형으로도 데이터를 다루는 방식의 데이터베이스를 NoSQL 데이터베이스라고 한다.

NoSQL이라고 무조건 데이터 간에 관계가 없는 것은 아니다. 관계형 데이터베이스와 방식은 다르지만 관계 데이터를 저장할 수 있다.

Agile 방식의 개발이 늘어나면서, 요구사항도 훨씬 빠른 속도로 변하기 시작했다. 이를 뒷받침하기 위해서는 소프트웨어 스택 전반에서 데이터 구조 등에도 신속한 변경이 이뤄져야 하는데, NoSQL은 이러한 구조 변경에 유연성 제공해준다.

또한 클라우드를 이용한 개발 및 배포 환경이 늘어나, 여러 서버와 리전에 데이터를 분산하는 방식도 많이 이용하고 있다. 이러한 환경에 알맞은 Scale-Out도 NoSQL에서는 쉽게 이용할 수 있다.

NoSQL의 유형

  1. 문서 데이터베이스
    필드와 값의 쌍이 포함수평 스케일아웃이 가능
    개발자가 코드에서 사용하고 있는 객체에 맞춰 조정
    JSON 객체와 비슷한 문서에 데이터 저장
    MongoDB

  2. 키-값 데이터베이스
    대량의 데이터를 저장해야 하지만 검색을 위해 복잡한 쿼리를 수행할 필요가 없는 사례에 적합
    사용자 선호도 저장 또는 캐싱에 사용
    각 항목에 키와 값이 포함되어 있는 유형
    Redis, DynamoDB

  3. 와이드 컬럼 스토어
    각 행이 동일한 열을 가질 필요가 없음사물인터넷 데이터와 사용자 프로필 데이터 저장에 사용
    대량의 데이터 저장에 적합
    테이블, 행, 동적 열에 데이터를 저장함
    Cassandra, HBase

  4. 그래프 데이터베이스
    노드 - 사람, 장소 및 사물에 대한 정보 저장소셜 네트워크, 권장 엔진 같은 패턴을 찾아보기 위해 관계를 상세히 검토해야 하는 사용 사례에 적합
    엣지 - 노드 간의 관계에 대한 정보 저장
    노드와 엣지에 데이터를 저장
    Neo4j, JanusGraph

SQL vs. NoSQL

관계형 NoSQL
적합한 작업 일관성이 중요한 온라인 트랜잭션 프로세싱 어플리케이션 낮은 지연 시간의 어플리케이션을 포함한 수많은 데이터 액세스 패턴 반정형 데이터 분석
데이터 모델 행과 열로 구성된 테이블로 정규화 스키마 - 테이블, 행, 열, 인덱스, 관계 등을 정확하게 규정 테이블 사이의 참조 무결성 실현 키-값, 문서, 그래프 등 성능과 규모 확장에 최적화된 다양한 데이터 모델 제공
ACID 속성 Atomicity Consistency Isolation Durability 유연한 스케일 아웃을 위해 일부 ACID 속성을 완화 스케일 아웃 사용 사례에서 높은 처리량, 낮은 지연 시간을 위한 선택이 될 수 있음
성능 디스크 하위 시스템에 따라 다름 최고 성능을 위해 쿼리, 인덱스 및 테이블 구조를 최적화해야 함 기본 하드웨어 클러스터 크기, 네트워크 지연 시간 및 호출 어플리케이션의 기능에 달려있음
확장 하드웨어의 계산 성능을 높이거나, 읽기 전용 워크로드의 복제물을 추가해야 함 (Scale-Up) 분산형 아키텍처를 사용해 액세스 패턴이 확장 가능함 (Scale-Out)
API SQL을 준수하는 쿼리를 사용하여 전달 객체 기반 API를 통해 데이터 구조를 저장 및 검색

NoSQL 데이터베이스의 장점

  • 유연한 데이터 모델
  • 관계형 데이터베이스는 미리 정의된 스키마를 통해 데이터를 다루기 때문에 데이터 또는 스키마를 변경할 때 유연하지 못하다. 하지만 NoSQL은 스키마가 없으므로, 보다 더 유연하고 자유로운 데이터 구조를 가질 수 있다. 따라서 변화하는 어플리케이션 요구사항에 맞춰 쉽게 데이터를 추가하거나 변경할 수 있다.
  • 수평적 확장(Scale-Out)하지만 NoSQL은 연관되어 있는 데이터들을 중복으로 저장하여 데이터 분산이 용이하다. 따라서 Scale-Up 뿐만 아니라 Scale-Out으로도 성능 확장이 쉽다. 이를 Scalability가 높다고 표현하기도 한다.
  • 대부분의 관계형 데이터베이스는 데이터의 정합성 및 일관성 문제로 인해 인스턴스를 여러 대로 늘려 성능을 수평적으로 확장하는 Scale-Out 대신, 인스턴스 자체의 성능을 수직적으로 확장하는 Scale-Up 방식을 이용해야 한다. 이는 성능 향상에 한계가 있을 뿐만 아니라, 인스턴스 하나가 온전히 부하를 감당해야 하므로 가용성에 문제가 생길 가능성이 높다. (Sharding을 통한 분산으로 Scale-Out이 가능하긴 하지만 매우 복잡하다.)
  • 빠른 쿼리그러나 NoSQL에서는 데이터를 쿼리에 최적화된 형태로 저장하므로 관계형 데이터베이스에 비해 쿼리를 보다 더 빨리 처리할 수 있다.
  • 관계형 데이터베이스에서는 데이터들이 정규화되어 각 테이블들에 나눠져 있기 때문에, 여러 테이블들을 Join하여 데이터를 가져오게 된다. 이는 테이블들의 크기가 커질수록 Join 비용도 커지게 되는 결과를 낳는다.

NoSQL 데이터베이스의 단점

  • 데이터가 여러 컬렉션에 중복으로 저장되어 있기 때문에, 데이터를 수정 또는 삭제해야 한다면, 데이터가 저장된 모든 컬렉션에 대해 이를 수행해야 한다.
  • 스키마가 존재하지 않으므로, 데이터 구조가 명확하지 않으며, 데이터 구조 결정이 어려울 수 있다.
  • 확장성이 높아지는 대신, 일관성이 떨어질 수 있다.

참고자료

NoSQL이란? | 비관계형 데이터베이스, 유연한 스키마 데이터 모델 | AWS

NoSQL이란 무엇입니까? NoSQL Databases 설명

댓글