1189 단어
6 분
SQL, NOSQL
1. DB, DBMS
데이터베이스 (DB, Database)
전자적으로 저장되고 체계적인 데이터의 모음
여러 사람이 공유하여 사용할 목적으로 체계화해 통합, 관리하는 데이터의 집합
데이터베이스 관리 시스템 (DBMS, Database Management System)
데이터베이스 안에 데이터를 관리해주는 프로그램
다양한 데이터가 저장되어 있는 데이터베이스는 여러 명의 사용자나 응용 프로그램과 공유하고 동시에 접근을 가능하게 해줌
예) MySQL, Oracle, MongoDB
SQL : Structured Query Language
- 비절차적 언어로, 원하는 결과에 대한 내용만 명세하고 결과를 얻는 내부의 방식에 대한 내용은 없음
- RDBMS의 데이터를 관리하기 위해 설계된 특수 목적의 프로그래밍 언어
- RDBMS : 관계형 데이터베이스 관리 시스템
- 데이터를 테이블 형태로 표현하고 데이터 간 관계를 쉽게 설정함
- RDBMS에서 사용되는 표준 질의언어
2. SQL (관계형 데이터베이스)
관계형 데이터베이스는 테이블, 행, 열의 정보를 구조화하는 방식
테이블 행에 해당하는 고유 식별자인 키를 통해 여러 테이블을 연결함
특징
- 정해진 스키마에 따라 데이터를 저장
- 데이터는 테이블(행과 열)로 구성
- 관계를 통해 여러 테이블에 분산 저장
- ACID 특성 보장 (원자성, 일관성, 고립성, 지속성)
장점
- 명확한 데이터 구조
- 데이터 무결성 보장
- 복잡한 조인 연산 가능
- 트랜잭션 처리에 적합
단점
- 스키마 변경이 어려움
- 대용량 데이터 처리 시 성능 저하
- 수평적 확장의 한계
종류
MySQL, PostgreSQL, MariaDB, Microsoft SQL Server, Oracle Database
3. NoSQL (비관계형 데이터베이스)
Not only SQL 혹은 Non-Relational Operational Database
관계형 모델을 지양하고 대량의 분산된 비정형 데이터를 저장하고 조회함
스키마 없이 사용하거나 느슨한 스키마 제공
특징
- SQL과 달리 데이터 간 관계를 정의하지 않음
- Key-Value 형태로 저장되어 조인 연산이 불가능
- 대용량 데이터 저장 가능
- 다양한 데이터 모델 지원:
- Key-Value (Redis, Oracle NoSQL DB, VoldeMarte)
- Document (MongoDB, CouchDB, Riak, Azure Cosmos DB)
- Wide-Column-Family (Cassandra, Hbase, GoogleBigTable, Vertica)
- Graph (Neo4j, Sones, AllegroGraph, OrientDB)
- 분산형 구조 설계로 데이터 유실과 서비스 중단 방지
- 고정되지 않은 테이블 스키마 허용
장점
- 비용 효율적인 분산처리와 병렬 처리 가능
- 비정형 데이터 구조 설계로 설계 비용 절감
- 큰 데이터 처리에 효율적
- 유연하고 가변적인 데이터 구조 지원
단점
- 데이터 일관성은 SQL보다 떨어짐
- 복잡한 조인 연산 불가
- 많은 인덱스 사용 시 메모리 요구 높음
- 데이터 업데이트 중 장애 발생 시 데이터 손실 가능
- 트랜잭션 지원 미흡
4. SQL VS NoSQL 비교
| 비교 항목 | SQL (관계형 데이터베이스) | NoSQL (비관계형 데이터베이스) |
|---|---|---|
| 데이터 구조 | 정해진 스키마, 테이블 형태 | 스키마 없거나 유연한 구조 |
| 확장성 | 수직적 확장 (Scale-up) | 수평적 확장 (Scale-out) |
| 일관성 | 강한 일관성 (ACID 준수) | 느슨한 일관성 (BASE 준수) |
| 쿼리 언어 | 표준 SQL 사용 | 데이터베이스별 다양한 쿼리어 사용 |
| 트랜잭션 | 완벽 지원 | 제한적 지원 |
| 관계 | 테이블 간 관계 정의(조인 가능) | 관계 제한적 또는 없음 |
| 성능 | 복잡한 쿼리 적합 | 단순 쿼리 높은 처리량 |
| 사용 사례 | 금융, 회계, ERP 등 정형 데이터 | 빅데이터, 실시간 처리, 소셜 미디어 등 |
| 대표 제품 | MySQL, PostgreSQL, Oracle | MongoDB, Redis |
| 스키마 변경 | 어려움, 미리 정의 필요 | 용이, 동적 변경 가능 |
NOTE💡 결국 어느 DBMS를 선택하는 것이 맞는가?
SQL 선택 시
- 데이터 구조가 명확하고 변경이 적은 경우
- 데이터 무결성이 중요한 경우
- 복잡한 트랜잭션이 필요한 경우
NoSQL 선택 시
- 데이터 구조가 유동적인 경우
- 빠른 읽기/쓰기 필요
- 데이터 양이 매우 많은 경우
- 데이터 일관성보다 가용성이 중요한 경우
결론
두 데이터베이스는 상호 보완적이다.
프로젝트 특성에 따라 적절히 선택하며 때로는 두 가지를 함께 사용하기도 한다. (Polyglot Persistence)