[DB] NoSQL

김동욱·2025년 2월 26일

데이터베이스

목록 보기
7/7

NoSQL이란?

  • 'Not Only SQL'의 약자로, SQL 뿐만 아니라 다양한 형태의 데이터를 효율적으로 관리할 수 있는 방법이다.
  • NoSQL은 카테고리다. RDBMS가 아닌 모든 DBMS를 NoSQL라는 카테고리로 지칭하는 것이며, 각 시스템마다 사용하는 쿼리와 지원하는 기능이 다르다.
  • 기존 RDBMS 방식의 한계 : 데이터와 트래픽이 증가하면 수직 확장 비용이 기하급수적으로 증가한다.
  • 변화하는 요구 사항에 빠르게 적응하기 위한 유연한 개발 패러다임, 대규모 데이터 처리, 비정형 데이터 저장, 분산 시스템에서의 성능 최적화를 위해 등장했다. (고기능성, 고성능, 유연성, 확장성)

고성능

  • 고정된 스키마가 없기때문에 스키마 검사, 데이터 타입 검증 등의 작업을 하지않는다.
  • 분산 서버에 데이터를 저장하고 처리하는데 특화되어 있고 병렬 실행이 가능한 분산 쿼리를 지원하며 복잡한 JOIN 연산을 하지 않는다.
  • Redis처럼 메모리 기반의 캐시를 사용하여 데이터를 처리할 수 있다.
  • 무결성 검사, 트랜잭션같이 성능을 저하시키는 기능을 사용하지 않고 CAP 이론에 따라 사용한다.

CAP 이론?
Consistency(일관성), Availability(가용성), Partition Tolelance(분할 허용성) 중에 2개를 높일수록 나머지 1개를 희생해야한다는 Trade-off 이론(등가교환 법칙)
분산 서버로 구축하는 경우 분할 허용성은 반드시 챙겨야 하므로 일관성과 가용성 중 하나를 희생해야한다.

확장성

  • RDBMS는 수직 확장을 주로 사용하며, 서버 성능을 향상시키기 위해 하드웨어 업그레이드가 필요하다. 반면에 NoSQL은 수평 확장을 지원하며, 여러 서버에 데이터를 분산하여 저장하고 처리할 수 있다.
  • NoSQL은 데이터를 고르게 분할하여 분산 서버에 저장하는 샤딩(Sharding), 데이터의 가용성과 내구성을 높이기 위해 분산서버마다 저장하는 복제본(Replica), 분산된 데이터를 병렬적으로 처리하는 분산 쿼리 처리 등 데이터 분산 관리와 수평 확장을 지원한다.

샤딩?

샤드 키를 기준으로 하나의 테이블을 수평 분할하여 서로 다른 클러스터에 분산 저장하고 질의할 수 있는 기법.
장점 : 수평 확장을 가능하게 한다.
단점 : 어떤 데이터를 어느 클러스터에 질의해야 하는지 애플리케이션에서 제어해야하고 여러 샤드를 통해 질의하는 쿼리에서 참조 정합성, 트랜잭션, 일관성 제어 문제가 생길 수 있다.


유연성(스키마리스)

  • 스키마 없이 동작하며 Document, Key-value, Column-Family, Graph 등 다양한 형식으로 데이터를 유연하게 저장한다.
  • 데이터 구조가 자주 변경되더라도 유연하게 대응할 수 있다.
    속성을 추가할 때 RDBMS는 기존 테이블 구조를 변경해야 하고 비용과 위험이 발생하지만 NoSQL은 언제든지 자유롭게 필드를 추가할 수 있다.

종류

  • Key-Value 데이터베이스 : 키를 통해 값을 읽어들인 뒤 처리하는 방식으로 수평 확장이 쉽고 속도가 매우 빠르매 배우기가 쉽다.
    Redis, Amazon Dynamo DB, Memcached, Riak, LevelDB, Firebase
  • Document 데이터베이스 : 키-값과 유사한데 값 대신 문서(객체) 형태를 저장한다. 필드와 값을 바로 사용할 수 있다.
    MongoDB, CouchDB, MarkLogic, CloudFirestore
  • Column-Family 데이터베이스 : 클러스터링이 더 용이한 모델. 하지만 스키마리스인데도 불구하고 새로운 필드를 만드는 비용이 커서 사실상 결정된 스키마를 변경하기 어렵다.
    Cassandra, HBase, Hypertable
  • Graph 데이터베이스 : 데이터를 관계와 함께 표현하는 모델. 연속적인 노드, 관계, 특성의 형태(그래프 형태)로 저장되며 질의는 그래프 순회를 통해 이루어진다.
    소셜 네트워크(친구의 친구, 관심있을 사용자를 찾는 질의), 연관 검색어 추천, 유튜브 알고리즘, 패턴 인식, AI, 경로 최적화 등의 데이터베이스로 적합하다.
    클러스터링에 적합하지 않고 배우기 어렵다.
    Neo4j, Amazon Neptune, OrientDB
  • In-Memory 데이터베이스 : 데이터를 디스크나 SSD에 저장하는 다른 데이터베이스와 달리, 인 메모리 데이터 스토어는 데이터를 주 메모리에 저장하도록 설계되었다. 매우 빠른 읽기/쓰기 성능을 제공하여 마이크로초 단위의 응답 시간이 필요하거나 트래픽 스파이크가 큰 경우 적합하다.
    Redis, Memcached, SAP HANA, VoldDB, Apache Ignite, Amazon DynamoDB Accelerator(DAX)

사용 사례

  • RDBMS는 금융, 전자상거래, 기업 애플리케이션 등 데이터 일관성과 정교한 트랜잭션 관리가 중요한 분야에서 사용된다.
  • NoSQL은 빅 데이터, 소셜 네트워크, IoT, 실시간 데이터 처리 등 대규모 데이터와 빠른 읽기/쓰기가 필요한 애플리케이션에서 주로 사용된다.
  • 혼합 사용
    매우 일반적인 접근 방식이며 RDBMS와 NoSQL을 함께 사용하여 둘의 장점을 최대로 활용하는 방법.
    사용자 데이터, 금전 데이터 등 중요한 트랜잭션 데이터는 RDBMS에 저장하고, 실시간 데이터와 대규모 비정형 데이터는 NoSQL 데이터베이스에 저장하는 방식으로 사용된다.

NoSQL? RDBMS?

  • 상황에 따라 장단점을 고려하며 적절한 데이터베이스를 선택하는 것이 중요하다.
  • RDBMS를 사용하면 중요한 데이터를 안정적으로 저장하고 관리할 수 있으며 데이터 무결성을 보장하여 일관성을 유지할 수 있다.
  • NoSQL을 사용하면 다양한 비정형 데이터를 유연하게 저장할 수 있으며, 실시간 데이터 처리와 대규모 데이터 처리에 효율적이다.

완전한 ACID 보장보다 DB performance가 중요한 경우 NoSQL이 유리

profile
갓겜만들어야지

0개의 댓글