NoSQL 기초 개념
NoSQL 기초 개념
NoSQL 기초 개념
관계형 데이터베이스의 한계를 극복한 새로운 데이터 저장 방식
NoSQL이란?
NoSQL(Not Only SQL)은 전통적인 관계형 데이터베이스보다 덜 제한적인 일관성 모델을 이용하는 데이터 저장 및 검색을 위한 매커니즘을 제공하는 데이터베이스입니다.
NoSQL 출현 배경
1. 확장성 (Scalability)
- 작업 부하에 대한 요구사항을 효율적으로 충족시키는 능력
- NoSQL DB는 필요에 따라 스케일 아웃을 할 수 있도록 설계
- 클러스터에서 여러 서버를 사용할 수 있도록 구성
2. 비용 (Cost)
- RDBMS는 서버 용량, 동시 접속자 수, DB 접근 사용자 수에 따라 비용 청구
- 주요 NoSQL 데이터베이스는 오픈소스로 제공
- 저렴한 비용으로 대용량 데이터 처리 가능
3. 유연성 (Flexibility)
- RDBMS는 프로젝트 시작 시 모든 테이블과 컬럼을 미리 정의해야 함
- NoSQL은 고정된 테이블 구조가 필요하지 않음
- 설계 변경 없이 새로운 속성을 추가할 수 있음
4. 가용성 (Availability)
- 저렴한 비용으로 서버를 여러 개 이용할 수 있도록 설계
- 서버 하나가 중지되어도 다른 서버가 작업량을 대체
- 고가용성 보장
ACID vs BASE
ACID (RDBMS)
- Atomicity (원자성): 트랜잭션은 분할할 수 없으며, 모두 수행되거나 모두 수행되지 않아야 함
- Consistency (일관성): 데이터는 언제나 무결한 상태로 관리됨
- Isolation (고립성): 트랜잭션이 완료되기 전까지는 다른 사용자에게 보이지 않음
- Durability (지속성): 작업이 완료되면 서버의 전원이 차단되어도 데이터는 온전하게 남아있음
BASE (NoSQL)
- Basically Available (기본적 가용성): 분산 시스템이 부분적으로 고장나더라도 시스템의 나머지 부분은 계속 기능을 수행
- Soft State (소프트 상태): 데이터는 더 최신 상태의 데이터로 덮어쓰임
- Eventually Consistent (결과적 일관성): 데이터베이스가 일관성이 없는 상태가 될 때가 있음
NoSQL 데이터베이스 유형
1. 키-값 데이터베이스 (Key-Value)
- 가장 간단한 형태의 NoSQL DB
- 키와 값이라는 두 요소로 구성
- 키: 값과 연관된 식별자
- 값: 키와 함께 저장되는 데이터
특징:
- 값의 길이나 데이터 타입이 달라질 수 있음
- 테이블도 없고 제약 조건도 없음
- 조인이 없고 외부키도 없음
- SQL과 같은 질의 언어를 지원하지 않음
예시: Redis, DynamoDB
2. 문서 데이터베이스 (Document)
- 데이터 저장에 키-값 방식을 사용하지만, 값을 문서로 저장
- JSON, XML 형태의 문서 구조
특징:
- 고정된 스키마를 정의할 필요 없음
- 문서 하나가 값이 여러 개인 리스트를 가질 수 있음
- 다른 문서를 중첩해서 넣을 수 있음
- 조인의 필요성 없음
예시: MongoDB, CouchDB
3. 컬럼 패밀리 데이터베이스 (Column Family)
- 컬럼: 이름과 값으로 구성
- 로우: 여러 컬럼들의 모임
- 컬럼 패밀리: 자주 쓰는 컬럼들을 묶어 놓은 것
예시: Cassandra, HBase
4. 그래프 데이터베이스 (Graph)
- 노드(node)와 에지(edge)를 이용하여 관계를 표현
- ERD와 유사한 구조
예시: Neo4j, ArangoDB
NoSQL의 장단점
장점
- 확장성: 수평적 확장이 용이
- 유연성: 스키마 변경이 자유로움
- 성능: 특정 용도에 최적화된 성능
- 비용: 오픈소스 기반으로 저렴
- 가용성: 분산 구조로 고가용성 보장
단점
- 일관성: ACID 속성을 완전히 보장하지 않음
- 표준화: SQL과 같은 표준 질의 언어 부재
- 복잡성: 분산 시스템의 복잡성
- 학습 곡선: 새로운 개념과 도구 학습 필요
NoSQL vs RDBMS 비교
| 구분 | NoSQL | RDBMS |
|---|---|---|
| 스키마 | 유연한 스키마 | 고정된 스키마 |
| 확장성 | 수평적 확장 | 수직적 확장 |
| 일관성 | 결과적 일관성 | 강한 일관성 |
| 트랜잭션 | 제한적 지원 | 완전한 ACID |
| 조인 | 제한적 | 완전한 조인 지원 |
| 질의 언어 | 다양함 | SQL 표준 |
| 복잡한 쿼리 | 제한적 | 강력함 |
NoSQL 사용 사례
1. 빅데이터 처리
- 대용량 데이터의 빠른 처리
- 실시간 분석 및 집계
2. 콘텐츠 관리
- 블로그, 위키, CMS
- 유연한 콘텐츠 구조
3. 소셜 네트워크
- 사용자 관계 데이터
- 실시간 피드 처리
4. IoT 데이터
- 센서 데이터 수집
- 시계열 데이터 처리
5. 캐싱
- 세션 저장
- 임시 데이터 저장
선택 기준
NoSQL을 선택해야 하는 경우
- 대용량 데이터 처리 필요
- 빠른 확장성 요구
- 유연한 스키마 필요
- 높은 가용성 요구
- 특정 성능 최적화 필요
RDBMS를 선택해야 하는 경우
- 복잡한 쿼리 필요
- 강한 일관성 요구
- ACID 트랜잭션 필요
- 기존 SQL 기반 시스템
- 복잡한 관계형 데이터
주요 학습 포인트
1. 분산 시스템 이해
- CAP 정리 (Consistency, Availability, Partition tolerance)
- 데이터 복제 및 샤딩
- 장애 복구 메커니즘
2. 데이터 모델링
- 관계형 모델링과의 차이점
- 문서 구조 설계
- 인덱싱 전략
3. 성능 최적화
- 읽기/쓰기 성능 튜닝
- 메모리 사용량 최적화
- 네트워크 오버헤드 최소화
4. 운영 관리
- 모니터링 및 로깅
- 백업 및 복구
- 보안 관리
NoSQL은 현대적인 데이터 아키텍처에서 중요한 역할을 하며, 빅데이터와 실시간 처리 요구사항을 충족하는 핵심 기술입니다.
This post is licensed under CC BY 4.0 by the author.