매번 프로젝트를 할때마다
어떤 기준으로 어떤 DB를 선택해야 할지 궁금했다.
그런데 매번 그럴때 마다 깊게 고민하지 않고
항상 기존에 많이 사용했었던 DB를 사용했던 것 같다
나는 주로 MySQL/MariaDB를 사용했었다.
하지만 여러 프로젝트를 진행하고,
MSA기반 프로젝트도 몇개씩 늘어나면서,
대용량 트래픽, 성능 개선 등등을 위해서
DB를 선택하는 근거와 명분을 찾고 싶었다.
인기 있는 DBMS
이건 DB-Engines 에서 가져온
2025 4월 기준 DB 랭킹이다
예상한 대로 유명한 DBMS들이 상위권을 차지하고 있다.
예전에는 사람들이 많이 사용하는 DB니깐 그냥 사용해보자!
라는 생각으로 DB를 정했던 것 같기도 하다 ㅋㅋ
MySQL vs PostgreSQL
그래도 나는 프로젝트를 진행하면서
RDBMS를 도입하려고 하기 때문에
MySQL과 PostgreSQL 둘 중 하나를 선택하려고 한다.
그러기 위해서는 두개의 특성을 비교해서
프로젝트에 걸맞는 DB를 선택하면 될 것이다.
여러가지 측면에서 두개의 특성을 비교할 수 있다.
성능
- PostgreSQL: 복잡한 쿼리와 대규모 데이터 분석에 강점을 보임. 멀티 버전 동시성 제어(MVCC)를 통해 읽기/쓰기 작업을 효율적으로 처리하며, 병렬 쿼리 실행도 지원.
- MySQL: 단순하고 빠른 읽기 중심 작업(예: 웹 애플리케이션)에서 뛰어난 성능을 발휘. 쓰기 작업이 많을 경우 성능이 PostgreSQL보다 떨어질 수 있음.
데이터 무결성 및 표준 준수
- PostgreSQL: SQL 표준(ANSI)을 더 엄격히 준수하며, 데이터 무결성 보장에 강력한 제약 조건(예: 외래 키, 트랜잭션 무결성)을 제공.
- MySQL: SQL 표준 준수도가 상대적으로 느슨하고, 기본 설정에서 데이터 무결성 제약이 약할 수 있음(예: 외래 키 무효화 가능).
확장성
- PostgreSQL: 수평적 확장(샤딩)은 수동으로 구현해야 하지만, 복잡한 읽기/쓰기 워크로드와 대규모 데이터셋에서 안정적.
- MySQL: 클러스터링(예: MySQL Cluster)과 수평 확장이 더 쉽게 지원되며, 읽기 복제본을 활용한 확장이 용이.
데이터 타입과 기능
- PostgreSQL: JSON/JSONB(문서형 데이터), GIS(공간 데이터), 배열 등 고급 데이터 타입과 기능을 지원. 사용자 정의 함수와 확장성도 뛰어남.
- MySQL: 기본적인 데이터 타입 지원에 집중하며, JSON 지원은 추가되었지만 PostgreSQL만큼 강력하지 않음.
트랜잭션과 동시성
- PostgreSQL: ACID(원자성, 일관성, 격리성, 지속성) 준수에 매우 강력하며, 복잡한 트랜잭션 처리에 적합.
- MySQL: ACID를 지원하지만, 기본 스토리지 엔진인 MyISAM은 트랜잭션을 지원하지 않음. InnoDB 엔진 사용 시 트랜잭션 가능.
커뮤니티와 생태계
- PostgreSQL: 오픈소스 커뮤니티가 강력하며, 엔터프라이즈급 기능이 풍부.
- MySQL: 오라클 소유로 상업적 지원이 가능하지만, 오픈소스 버전(MySQL Community Edition)은 기능 제한이 있을 수 있음.
어떤 프로젝트에 적합할까
PostgreSQL은 복잡한 데이터를 처리하고 대규모 쿼리를 처리해야하는 프로젝트에 적합하다
MySQL은 읽기 작업이 많고, 빠른 응답 속도를 가지고 있어서 간단하고 빠른 프로젝트에 적합하다.
그래서 나는
대규모 트래픽이 몰리는 MSA 서비스라는 것을 가정하고 프로젝트를 진행하고 있기 때문에
여러 데이터 타입을 가진 복잡한 데이터들과 대규모 쿼리와 트랜잭션을 처리하기 위해서
PostgreSQL를 사용하기로 선택하였다!
'CS > 데이터베이스' 카테고리의 다른 글
벌크 연산으로 쿼리 튜닝하기 (0) | 2025.04.25 |
---|---|
댓글 대댓글 DB 설계하기 (0) | 2025.04.05 |
캐싱 전략 (Chache-Aside, Write-Through, Write-Behind) (0) | 2025.03.07 |
HttpSession과 Session Clustering (with Redis) (2) | 2025.03.06 |
프로젝트에 Redis를 도입하는 근본적인 이유 (feat. 기술 면접) (0) | 2025.03.05 |