728x90
RDB (Relational Database)
관계형 데이터베이스는 가장 많이 사용되고 있는 DB 중 하나로, 데이터를 테이블 형태로 표현하여 구조화
각 테이블은 `행`과 `열`으로 이루어져 있으며, 테이블 간의 관계를 맺어서 데이터를 조직적으로 관리
// MySQL
-- Users 테이블
+----+--------+----------------------+
| ID | Name | Email |
+----+--------+----------------------+
| 1 | 철수 | chulsoo@gmail.com |
-- Orders 테이블 (user_id 외래 키)
+----+----------+-----------+
| ID | user_id | Product |
+----+----------+-----------+
| 1 | 1 | Keyboard |
이러한 테이블 집합을 관계형 데이터베이스 라고 함.
특징
- 스키마 기반: 테이블 구조 (컬럼 이름, 데이터 타입 등)를 미리 정의
- SQL 사용: 데이터를 조회, 삽입, 수정, 삭제하는 표준 언어
- 트랜잭션 지원: `ACID` 특성을 강력히 보장
- 복잡한 조인을 통해 여러 테이블 데이터 결합 가능
❓ ACID란
원자성 (Atomic): 트랜잭션 내 모든 작업이 전부 수행 또는 전부 수행되지 않아야 함
일관성 (Consistency): 트랜잭션 수행 전후에 db는 항상 일관된 상태 유지
고립성 (Isolation): 여러 트랜잭션 동시 수행 시 서로 간섭X
지속성 (Durability): 트랜잭셩이 성공적으로 완료되면, 그 결과는 영구적 저장
NoSQL (Not Only SQL)
- 비관계형 데이터베이스로 전통적인 RDB와 다르게 비정형 또는 반정형 데이터를 저장하는 데이터베이스
- 분산 환경에서 데이터를 빠르게 처리하기 위해 개발됨
- 데이터 모델이 자유롭고, 스키마가 미리 정의되지 않거나 유연한 스키마 사용
// MongoDB - Document
{
"_id": 1,
"name": "철수",
"email": "chulsoo@gmail.com",
"orders": [
{ "product": "Keyboard" },
{ "product": "Mouse" }
]
}
특징
- 비관계형 데이터 베이스로 데이터 간의 관계 정의X
- 스키마에 제약을 두지 않으며, 동적으로 스키마 변경 가능
- 다양한 데이터 모델 지원
- 스키마가 유연하므로 비정형 또는 반정형 데이터 효율적 처리 가능
- SQL을 사용하지 않음
- 분산형 구조를 갖ㅁ
- 여러 대의 저렴한 서버를 사용할 수 있도록 설계되어 효율적
데이터 모델
Key-Value Store (키-값 스토어)
단순한 키-값 쌍으로 데이터 저장, 복잡한 조회 연산 지원X
구조가 단순하기 때문에 빠른 읽기 & 쓰기가 가능하며 분산환경에 적합
ex) Redis, DynamoDB, Riak 등
Document Database (문서 데이터베이스)
- 데이터를 문서 형태로 저장하고 처리하는 데이터베이스
- 주로 `JSON`, `XML` 등과 같은 형식으로 표현되며, 유연한 데이터 구조를 가짐
- 중첩된 데이터 구조를 지원하여 복잡한 데이터 모델 표현 가능
ex) MongoDB, CouchDB
Wide-Column Store Database (와이드 컬럼 스토어 데이터 베이스)
- 열에 대한 데이터를 집중적으로 관리하는 데이터베이스로 각 열에는 `Key-Value` 형식으로 데이터 저장
- 컬럼 패밀리라고 하는 열의 집합체 단위로 데이터 처리 가능
- 하나의 행 내에 많은 열을 포함할 수 있어 높은 유연성을 가지므로 대규모 데이터 분석, 실시간 데이터 처리에 적합
ex) Apache Cassandra, Hbase
Graph Database (그래프 데이터베이스)
- 데이터 간의 관계를 그래프 구조로 표현하는 데이터베이스
- 노드와 간선으로 구성되며, 각 노드는 속성별로 데이터를 저장하고 간선은 노드 사이의 관계 표현
- 복잡한 데이터 관계를 쉽게 표현하고 복잡한 Join 작업도 간단하게 처리 가능
- 지도 서비스, 추천 시스템, 소셜 네트워크 등 다양한 분야에 활용
ex) Neo4J, InfiniteGraph
RDB, NoSQL 선택 기준
- RDB
- 정형 데이터, 안정성 & 정확성이 중요한 경우
- 복잡한 관계, 강한 트랜잭션 필요한 경우
- 데이터의 구조가 명확하여 명확한 스키마가 필요한 경우
- 관계를 맺고 있는 데이터가 자주 변경되는 경우
- NoSQL
- 비정형 데이터, 빠른 개발, 유연성 필요한 경우
- 대량의 로그, 사용자 행동 기록을 저장하는 경우
- 정확한 데이터 구조를 알 수 없는 경우
- 대용량 데이터로 Scale-out 해야하는 경우
- 읽기는 자주하나, 변경은 자주 없는 경우
선택 기준 | RDB | NoSQL |
데이터 구조 | 정형화된 구조 (스키마 엄격) | 비정형/반정형 구조 (스키마 유연하거나 없음) |
스키마 변경 | 어렵고 번거로움 | 유연하고 쉽게 변경 가능 |
데이터 관계 | 테이블 간 복잡한 관계를 자주 다룸 (Join) | 관계보단 개별 데이터 저장 중심 |
트랜잭션 요구 | ACID 보장 필요 (정확성 중요) | 대량 처리, 일부 유실 감수 가능할 때 |
확장성 | 수직 확장 (서버 업그레이드) | 수평 확장 (서버 여러 대 분산 저장) |
쿼리 복잡도 | 복잡한 SQL 쿼리, 조인 다수 필요 | 단순 조회/삽입 중심, 조인 피함 |
개발 속도 | 구조 먼저 설계 필요, 변경 어려움 | 유연한 구조로 빠른 개발 가능 |
사용 예시 | 은행, ERP, 회계 시스템, CRM | 소셜미디어, 채팅 앱, IoT, 게임, 로그 저장 등 |
참고
[Database] RDB와 NoSQL 비교(특징, 장단점 등)
이전 글에서 데이터베이스에 대해 알아보았습니다. 이번 글에서는 데이터베이스 중 자주 쓰이는 관계형 데이터베이스와 NoSQL에 대해 알아보겠습니다. 각 특징과 장단점을 비교하며 언제 사용되
dev-records.tistory.com
728x90