RDBMS
정의
- 데이터를 테이블 형식으로 관리하는 데이터베이스 관리 시스템
- 테이블은 Row(tuple), Column(attribute)으로 구성되어 있으며, 각 테이블 간 관계가 설정되어 데이터를 효율적으로 관리할 수 있다.
- SQL문을 통해 데이터의 CRUD(Create, Read, Update, Delete) 작업이 가능하다.
- Oracle DB, MySQL, PostgreSQL, MariaDB 등이 대표적인 RDBMS이다.
특징
- 데이터 저장 구조
- 데이터를 테이블 형태로 저장, 테이블은 행과 열로 구성된다.
- 관계 설정
- 각 테이블 간 외래키(Foreign Key)를 통해 관계를 설정하여 데이터의 무결성을 유지한다.
- 데이터 무결성 보장
- 데이터의 정확성과 일관성의 보장을 위해 Primary Key, Foreign Key, Unique, Not Null, Check 등의 제약 조건을 사용한다.
- SQL 사용
- 데이터를 조작하기 위해 표준 언어인 SQL을 사용한다. DML, DDL, DCL 등…
- 트랜잭션 지원
- 트랜잭션은 하나의 작업 단위를 의미하며 ACID* 특성을 보장한다. (*원자성, 일관성, 격리성, 내구성)
- 데이터 독립성
- 논리적 데이터 구조와 물리적 데이터 구조의 분리를 통해 애플리케이션과 DB 간 결합도를 낮춘다.
장점
- 데이터 무결성과 일관성
- 데이터 제약 조건을 통해 데이터의 신뢰성을 유지
- 데이터 중복 최소화
- 데이터를 테이블 단위로 구분하고 관계를 설정하여 중복 데이터를 최소화한다.
- 다양한 쿼리 기능
- SQL을 사용하여 복잡한 질의 및 데이터를 쉽게 검색할 수 있다.
- 동시성 제어
- 데이터에 대한 여러 동시 접근에도, 트랜잭션을 통한 일관성 유지
단점
- 대용량 데이터 처리 시 속도 저하 문제 발생 → 인덱싱, 파티셔닝 등의 작업 필요
- 수직 확장에는 적합하지만, 수평 확장에 제한적이다.
- 비정형 데이터(JSON, Log 등) 처리에 있어 유연성이 떨어진다.
NoSQL (Non-Relational Database)
정의
- 비관계형 데이터베이스로, 테이블 기반 구조가 아닌 다양한 데이터 모델을 지원한다.
- 대규모 데이터의 저장 및 처리를 위해 설계되었으며, 수평 확장을 통한 높은 성능과 유연성을 제공한다.
특징 / 장점
- 불필요한 스키마 또는 유연한 스키마
- 고정된 스키마 없이 데이터 구조를 저장할 수 있어 구조 변경이 자유롭다.
- 데이터 모델 다양성
- 문서, Key-Value, Column, 그래프 등 다양한 데이터 모델 지원
- 수평 확장성
- 서버를 추가하여 데이터 저장소를 확장할 수 있다.
- 분산형 시스템 지원
- 여러 노드에 데이터를 분산 저장하여 높은 가용성을 지원한다.
- 대용량 데이터 처리
- 대량의 비정형 데이터(JSON, Log 등)를 빠르게 처리할 수 있다.
단점
- 데이터 무결성 및 일관성 부족
- 강한 트랜잭션을 보장하지 않는 경우가 많다.
- 복잡한 쿼리 기능 제한
- SQL처럼 복잡한 JOIN과 쿼리가 제한적이다.
- 관리 및 유지보수
- 대규모 분산 시스템의 관리를 위해 높은 기술력과 자원이 필요하다.
- 호환성 문제
- 기존 애플리케이션이나 시스템과의 호환성이 떨어질 수 있다.
요약
구분 | RDBMS | NoSQL |
데이터 구조 | 테이블 기반 관계형 구조 | 문서, Key-Value, 컬럼 등 |
스키마 | 고정 스키마 | 동적 스키마 |
확장성 | 수직 확장 | 수평 확장 |
트랜잭션 | ACID 보장 | ACID 보장 X |
속도 | 작은 데이터셋에서의 우수한 성능 | 대규모 데이터셋에서의 우수한 성능 |
데이터 모델 | 관계 기반 모델 | 비관계형 모델 |
데이터 무결성 | 강한 데이터 무결성 | 약한 무결성 보장 |
쿼리 언어 | 표준 SQL | 고유 API 또는 쿼리 언어 |
사용
RDBMS
- 은행, 금융 거래 등 데이터 무결성이 중요한 시스템
- 인사, 재고 관리 등 스키마가 고정되어 있는 경우
NoSQL
- 대용량 비정형 데이터(로그, 클릭 스트림) 저장 및 분석 시스템
- 소셜 네트워크, IoT, 게임 등 실시간 데이터 처리
'Computer Science' 카테고리의 다른 글
[CS] MVC Pattern (0) | 2025.01.20 |
---|---|
[CS] Overriding / Overloading (0) | 2025.01.20 |
[CS] Query String / Path Variable (0) | 2025.01.13 |
[CS] 서버 개발을 위한 기초 지식 (0) | 2025.01.13 |
[CS] 도메인 접속 시, Server-Client 간 흐름 (0) | 2025.01.09 |