RDBMS와 NoSQL
1. RDBMS (관계형 데이터베이스 관리 시스템)
개념 및 정의
RDBMS는 E.F. Codd의 관계형 모델을 기반으로 하는 데이터베이스 관리 시스템입니다. 데이터를 2차원 테이블(릴레이션) 형태로 저장하고, 테이블 간의 관계를 통해 복잡한 데이터 구조를 표현합니다.
핵심 특징
- 테이블 기반 구조: 행(row)과 열(column)으로 구성된 테이블
- SQL 쿼리 언어: 표준화된 구조적 질의 언어 사용
- 스키마 정의: 사전에 정의된 고정적 데이터 구조
- ACID 속성: 원자성, 일관성, 격리성, 지속성 보장
- 정규화: 데이터 중복 최소화 및 무결성 보장
- 관계 무결성: 외래키를 통한 테이블 간 관계 유지
데이터 모델
- 1차 정규형(1NF): 원자값만 포함
- 2차 정규형(2NF): 부분 함수 종속 제거
- 3차 정규형(3NF): 이행적 함수 종속 제거
- 보이스-코드 정규형(BCNF): 모든 결정자가 후보키
대표적인 RDBMS
- 오픈소스: MySQL, PostgreSQL, SQLite, MariaDB
- 상용: Oracle Database, Microsoft SQL Server, IBM Db2
- 클라우드: Amazon RDS, Google Cloud SQL, Azure SQL Database
장점
- 데이터 무결성: ACID 속성으로 완벽한 일관성 보장
- 복잡한 쿼리: 조인, 서브쿼리, 집계함수 등 강력한 쿼리 능력
- 표준화: SQL 표준으로 인한 높은 호환성과 이식성
- 성숙한 생태계: 풍부한 도구, 문서, 전문 인력
- 트랜잭션 처리: 복잡한 비즈니스 로직의 안전한 처리
- 데이터 중복 최소화: 정규화를 통한 효율적 저장
단점
- 확장성 제한: 주로 수직적 확장(Scale-up)에 의존
- 스키마 경직성: 구조 변경 시 복잡하고 시간 소모적
- 성능 병목: 복잡한 조인 연산 시 성능 저하
- 비정형 데이터 처리 한계: JSON, XML 등 처리 어려움
- 높은 운영 비용: 라이선스, 하드웨어, 전문 인력 비용
2. NoSQL (Not Only SQL)
개념 및 정의
NoSQL은 관계형 모델을 사용하지 않는 데이터베이스의 총칭으로, 대용량 데이터와 분산 처리를 위해 설계된 데이터베이스 시스템입니다. "Not Only SQL"의 줄임말로 SQL만이 아닌 다양한 데이터 모델을 지원합니다.
핵심 특징
- 유연한 스키마: 동적으로 필드 추가/변경 가능
- 수평적 확장: 분산 아키텍처를 통한 확장성
- 다양한 데이터 모델: 문서, 키-값, 컬럼, 그래프 등
- BASE 속성: Basically Available, Soft state, Eventual consistency
- 높은 가용성: 분산 환경에서의 장애 허용성
- 빠른 읽기/쓰기: 특정 작업에 최적화된 성능
NoSQL 데이터 모델 유형
문서형 데이터베이스
- 특징: JSON/BSON 형태의 문서로 데이터 저장
- 예시: MongoDB, CouchDB, Amazon DocumentDB
- 용도: 콘텐츠 관리, 카탈로그, 사용자 프로필
키-값 데이터베이스
- 특징: 단순한 키-값 쌍으로 데이터 저장
- 예시: Redis, DynamoDB, Riak
- 용도: 캐싱, 세션 관리, 장바구니
컬럼형 데이터베이스
- 특징: 컬럼 패밀리 단위로 데이터 저장
- 예시: Cassandra, HBase, Amazon SimpleDB
- 용도: 시계열 데이터, 로그 분석, IoT 데이터
그래프 데이터베이스
- 특징: 노드와 엣지로 관계 표현
- 예시: Neo4j, Amazon Neptune, ArangoDB
- 용도: 소셜 네트워크, 추천 시스템, 지식 그래프
장점
- 뛰어난 확장성: 수평적 확장으로 저렴한 용량 증설
- 개발 속도: 스키마 설계 시간 단축으로 빠른 개발
- 고성능: 특정 워크로드에 최적화된 성능
- 유연성: 다양한 형태의 데이터 저장 가능
- 클라우드 친화적: 분산 환경에 적합한 아키텍처
- 빅데이터 처리: 대용량 데이터 처리에 유리
단점
- 복잡한 쿼리 제한: 관계형 조인과 복잡한 쿼리 어려움
- 일관성 약화: 최종 일관성으로 인한 일시적 데이터 불일치
- 표준 부족: 각 시스템마다 다른 쿼리 언어와 API
- 학습 곡선: 새로운 개념과 도구 학습 필요
- 운영 복잡성: 분산 시스템 관리의 복잡성
- 데이터 중복: 비정규화로 인한 저장공간 낭비
3. RDBMS vs NoSQL 주요 차이점 비교
데이터 모델 차이
| 비교 항목 | RDBMS | NoSQL |
|---|
| 데이터 저장 방식 | 정규화된 테이블 구조 | 비정규화된 다양한 구조 |
| 스키마 | 고정적, 사전 정의 필수 | 유연함, 동적 변경 가능 |
| 데이터 관계 | 외래키를 통한 명시적 관계 | 임베디드 또는 참조 방식 |
| 데이터 타입 | 엄격한 타입 제약 | 유연한 타입 지원 |
성능 및 확장성
| 비교 항목 | RDBMS | NoSQL |
|---|
| 확장 방식 | 수직적 확장 (Scale-up) | 수평적 확장 (Scale-out) |
| 확장 비용 | 지수적 증가 | 선형적 증가 |
| 읽기 성능 | 복잡한 쿼리에 최적화 | 단순한 읽기에 최적화 |
| 쓰기 성능 | 트랜잭션 오버헤드 | 높은 쓰기 처리량 |
| 조인 연산 | 효율적인 조인 지원 | 제한적이거나 비효율적 |
일관성 모델
| 비교 항목 | RDBMS | NoSQL |
|---|
| 일관성 방식 | ACID (강한 일관성) | BASE (최종 일관성) |
| 트랜잭션 | 완벽한 ACID 트랜잭션 | 제한적 트랜잭션 또는 없음 |
| 동시성 제어 | 락 기반 동시성 제어 | 최적화된 동시성 처리 |
| 데이터 정확성 | 즉시 일관성 보장 | 시간차를 두고 최종 일관성 |
개발 및 운영
| 비교 항목 | RDBMS | NoSQL |
|---|
| 쿼리 언어 | 표준 SQL | 각 시스템별 고유 언어 |
| 학습 곡선 | 상대적으로 평이 | 시스템별로 다름 |
| 도구 생태계 | 매우 성숙함 | 빠르게 발전 중 |
| 인력 확보 | 풍부한 전문 인력 | 제한적이지만 증가 중 |
| 운영 복잡성 | 상대적으로 단순 | 분산 시스템 복잡성 |
사용 사례
| 사용 영역 | RDBMS | NoSQL |
|---|
| 적합한 애플리케이션 | ERP, CRM, 금융 시스템 | 소셜미디어, 게임, IoT |
| 데이터 유형 | 구조화된 정형 데이터 | 비정형, 반정형 데이터 |
| 워크로드 | 복잡한 쿼리, 트랜잭션 | 대용량 읽기/쓰기 |
| 환경 | 전통적 온프레미스 | 클라우드, 분산 환경 |