1. 고가용성과 확장성을 지향하는 NoSQL(Not Only SQL)의 개요
가. NoSQL의 정의
전통적인 RDBMS의 관계형 모델과 SQL의 한계를 벗어나, 비정형 데이터 처리를 위해 유연한 데이터 모델링과 **수평적 확장성(Scale-out)**을 지원하는 비관계형 데이터베이스 시스템입니다.
CAP 이론(Consistency, Availability, Partition Tolerance) 및 BASE(Basically Available, Soft-state, Eventually Consistent) 철학을 기반으로 합니다.
2. NoSQL의 4가지 주요 데이터 모델 유형
| 유형 | 특징 | 대표적인 제품 |
| Key-Value Store | 가장 단순한 구조. 고유한 키(Key)에 하나의 값(Value)을 연결. 응답 속도가 매우 빠름 | Redis, Riak, Amazon DynamoDB |
| Document Store | 데이터를 JSON, BSON, XML 등의 문서 형태로 저장. 스키마가 유연하며 복잡한 데이터 구조 표현 가능 | MongoDB, CouchDB |
| Column-Family | 대량의 데이터를 컬럼 단위로 저장. 읽기보다 쓰기에 최적화되어 있으며 구글의 BigTable 설계 기반 | Apache Cassandra, HBase |
| Graph Store | 노드(Node)와 간선(Edge)으로 데이터 간 관계를 표현. 소셜 네트워크, 추천 엔진에 적합 | Neo4j, AllegroGraph |
3. NoSQL 데이터 모델링 절차
NoSQL은 RDBMS와 달리 **데이터의 활용 형태(Query Pattern)**를 먼저 고려하는 'Query Driven Design' 절차를 따릅니다.
[절차 1] 데이터 분석 및 도메인 모델링
저장할 데이터의 실체(Entity)와 관계를 정의합니다. (ERD와 유사한 개념적 설계 단계)
[절차 2] 쿼리 패턴 정의 (Query Pattern Design)
가장 중요한 단계로, 애플리케이션이 데이터를 어떻게 조회할 것인지(Read Path) 모든 케이스를 나열합니다.
[절차 3] 데이터 구조 결정 (Data Structuring)
정의된 쿼리에 최적화되도록 데이터를 결합(Denormalization)하거나 포함(Embedding)하는 구조를 설계합니다.
[절차 4] 최적화 및 인덱스 설계
데이터의 분산 기준이 되는 **Partition Key(Sharding Key)**를 선정하고, 검색 성능 향상을 위한 Secondary Index를 설계합니다.
4. NoSQL 모델링 시 주요 고려사항 (Design Patterns)
비정규화 (Denormalization): 조인(Join) 연산을 최소화하기 위해 데이터를 중복 저장하여 읽기 성능 극대화
집계 (Aggregation): 유연한 스키마를 활용하여 연관된 데이터를 하나의 문서나 로우(Row)에 모아서 저장
애플리케이션 측 조인: 데이터베이스 계층에서 조인이 불가능하므로, 필요시 애플리케이션 단에서 데이터를 병합하는 로직 구현
5. 기술사적 제언: Polyglot Persistence의 전략적 도입
최근 데이터 관리 전략은 단순히 RDBMS나 NoSQL 중 하나를 선택하는 것이 아니라, 서비스의 특성에 따라 최적의 DB를 혼용하는 **폴리글랏 퍼시스턴스(Polyglot Persistence)**가 주류를 이루고 있습니다.
트랜잭션 및 정형 데이터: RDBMS (MySQL, PostgreSQL 등)
실시간 로그 및 캐싱: Key-Value NoSQL (Redis)
대규모 비정형 콘텐츠: Document NoSQL (MongoDB)
댓글 없음:
댓글 쓰기