RDBMS의 필수 특성 4가지 (Atomicity, Consistency, Isolation, Durability)
- 개념: 더 이상 쪼갤 수 없는 최소 단위
- DB 적용: 트랜잭션은 전체 성공하거나 전체 실패해야 함
- 예시: 송금 거래는 "차감" + "입금"이 모두 성공하거나 모두 실패
- 구현: 커밋(Commit) 또는 롤백(Rollback)
- 목표: 데이터 일관성 유지
- 개념: 데이터의 정확성과 무결성 보장
- 원자성과의 관계: 원자성을 통해 일관성이 달성됨
- 개념: 동시에 실행되는 트랜잭션들이 서로 독립적으로 동작
- 목표: 동시성 제어로 데이터 정합성 유지
- 개념: 커밋된 데이터는 영구적으로 저장
- 보장: 시스템 장애 후에도 데이터 유지
특징
- 고정된 스키마와 테이블 구조
- 정형 데이터(Structured Data) 저장
- 강력한 ACID 특성 준수
- 데이터 정확성 우선
사용 사례
- 결제 및 정산 시스템
- 계약 관리
- 정적인 데이터 보관
- 데이터 무결성이 중요한 업무
저장 방식
- B-Tree 기반 (기본 자료구조)
특징
- 가변적 스키마 (Schema-less)
- 키-밸류 방식 저장
- 대용량 데이터 처리 용이
- 읽기/쓰기 속도 우선
사용 사례
- 실시간 이벤트 처리
- 로그 데이터
- 센서 데이터
- 데이터 구조가 자주 변하는 경우
- 캐싱
특징 정리
- 트랜잭션 미지원 (최근 일부 지원)
- MongoDB 등 최신 NoSQL은 트랜잭션 제공
| 항목 | RDBMS | NoSQL |
|---|---|---|
| 스키마 | 고정 | 가변 |
| 데이터 구조 | 정형 | 비정형 |
| ACID | 강력함 | 약함 |
| 트랜잭션 | 지원 | 미지원 (최근 일부 지원) |
| 확장성 | 수직 확장 | 수평 확장 |
| 사용 목적 | 데이터 정확성 | 대용량 처리 |
대용량 데이터 발생 시 발생하는 이슈:
- 조회 성능 저하
- 쓰기 성능 저하
- 단일 DB 관리 시 안정성 문제
- 정의: 데이터베이스 복제
- 목표: 대용량 데이터 처리를 위한 분산 기술
- 구조: Master-Slave 아키텍처
- Master DB: 쓰기 담당
- Slave DB(Replica): 읽기 담당
- 마스터 데이터를 슬레이브에 복제하여 읽기 부하 분산
구조도
Master DB (Write)
↓ 복제
Slave DB (Read) ← 읽기 요청
Slave DB (Read) ← 읽기 요청
- 읽기 요청이 많은 경우 효과적
- 여러 Slave로 읽기 부하 분산
- 정의: 데이터를 분할하여 여러 DB에 저장하는 기술
- 목표: 쓰기 성능 향상 및 병목 현상 해결
- 방식: 수평 확장 (Scale-Out)
- 단순 분할 기술이 아님
- Sharding Key: 어느 DB에 데이터를 저장할지 결정하는 라우팅 키
- 역할: 데이터를 특정 DB로 라우팅
예시
사용자 ID를 샤딩키로 사용:
- ID 1~1000 → DB1
- ID 1001~2000 → DB2
- ID 2001~3000 → DB3
새 요청: 사용자 ID 1500
→ Sharding Key를 통해 DB2로 라우팅
- 분할된 DB에 병렬로 쓰기 가능
- 병목 현상 완화
- MongoDB 등 NoSQL은 자체적으로 Sharding 지원
- RDBMS는 애플리케이션 레벨에서 구현
- 확장 전략 중 마지막 수단
- 균등 분배 필수: 킷값이 골고루 분배되지 않으면 효과 감소
- 복잡도 증가로 인한 관리 비용
- Hash 기반: PK를 해싱 처리하여 균등 분배
- ULID: 시간 기반의 균등 분배 방식
- 각 샤딩 키마다 고유한 DB 할당 가능
- 샤딩을 직접 구현한 경험 없음
- Active-Standby 방식만 사용
- Partitioning은 사용하지만 Sharding은 미사용
- 정의: 대용량 테이블을 물리적으로 분할하는 기술
- 목표: 읽기 성능 향상
- 특징: 같은 DB 내에서 논리적 분할
대용량 데이터 처리 시:
- 조회 성능 저하
- 쓰기 성능 저하
- 안정성 문제 → 파티셔닝으로 해결
- 분할 기준: 행(Row)
- 예시: 시간대별로 분할
2024년 데이터 → Partition 1 2025년 데이터 → Partition 2
- 분할 기준: 컬럼(Column)
- 예시: 개인정보와 거래정보 분리
개인정보 (이름, 주소) → Partition 1 거래정보 (거래액, 날짜) → Partition 2 - 장점: 데이터 특성에 따라 분리 저장
- 실제 사용: 자주 사용하는 컬럼과 미사용 컬럼 분리
| 기술 | 목표 | 분할 대상 | 특징 |
|---|---|---|---|
| Replication | 읽기 성능 ↑ | 테이블 복제 | Master-Slave |
| Sharding | 쓰기 성능 ↑ | 데이터 분산 | 여러 DB |
| Partitioning | 읽기 성능 ↑ | 테이블 분할 | 단일 DB 내 |
- 동시 트랜잭션이 서로 독립적으로 동작하도록 보장
상세 설명은 녹음에서 미완성 부분
- A: 전체 성공 또는 전체 실패
- C: 데이터 정확성 보장
- I: 동시성 제어
- D: 영구 저장
✅ 데이터 정확성 중요 ✅ ACID 특성 필요 ✅ 정형 데이터
✅ 대용량 처리 ✅ 빠른 읽기/쓰기 ✅ 스키마 자유도 필요
- Replication (읽기 복제) - 가장 먼저
- Cache (캐싱) - 동시에 고려
- Partitioning (파티셔닝) - 읽기 최적화
- Sharding (샤딩) - 마지막 수단
- 각 기술이 왜 필요한지
- 각 기술의 목표는 무엇인지
- 트레이드오프는 무엇인지
- 모든 상황에 같은 방식 적용 불가
- 테이블 구조와 데이터 특성에 따라 다름
- 과도한 복잡성 추가 지양