[DB] 관계형 데이터베이스(RDBMS) vs 비관계형 데이터베이스(NoSQL)
관계형 데이터베이스와 비관계형 데이터베이스는 각각 데이터를 저장하고 관리하는 구조와 방식이 다르며, 주로 사용되는 상황이나 장점에도 차이가 있습니다.
관계형 데이터베이스 (RDBMS: Relational Database Management System)
정의 및 특징
• 정형 데이터 구조: 관계형 데이터베이스는 **테이블 형태(행과 열)**로 데이터를 저장합니다. 각 테이블은 고정된 스키마를 따르며, 특정 데이터 형식으로 저장해야 합니다.
• 관계와 제약 조건: 데이터 간의 관계를 정의하고, 테이블 간의 외래 키 등을 통해 참조 관계를 설정해 데이터의 무결성을 유지합니다.
• SQL 사용: 관계형 데이터베이스는 데이터 질의를 위해 **SQL (Structured Query Language)**을 사용합니다. SQL은 데이터 조작, 정의, 제어, 트랜잭션 처리 등 다양한 기능을 제공합니다.
• ACID 준수: 대부분의 RDBMS는 트랜잭션이 안전하게 수행될 수 있도록 **ACID (원자성, 일관성, 격리성, 지속성)**을 지원하여 데이터의 무결성을 보장합니다.
• Pessimistic Lock (비관적 잠금): RDBMS는 비관적 잠금을 자주 사용합니다. 비관적 잠금은 데이터를 업데이트할 때 다른 트랜잭션이 해당 데이터에 접근하지 못하도록 미리 잠금을 설정하여 데이터의 일관성을 보장합니다.
• Optimistic Lock (낙관적 잠금): 데이터 충돌 가능성이 낮은 경우에는 낙관적 잠금을 사용해 일단 업데이트를 시도한 후, 트랜잭션이 완료될 때 데이터 충돌 여부를 검사합니다. 트랜잭션이 겹치지 않을 것이라는 가정 하에 사용되며, 주로 버전 정보를 통해 변경 사항을 추적합니다.
트랜잭션 격리 수준 지원: RDBMS는 트랜잭션의 격리 수준을 설정하여 트랜잭션 간 데이터 충돌을 제어할 수 있습니다. 대표적인 격리 수준으로는 Read Uncommitted, Read Committed, Repeatable Read, Serializable이 있으며, 높은 수준의 격리를 설정할수록 데이터 일관성은 높아지지만 성능이 저하될 수 있습니다.
장점
• 강력한 데이터 무결성 보장: 트랜잭션 처리와 제약 조건을 통해 데이터의 무결성을 보장하기 때문에 중요한 데이터를 다룰 때 안정적입니다.
• 복잡한 질의 처리 가능: SQL을 통해 복잡한 질의와 분석 작업을 손쉽게 수행할 수 있습니다.
단점
• 확장성의 한계: 수평적 확장(데이터를 여러 서버에 분산하여 저장)이 어렵고, 수직적 확장(서버 성능을 높이는 방법)에 의존하는 경향이 있습니다.
• 유연성 부족: 스키마가 고정되어 있어 데이터의 구조가 자주 바뀌는 경우 수정이 번거롭고 복잡해질 수 있습니다.
비관계형 데이터베이스 (NoSQL)
정의 및 특징
• 유연한 데이터 구조: 비관계형 데이터베이스는 정해진 스키마가 없고, 문서(Document), 키-값(Key-Value), 열(Column), 그래프(Graph) 형태로 데이터를 저장할 수 있습니다.
• 다양한 모델:
• 문서형(Document-Based): MongoDB, CouchDB와 같은 DB가 있으며, JSON 형태의 문서로 데이터를 저장해 구조가 자유롭습니다.
• 키-값(Key-Value): Redis, DynamoDB와 같은 DB가 있으며, 단순한 키-값 형태로 데이터를 저장합니다.
• 열 기반(Column-Family): Cassandra, HBase와 같은 DB가 있으며, 컬럼 단위로 데이터를 저장하여 대용량 데이터 처리에 적합합니다.
• 그래프(Graph): Neo4j, ArangoDB와 같은 DB가 있으며, 데이터 간의 관계를 그래프로 표현해 관계성 탐색에 유리합니다.
• CAP 이론 준수: NoSQL 데이터베이스는 CAP 이론에 따라 일관성(Consistency), 가용성(Availability), 파티션 허용성(Partition Tolerance)을 특정 비율로 유지하여 트랜잭션 처리 성능을 높이거나 확장성을 우선시합니다.
• 낮은 잠금 요구: NoSQL은 RDBMS와 달리 잠금 기능을 제한적으로 지원하거나, 특정 시점 일관성(Eventual Consistency) 모델을 채택하여 잠금을 거의 사용하지 않습니다. 즉, 낮은 수준의 잠금으로 높은 트랜잭션 처리량을 지원합니다.
장점
• 유연한 스키마: 구조가 유연해 데이터 형식이 자주 바뀌거나 비정형 데이터를 저장하기에 적합합니다.
• 수평적 확장성: 데이터 분산 저장이 용이하여 대규모 데이터를 다룰 때 유리하며, 성능 저하 없이 서버를 확장할 수 있습니다.
단점
• 데이터 무결성 부족: ACID 특성을 보장하지 않는 경우가 많아 데이터의 일관성과 무결성 유지가 어려울 수 있습니다.
• 복잡한 질의의 한계: SQL처럼 복잡한 질의 및 조인 연산이 어려워 데이터 분석이 제한적일 수 있습니다.
관계형 데이터베이스와 비관계형 데이터베이스의 차이점
특성 | 관계형 데이터베이스(RDBMS) | 비관계형 데이터베이스 (NoSQL) |
데이터 구조 | 정형화된 테이블(행과 열) | 다양한 데이터 모델 (문서, 키-값, 열, 그래프) |
스키마 | 고정 스키마, 미리 정의 | 유연한 스키마, 필요에 따라 변경 가능 |
확장성 | 수직적 확장 중심 | 수평적 확장 용이 |
데이터 무결성 | ACID 준수 (높은 무결성 보장) | BASE 준수 (유연한 일관성) |
질의 언어 | SQL | BASE 준수 (유연한 일관성) |
잠금 | 비관적, 낙관적 잠금 사용 | 낮은 잠금 수준, 데이터 충돌을 허용하거나 해결 |
트랜잭션 지원 | 강력한 트랜잭션 지원, 격리 수준 조절 가능 | 간단한 트랜잭션 제한적 지원, 여러 노드에 걸친 트랜잭션은 어려움 |
적합한 사용 사례 | 금융, ERP 시스템 등 중요 데이터 처리 | 빅데이터 분석, IoT, 소셜 미디어 등 유연성 |
사용 사례
1. 관계형 데이터베이스는 금융, 의료, 정부 데이터처럼 높은 무결성과 일관성이 요구되는 환경에 적합합니다.
2. 비관계형 데이터베이스는 소셜 미디어, 로그 데이터 수집, 실시간 빅데이터 처리와 같은 환경에서 유리합니다.
요약
관계형 데이터베이스는 정형 데이터를 저장하는 데 최적화되어 있으며 데이터 무결성을 보장합니다. 반면, 비관계형 데이터베이스는 유연한 스키마로 빠른 확장성과 비정형 데이터 처리가 용이합니다.