NoSQL에 대해서

NoSQL에 대해서

생성일
Oct 19, 2024 10:51 AM
최종 편집 일시
Last updated October 19, 2024
태그
DB

NoSQL (Not Only SQL)

전통적인 관계형 데이터베이스와는 다른 방식으로 데이터를 저장하고 관리하는 시스템이다.
NoSQL은 대량의 데이터를 빠르게 처리하고 복잡하지 않은 쿼리로도 데이터를 효과적으로 조회할 수 있어 빅데이터나 실시간 웹 애플리케이션에 많이 사요한다.
NoSQL은 다양한 데이터 모델을 지원하고 일반적으로 다음 네 가지 유형으로 분류된다.

1. 문서 지향 데이터베이스

대표적으로 MongoDB, CouchDB 등이 있다.
  • JSON, BSON 등의 형식으로 데이터를 저장한다.
  • 각 문서는 독립된 데이터 구조로 취급되며, 동일한 컬렉션에 저장된 문서라도 서로 다른 필드를 가질 수 있다.
  • 관계형 데이터베이스에서의 행과 비슷한 개념이지만, 문서형 데이터베이스에서는 각 문서가 더 복잡한 구조를 가질 수 있다. (중첩된 데이터, 리스트)
  • 비정형 데이터를 다루기에 적합하며, 유연한 스키마를 가지고 있어 스키마 변경 시에도 애플리케이션에 영향을 덜 미친다.
  • 사용예: 블로그, 전자상거래, SNS

2. 키-값 스토어

Redis, Amazon DynamoDB, Riak 등이 있다.
  • 간단한 키-값 쌍으로 데이터를 저장한다. 키는 고유한 식별자이고, 값은 임의의 데이터가 될 수 있다.
  • 매우 빠른 조회 속도를 자랑하며, 데이터 구조가 단순하기 때문에 바른 읽기/쓰기 작업에 적합하다.
  • 데이터 일관성보다는 가용성과 확장성에 중점을 두고 설계된 경우가 많다.
  • 고속 캐싱 시스템에 자주 사용되고, Redis의 경우에는 메모리 내 캐시로 많이 사용된다.
  • 사용예: 캐시, 세션 관리, 간단한 구성 정보 저장

3. 열 기반 스토어

Apache HBase, Cassandra 등이 있다.
각 행은 여러 개의 열로 구성되며, 같은 열에 속하는 데이터를 그룹화해서 저장한다.
  • 데이터가 열 단위로 분리되어 저장되기 때문에, 특정 열에 대한 데이터 조회가 매우 빠르다.
  • 대규모 분산 시스템에서 수평 확장이 용이하다. 데이터가 빠르게 증가하는 환경에서 효과적이다.
  • 페타바이트 규모의 데이터 처리에 적합하며, 시간의 흐름에 따라 데이터가 변하는 시계열 데이터에 자주 사용된다.
  • 사용예: 로그 수집 시스템, 빅데이터 분석, 시계열 데이터 관리

4. 그래프 데이터베이스

Neo4j, Amazon Neptune 등이 있다.
노드와 엣지를 통해 객체 간의 관계를 표현한다. 노드는 객체, 엣지는 그 객체 간의 관계를 나타낸다.
  • 관계 중심 데이터를 매우 효율적으로 처리할 수 있다. 관계형 데이터베이스에서 조인 연산을 대신하는 개념으로, 노드와 엣지를 통해 관계를 직접 탐색할 수 있기 때문에 성능이 매우 우수하다.
  • SNS, 추천 시스템, 경로 탐색 등 복잡한 관계를 다뤄야 할 때 효과적이다.
  • 사용예: SNS, 추천 엔진, 경로 탐색(네비게이션)
 

NoSQL의 특징 및 장점

  1. 유연한 스키마
    1. 전통적인 RDB와 달리, NoSQL은 고정된 스키마를 강제하지 않는다. 이는 애플리케이션이 발전하는 동안 데이터 구조가 변경되더라도 기존 데이터를 수정할 필요가 없을을 의미한다.
  1. 수평 확장성
    1. NoSQL은 수직 확장보다는 여러 서버에 데이터를 분산시키는 수평 확장을 기본적으로 지원한다. 이는 데이터가 커질수록 시스템을 확장하는데 매우 유리하다.
  1. 대용량 데이터 처리
    1. NoSQL은 페타바이트 단위의 대용량 데이터를 처리하기에 적합하다. 특히 빠른 읽기/쓰기가 중요한 시스템에서 성능 최적화에 매우 유리하다.
  1. 고가용성 및 분산 처리
    1. 대부분의 NoSQL 시스템은 분산 환경에서 데이터 복제와 고가용성을 기본적으로 지원한다. 장애가 발생해도 다른 노드에서 데이터를 제공할 수 있는 구조로 설계되어있다.

NoSQL의 단점

  1. 트랜잭션 관리
    1. NoSQL은 RDB와 달리 ACID(원자성, 일관성, 고립성, 지속성) 트랜잭션을 보장하지 않는 경우가 많다. 이로 인해 데이터 일관성을 보장해야 하는 애플리케이션에서는 사용이 제한될 수 있다. 일부 NoSQL 데이터베이스는 이를 보완하기 위해 다양한 방식으로 트랜잭션을 지원한다.
  1. 복잡한 쿼리 제한
    1. NoSQL은 RDB처럼 복잡한 조인 연산을 지원하지 않는다. 복잡한 데이터 관계를 처리할 때는 추가적인 데이터 설계와 작업이 필요하다.
  1. 성숙한 표준화 부족
    1. NoSQL은 아직 RDB 만큼의 성숙도와 표준화를 이루지 못했다. 각각의 NoSQL 데이터베이스가 제공하는 기능과 쿼리 언어가 다르기 때문에 다른 NoSQL 시스템으로 이관할 때 추가적인 학습과 적응이 필요하다.

결론

NoSQL은 고속 읽기/쓰기 성능이 필요한 애플리케이션, 수평 확장이 중요한 대용량 시스템, 유연한 데이터 모델이 필요한 애플리케이션에 적합하다. 반면, 복잡한 트랜잭션이 필요하고 데이터 일관성이 최우선인 금융, 결제 시스템 같은 경우는 RDB가 더 적합할 수 있다.