티스토리 뷰
RDBMS (Relational Database Management System)
특징:
- 테이블 기반 구조: RDBMS는 테이블 형식의 데이터 모델을 기반으로 합니다. 데이터는 열과 행으로 이루어진 테이블에 저장되며, 각 테이블은 고유한 키(primary key)로 식별됩니다.
- 스키마: 데이터의 구조를 정의하는 스키마가 있어, 데이터의 일관성과 무결성을 보장합니다.
- SQL(Query Language): RDBMS는 SQL을 사용하여 데이터를 조작하고 검색하는데에 특화되어 있습니다.
- ACID 특성: 트랜잭션의 원자성, 일관성, 고립성, 지속성을 보장하는 ACID 특성을 갖습니다.
ACID 설명:
더보기
ACID (Atomicity, Consistency, Isolation, Durability) 특성:
- 원자성 (Atomicity): 트랜잭션은 원자적(Atomic)으로 간주되어, 모든 작업이 성공하거나 실패하면 전체 트랜잭션이 롤백됩니다. 예를 들어, 은행 송금에서 돈을 보내는 쪽에서 돈을 빼고, 받는 쪽에서 돈을 추가하는 경우, 어느 하나의 단계라도 실패하면 전체 트랜잭션이 롤백되어 일관성을 유지합니다.
- 일관성 (Consistency): 트랜잭션이 완료된 후에는 데이터베이스가 일관된 상태로 유지되어야 합니다. 일관성은 사전에 정의된 규칙과 제약 조건을 준수하는 것을 의미합니다. 예를 들어, 계좌 잔액은 음수가 될 수 없습니다.
- 고립성 (Isolation): 여러 트랜잭션이 동시에 실행되더라도 각 트랜잭션은 다른 트랜잭션에게 영향을 미치지 않고, 각 트랜잭션은 독립적으로 실행되는 것처럼 보장되어야 합니다. 이로써 각 트랜잭션이 서로 간섭하지 않고 안전하게 실행됩니다.
- 지속성 (Durability): 트랜잭션이 성공적으로 완료되면 그 결과는 영구적으로 저장되어야 합니다. 시스템 장애 또는 기타 문제가 발생하더라도, 데이터의 변경은 지속되어야 합니다.
장점: 데이터 일관성을 보장하므로 금융 거래와 같이 정확한 결과가 필요한 분야에서 신뢰성을 제공합니다.
단점: 복잡한 쿼리나 대규모 데이터 처리에는 NoSQL보다는 성능이 낮을 수 있습니다.
장점:
- 데이터 일관성: 예를 들어, 은행에서 계좌 정보를 저장하는 경우, 각 계좌의 잔액은 항상 정확하게 일치하도록 보장됩니다. 모든 거래가 원자적으로 처리되어 언제나 일관성이 유지됩니다.
- 복잡한 쿼리: 다양한 관계를 가진 데이터를 처리할 때 RDBMS는 JOIN 연산을 이용하여 효과적으로 복잡한 쿼리를 처리할 수 있습니다. 예를 들어, 주문 정보와 고객 정보를 연결하여 특정 기간 동안 얼마나 많은 주문이 이루어졌는지 알아내는 쿼리가 가능합니다.
단점:
- 수평 확장 어려움: 예를 들어, 트래픽이 급증하면 데이터베이스 서버의 성능을 향상시키기 위해서는 더 강력한 하드웨어로 업그레이드하는 방법 밖에 없습니다. 이로 인해 수평 확장이 어려울 수 있습니다.
- 유연성 부족: 스키마는 변경이 어려워, 새로운 데이터 필드를 추가하거나 기존 필드를 수정하는 작업이 번거로울 수 있습니다. 예를 들어, 새로운 속성이나 데이터 유형을 추가하는 경우에 제약이 발생할 수 있습니다.
대표적인 RDBMS: MySQL, PostgreSQL, Oracle
NoSQL (Not Only SQL)
특징:
- 스키마 없음: NoSQL은 스키마 없이 자유로운 데이터 형식을 허용합니다.
- 비관계형 데이터 모델: 다양한 데이터 모델을 사용하여 유연성을 제공합니다. 주로 document, key-value, column-family, 그래프 등이 있습니다.
- 분산 데이터베이스: 대용량 데이터를 처리하기 위해 여러 서버에 데이터를 분산하여 저장할 수 있습니다.
- BASE 특성: NoSQL은 ACID 대신 BASE(Basically Available, Soft state, Eventually consistent) 특성을 갖습니다.
BASE 설명:
더보기
BASE (Basically Available, Soft state, Eventually consistent) 특성:
- 기본적 가용성 (Basically Available): 시스템은 항상 기본적인 기능을 수행할 수 있어야 합니다. 일부 노드 또는 서비스가 실패하더라도 전체 시스템이 기능을 제공할 수 있습니다.
- 부드러운 상태 (Soft state): 모든 노드가 동일한 시간에 동일한 데이터를 가지고 있지 않을 수 있습니다. 일시적으로 데이터의 일관성이 떨어질 수 있지만, 시간이 지남에 따라 상태가 조정되어 eventual consistency를 달성합니다.
- 최종적 일관성 (Eventually consistent): 모든 복제본이 언젠가는 일관된 상태로 수렴하게 됩니다. 데이터 간의 일관성이 즉시 유지되지 않을 수 있지만, 시간이 지남에 따라 일관성이 확보됩니다.
장점: 대용량 트래픽이나 유연한 데이터 모델이 필요한 웹 어플리케이션에서는 유연성과 확장성에서 우수한 성능을 보입니다.
단점: 일시적인 데이터 불일치가 발생할 수 있으며, 데이터가 최종적으로 일관성을 갖추기까지 시간이 소요될 수 있습니다.
장점:
- 유연성: NoSQL은 스키마가 없거나 유연한 스키마를 가지고 있어, 새로운 데이터 형식이나 필드를 추가하는 일이 간편합니다. 예를 들어, 블로그 플랫폼에서 사용자가 새로운 프로필 속성을 추가하는 경우, NoSQL은 즉시 이를 반영할 수 있습니다.
- 수평 확장 용이: NoSQL은 대량의 데이터를 처리하거나 서버의 성능을 향상시키기 위해 쉽게 서버를 추가하여 분산 데이터베이스를 구축할 수 있습니다. 예를 들어, 온라인 쇼핑몰에서 특정 기간 동안 발생한 거래 데이터가 급증하는 경우, NoSQL은 새로운 서버를 추가하여 데이터 처리를 효과적으로 분산할 수 있습니다.
단점:
- 데이터 일관성 문제: NoSQL은 일관성을 보장하는 대신, eventual consistency를 제공합니다. 이는 일시적으로 데이터가 일치하지 않을 수 있지만, 시간이 지남에 따라 데이터가 최종적으로 일관성을 갖추게 됩니다. 예를 들어, 여러 노드에 동시에 업데이트가 발생하는 경우, 일부 노드 간에는 일시적인 불일치가 발생할 수 있습니다.
- 복잡한 쿼리 처리 어려움: RDBMS에 비해 NoSQL은 복잡한 쿼리 처리가 어려울 수 있습니다. 예를 들어, 여러 테이블 간의 JOIN 연산이 필요한 경우, NoSQL은 이를 처리하기 어려울 수 있습니다. 따라서 NoSQL을 사용할 때는 적절한 데이터 모델링이 필요합니다.
대표적인 NoSQL: MongoDB, Cassandra, Redis
예시 시나리오:
- 프로젝트 초기 단계 및 데이터 구조 고정적인 경우:
- RDBMS 선택 가능.
- 수직적 확장으로 충분한 성능 제공 가능.
- 대용량 및 다양한 데이터 처리 필요한 경우:
- NoSQL 선택 고려.
- 수평적 확장으로 대규모 데이터 처리에 유리.
- 데이터 구조 빈번하게 변경되며 유연성 필요한 경우:
- NoSQL 선택이 유리.
- 수직적 확장 및 수평적 확장 모두 가능.
- 서비스가 증가하며 트래픽 급증하는 경우:
- 수평적 확장 고려하여 여러 서버에 부하 분산.
결론:
RDBMS와 NoSQL은 각자의 특징과 장단점을 가지고 있으며, 프로젝트의 목적과 요구사항에 따라 적절한 데이터베이스를 선택해야 합니다. RDBMS는 일관성과 안정성이 필요한 경우에 적합하며, NoSQL은 유연성과 대용량 데이터 처리가 요구되는 경우에 적합합니다. 종합적으로 고려하여 데이터베이스를 선택하는 것이 중요합니다.