TIL
🗄️다양한 DB들 뭐가 뭔지 알아보자
초비비
2025. 2. 26. 23:51
이번에 프로젝트를 하면서 PostgreSQL를 사용해야했다.
근데 왜 PostgreSQL일까 이 아이는 MySQL과 뭐가 다를까 궁금해짐!
그래서 오늘은 DB들에 대해서 정리를 해보고자 한다.
📌 데이터베이스 선택은 애플리케이션의 성능, 기능 및 확장성에 큰 영향을 미칠 수 있음
데이터 관리의 효율성을 높이고 유지 관리 비용을 줄이며 최종 사용자에게 더 나은 서비스 제공하는데 기여
데이터 베이스 선택 시 고려할 사항
- 지원되는 데이터 유형
- 인덱싱
- 데이터 검색 속도
- 동시성 제어
- 잠금 : 여러 사용자가 동일한 데이터를 동시에 수정하지 못하도록 제한
- 낙관적 동시성 제어 : 동시 데이터 액세스를 허용하지만 변경 사항을 커밋하기 전에 충돌을 확인
- 확장성
- 기본 복제본 구성
- ACID 규정 준수
SQL vs NoSQL
SQL | NoSQL |
관계형 | 비관계형 |
구조화 쿼리(SQL) 사용, 미리 정의된 스키마 | 구조화되지 않은 데이터를 위한 동적 스키마 |
수직적 확장 | 수평적 확장 |
테이블 기반 | 문서, 키-값, 그래프 또는 와이드 컬럼 스토어 |
다중 행 트랜잭션에 적합 | 문서나 JSON과 값은 비정형 데이터에 적합 |
MySQL, PostgreSQL, Oracle, SQL Server, Microsoft SQL Server | MongoDB, Cassandra, Couchbase, Amazon DynamoDB, Redis |
- NoSQL : 웹 애플리케이션을 위해 빠르고 확장 가능하며 안정적인 데이터베이스가 필요한 경우
- SQL : 애플리케이션에 복잡한 데이터 쿼리와 트랜잭션 지원이 필요한 경우
MySQL
오픈 소스 기반의 RDBMS로 가장 많이 사용하는 데이터베이스
Oracle에 인수된 이후에도 오픈 소스 커뮤니티 버전과 상용 엔터프라이즈 버전으로 나뉘어 개발
- 뛰어난 성능, 안정성 제공
- 데이터의 무결성과 일관성을 보장
- 설치와 구성이 간편하고 초기 설정이 비교적 쉬움
- 다양한 스토리지 엔진(InnoDB, MyISAM 등) 선택 가능
- Windows, Linux, MacOS 등 다양한 운영 체제에서 사용 가능
- 웹 애플리케이션과 서버에서 주로 사용
- PHP, Java, Python, C++ 등 다양한 프로그래밍 언어와 호환
- 강력한 데이터 보안 기능 제공
- SSL 암호화, SHA-256 인증, 액세스 제어 목록(ACL) 등을 포함한 다양한 보안 메커니즘을 지원
- 단점
- 대규모 트랜잭션 처리에는 다소 한계가 있을 수 있으며 복잡한 쿼리를 처리하는 데 있어 일부 불편함이 있을 수 있음
: 최신 버전의 MySQL(특히 8.0 이상)은 트랜잭션 처리 성능이 상당히 개선되었다고 하지만, PostgreSQL에 비해 고급 트랜잭션 기능(예: MVCC 구현 방식)이 덜 정교할 수 있다고 - 데이터 복구 기능이 다른 사용 데이터베이스에 비해 떨어질 수 있음
- 대규모 트랜잭션 처리에는 다소 한계가 있을 수 있으며 복잡한 쿼리를 처리하는 데 있어 일부 불편함이 있을 수 있음
PostgreSQL
오픈 소스 기반의 고급 기능을 제공하는 객체 관계형 데이터베이스 관리 시스템 (ORDBMS)
- 지리 정보 시스템(GIS) 및 공간 데이터 처리를 위한 PostGIS 확장 지원
- JSON/JSONB 데이터 타입으로 NoSQL 스타일 문서 저장 가능
- 복잡한 쿼리, 다양한 데이터 타입, 저장 프로시저, 뷰, 트리거, 트랜잭션 등 풍부한 기능 제공
- 사용자 정의 함수, 연산자, 데이터 타입 등을 통해 데이터베이스를 확장할 수 있음
- 표준 SQL을 완벽하게 지원하며 호환성이 높다
- 더 강력한 동시성 제어 및 MVCC(다중 버전 동시성 제어) 구현
- MVCC를 통해 높은 동시성 처리가 가능하며, 트랜잭션의 일관성을 보장
- 복잡한 데이터 타입(배열, 범위 타입 등) 및 전체 텍스트 검색 내장
- 단점
- 다양한 기능과 확장성 때문에 학습 곡선이 다소 가파를 수 있음
- 설치 및 설정이 MySQL에 비해 다소 복잡하고 리소스 사용량(메모리, CPU)이 더 높을 수 있음
- 읽기 작업 중심의 단순한 애플리케이션에서는 오버헤드가 발생할 수 있어 과도한 기능일 수 있음
Redis
NoSQL 중 오픈 소스 기반의 인 메모리 데이터베이스
- 키-값 형태의 데이터 저장 및 관리에 특화
- 메모리에 데이터 저장
- 매우 빠른 읽기, 쓰기 성능 제공
- Redis 6.0부터 다중 스레드 I/O 지원으로 성능이 더욱 향상됨
- 문자열, 리스트, 세트, 해시 등 다양한 데이터 타입을 지원
- 주로 캐싱, 세션 관리, 메시징 시스템 등에 활용
- 데이터의 영속성을 위해 디스크에 데이터를 저장하는 옵션 제공
- Pub/Sub 메시징 시스템 지원으로 실시간 애플리케이션에 적합
- Lua 스크립팅 기능 제공으로 복잡한 원자적 작업 구현 가능
- 클러스터 모드 지원으로 데이터 분산 저장 및 고가용성 확보 가능
- 단점
- 데이터가 메모리에 저장되므로, 물리 메모리 용량이 한계가 있을 수 있음
- 복잡한 쿼리를 지원하지 않음
MongoDB
NoSQL 기반의 문서 지향적인 데이터베이스
- JSON 형식의 문서를 저장하고 관리
- 스키마 없는 유연한 데이터 모델
- 동적으로 데이터 구조가 변하는 경우에 유리
- 데이터의 분산 저장 및 처리가 가능하여 대용량 데이터를 효율적으로 처리 가능
- 다양한 데이터 타입과 복잡한 데이터 구조 지원
- 주로 대용량 데이터와 실시간 데이터 처리에 적합
- 클라우드 환경과 인터넷 기반 서비스에서 많이 사용됨
- 데이터를 여러 서버에 분산하여 저장하는 샤딩(Sharding) 기능으로 수평적 확장이 용이함
- 복잡한 집계 작업을 처리할 수 있는 애그리게이션 프레임워크와 MapReduce로 데이터 분석 기능 제공
- 단점
- 전통적인 RDBMS에 비해 제한적인 트랜잭션 지원
- MongoDB 4.0 이후에는 다중 문서 트랜잭션도 지원하기 시작했다고 함
- RDBMS만큼의 높은 데이터 무결성을 보장하지 않음
- 전통적인 RDBMS에 비해 제한적인 트랜잭션 지원