4.1 KiB
id, created, tags
| id | created | tags |
|---|---|---|
| MariaDB vs PostgreSql 20260421 | 2026-04-21 16:43 |
이 두 DB는 현재 오픈소스 RDBMS 시장의 양대 산맥입니다. MariaDB가 MySQL의 친숙함을 계승하며 실용성에 집중한다면, PostgreSQL은 데이터 무결성과 고급 기능을 중시하는 학구적이고 정교한 DB라고 할 수 있습니다.
1. 철학 및 개발 배경
| 구분 | MariaDB | PostgreSQL |
|---|---|---|
| 태생 | MySQL에서 분차(Fork)되어 나온 실용주의 DB | 학계에서 시작된 객체-관계형(ORDBMS) 표준 지향 DB |
| 슬로건 | "MySQL보다 빠르고 더 많은 기능을 무료로" | "세계에서 가장 진보된 오픈소스 관계형 데이터베이스" |
| 라이선스 | GPL v2 (비즈니스 시 소스 공개 의무 주의) | PostgreSQL 라이선스 (BSD/MIT와 유사, 매우 자유로움) |
2. 기술적 핵심 차이
🚩 SQL 표준 및 복잡한 쿼리 처리
-
PostgreSQL: SQL 표준 준수율이 매우 높습니다. 복잡한 조인(Join), 재귀 쿼리(Recursive CTE), 윈도우 함수 성능이 뛰어나며, 분석용 쿼리 최적화가 강력합니다. (MSSQL과 사용감이 비슷합니다.)
-
MariaDB: MySQL의 문법을 따르며, 단순한 CRUD 성능에 최적화되어 있습니다. 최근 버전에서 CTE나 윈도우 함수를 지원하지만, 복잡한 비즈니스 로직 처리에서는 PostgreSQL에 비해 최적화가 덜 정교할 수 있습니다.
🚩 데이터 타입과 확장성
-
PostgreSQL: 독보적입니다. JSONB(바이너리 JSON) 지원으로 NoSQL처럼 쓸 수 있고, 지리 정보(PostGIS), 전문 검색(Full-text search) 등이 내장되어 있습니다. 사용자 정의 타입도 만들 수 있습니다.
-
MariaDB: 동적 컬럼(Dynamic Columns) 기능을 통해 비정형 데이터를 다루지만, PostgreSQL의 JSONB 성능에는 미치지 못합니다. 대신 다양한 스토리지 엔진(InnoDB, Aria, ColumnStore 등)을 용도에 맞게 선택할 수 있는 유연성이 있습니다.
🚩 동시성 제어 (MVCC)
-
PostgreSQL: 데이터 쓰기 중에도 읽기가 차단되지 않는 MVCC(Multi-Version Concurrency Control) 방식이 매우 세련되어 있어, 동시 접속자가 많은 대형 시스템에 유리합니다.
-
MariaDB: 스토리지 엔진(주로 InnoDB) 수준에서 MVCC를 지원하며, 읽기 위주의 서비스에서 가볍고 빠르게 동작합니다.
3. 상세 비교 테이블
| 항목 | MariaDB | PostgreSQL |
|---|---|---|
| 주요 용도 | 웹 서비스, CMS(워드프레스 등), 단순 CRUD | 복잡한 데이터 분석, 금융 시스템, GIS 서비스 |
| 성능 특징 | 읽기(Read) 성능이 매우 빠름 | 복잡한 쓰기(Write) 및 대량 데이터 처리에 강함 |
| 복제(Replication) | 마스터-슬레이브 방식이 매우 쉽고 직관적 | 논리적 복제 등 다양한 방식 지원 (설정은 좀 더 복잡) |
| 저장 프로시저 | 지원 (MySQL 문법) | 강력 지원 (PL/pgSQL, Python, Perl 등 지원) |
| 인덱싱 | 기본 B-Tree 위주 | B-Tree, Hash, GiST, SP-GiST, GIN, BRIN 등 다양 |
4. 어떤 것을 선택해야 할까?
🐧 MariaDB를 선택할 때
-
기존에 MySQL을 써본 적이 있어 익숙함이 중요할 때.
-
커뮤니티나 자료가 많은 것을 선호할 때.
-
단순한 웹 게시판이나 가벼운 데이터 저장용일 때.
-
PHP나 구형 웹 스택과의 호환성이 중요할 때.
🐘 PostgreSQL을 선택할 때
-
MSSQL 2019의 고급 기능을 오픈소스에서도 누리고 싶을 때.
-
데이터 정합성이 무엇보다 중요한 금융, 결제, 정산 관련 프로젝트일 때.
-
JSON 데이터를 빈번하게 다루면서 속도도 포기할 수 없을 때.
-
프로젝트가 커질 것을 대비해 확장성이 뛰어난 DB가 필요할 때.