NoSQL이란?

Kim, Beomgoo·2022년 8월 28일
0

데이터베이스

목록 보기
1/2

개요

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

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

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

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

NoSQL의 유형

  1. 문서 데이터베이스

    JSON 객체와 비슷한 문서에 데이터 저장

    필드와 값의 쌍이 포함

    개발자가 코드에서 사용하고 있는 객체에 맞춰 조정

    수평 스케일아웃이 가능

    MongoDB

  1. 키-값 데이터베이스

    각 항목에 키와 값이 포함되어 있는 유형

    대량의 데이터를 저장해야 하지만 검색을 위해 복잡한 쿼리를 수행할 필요가 없는 사례에 적합

    사용자 선호도 저장 또는 캐싱에 사용

    Redis, DynamoDB

  1. 와이드 컬럼 스토어

    테이블, 행, 동적 열에 데이터를 저장함

    각 행이 동일한 열을 가질 필요가 없음

    대량의 데이터 저장에 적합

    사물인터넷 데이터와 사용자 프로필 데이터 저장에 사용

    Cassandra, HBase

  1. 그래프 데이터베이스

    노드와 엣지에 데이터를 저장

    노드 - 사람, 장소 및 사물에 대한 정보 저장

    엣지 - 노드 간의 관계에 대한 정보 저장

    소셜 네트워크, 권장 엔진 같은 패턴을 찾아보기 위해 관계를 상세히 검토해야 하는 사용 사례에 적합

    Neo4j, JanusGraph

SQL vs. NoSQL

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

NoSQL 데이터베이스의 장점

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

NoSQL 데이터베이스의 단점

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

참고자료

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

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

profile
하나에 하나를 보탠다

0개의 댓글