[데이터베이스] NoSQL

2024. 12. 8. 19:57·CS/데이터베이스

"NoSQL은 단순한 유행이 아니라, 필요한 상황에서는 필수 선택입니다."

NoSQL이란 무엇인가?

NoSQL은 "Not Only SQL"의 줄임말입니다.
즉, "SQL만이 데이터 저장 방법은 아니다"라는 뜻입니다.

정의

  • 전통적인 관계형 데이터베이스(RDBMS)가 아닌 대안을 의미합니다.
  • 일반적으로 테이블, 조인, 스키마가 강제되지 않습니다.
  • 대신에, 유연한 데이터 모델과 확장성을 제공합니다.

탄생 배경

  • 웹 서비스 규모가 급격히 커지면서, 전통적인 RDBMS의 확장 한계(수직 확장)가 문제였습니다.
  • 대규모 트래픽, 비정형 데이터(예: JSON), 빠른 응답이 필요한 시대에 등장했습니다.

NoSQL의 종류

NoSQL은 하나로 뭉뚱그릴 수 없습니다.
저장 방식에 따라 4가지로 분류됩니다.

종류 설명 대표 기술
Key-Value Store 키-값 쌍으로 데이터를 저장 Redis, DynamoDB
Document Store JSON 형태의 문서로 저장 MongoDB, CouchDB
Column Family Store 컬럼 단위로 저장 Cassandra, HBase
Graph Database 노드와 엣지로 관계를 저장 Neo4j, ArangoDB

 

Key-Value Store

  • 단순한 key-value 쌍.
  • 초고속 조회 성능.
  • 캐시 시스템에 많이 사용.

Document Store

  • JSON, BSON 같은 문서 형식.
  • 문서 내부에 복잡한 구조를 저장 가능.
  • 유연한 스키마 (스키마가 없어도 됨).

Column Family Store

  • 테이블이 아닌 컬럼 패밀리 구조.
  • 대량 데이터 처리에 최적.
  • Facebook, Netflix 등이 사용.

Graph Database

  • 관계성 데이터를 그래프 구조로 표현.
  • 친구 추천, 경로 탐색 등에 사용.

NoSQL의 장점과 단점

장점 단점
수평 확장이 용이 (Sharding) 복잡한 쿼리(조인)가 어려움
스키마 자유도 (Flexible Schema) 일관성(Consistency) 보장이 약함
대규모 데이터 처리 적합 트랜잭션 처리 한계 (ACID 보장 어려움)
다양한 데이터 구조 지원 표준화 부족 (제품마다 다름)

 

NoSQL은 CAP 이론에 따라

  • Consistency (일관성)
  • Availability (가용성)
  • Partition tolerance (분할 허용성)
    중에 두 가지 특성을 주로 선택합니다.

대부분의 NoSQL은 Availability + Partition tolerance를 우선합니다.

NoSQL은 언제 사용해야 할까?

NoSQL을 고려해야 할 상황

  • 정형화되지 않은 데이터를 저장해야 할 때 (ex. JSON API 결과)
  • 초당 수천~수만 요청을 처리해야 할 때 (ex. 소셜 미디어, 채팅)
  • 빠른 개발과 자주 바뀌는 데이터 구조가 필요한 프로젝트
  • 대규모 분산 시스템을 구축할 때
  • 복잡한 조인보다 빠른 단건 조회가 중요한 서비스

하지만!
복잡한 트랜잭션 관리(ACID)가 필요한 금융 시스템에서는
전통적 RDBMS가 여전히 더 나은 선택일 수 있습니다.

대표적인 NoSQL 데이터베이스

DB 특징
MongoDB 가장 인기 있는 문서형 DB, JSON 스타일, 스케일 아웃
Redis 초고속 Key-Value 저장소, 메모리 기반
Cassandra 대규모 분산 Column DB, Netflix에서 사용
Neo4j 관계형(그래프) 데이터 특화
DynamoDB AWS에서 제공하는 서버리스 Key-Value, Document DB

 

NoSQL 예시

MongoDB에 데이터 저장하기

// Node.js
const { MongoClient } = require('mongodb');

async function main() {
  const client = new MongoClient('mongodb://localhost:27017');
  await client.connect();

  const db = client.db('mydb');
  const users = db.collection('users');

  await users.insertOne({ name: "Alice", age: 25, email: "alice@example.com" });

  console.log("User inserted!");

  await client.close();
}

main();
  • users라는 Collection(테이블 비슷)에
  • name, age, email이 포함된 Document(문서)를 저장합니다.

Redis에 데이터 저장하기

// Node.js
const redis = require('redis');
const client = redis.createClient();

client.on('connect', function() {
    console.log('Connected to Redis...');
});

client.set('user:1', JSON.stringify({ name: 'Bob', age: 30 }), redis.print);
client.get('user:1', (err, reply) => {
    console.log(JSON.parse(reply)); 
});
  • Key: user:1, Value: JSON 데이터 저장
  • 빠르게 읽고 쓰기에 최적화

마무리 요약

항목 요약
NoSQL이란 비정형 데이터, 고성능, 유연한 확장이 가능한 데이터베이스
주요 종류 Key-Value, Document, Column, Graph
장점 확장성, 유연성, 대량 데이터 처리
단점 조인/트랜잭션 제한, 표준화 부족
사용 시기 비정형 대량 데이터, 초고속 읽기/쓰기 요구될 때
대표 제품 MongoDB, Redis, Cassandra, Neo4j

 

728x90
'CS/데이터베이스' 카테고리의 다른 글
  • [데이터베이스] ERD (Entity-Relationship Diagram)
  • [데이터베이스] 정규화
츄핑
츄핑
    250x250
  • 츄핑
    개발로그
    츄핑
  • 전체
    오늘
    어제
    • 분류 전체보기
      • CS
        • 자료구조
        • 알고리즘
        • 운영체제
        • 네트워크
        • 데이터베이스
        • 인프라
        • Web
      • PS
        • 백준
      • JavaScript
        • React
        • Express
        • NestJS
        • TypeScript
        • Node.js
        • Electron
      • Java
        • Spring
      • Dart
        • Flutter
      • PHP
        • CodeIgniter
      • etc
        • 이산수학
        • 선형대수학
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    티스토리챌린지
    오블완
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
츄핑
[데이터베이스] NoSQL
상단으로

티스토리툴바