"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