codingstairs
노트에듀라이프연락
⌕검색⌘K
koen

Navigation

  • Intro
  • Blog
  • Life

연락하기

로그인 없이도 보낼 수 있어요. 답변이 필요하면 이메일을 함께 적어 주세요.

  • 익명 폼으로 의견 남기기 →
  • ✉ warragon112@gmail.com
  • 카카오톡 오픈채팅 ↗

© 2026 codingstairs

  • 노트
  • 에듀
  • 검색
  • 라이프
  • 연락
  • 약관
  • RSS
  • GitHub
노트›data

PostgreSQL 부터

2026-04-28 게시· 2026-05-18 갱신·0회 조회

PostgreSQL 부터

데이터를 저장할 도구를 고르는 일은 자주 부담입니다. NoSQL · 분산 SQL · 그래프 DB · 시계열 DB 가 줄지어 있습니다. 그러나 많은 프로젝트가 처음 한참 동안 PostgreSQL 한 가지로 충분합니다.

1. PostgreSQL 에 대한 이야기

PostgreSQL 의 뿌리는 1986 년 UC Berkeley 의 POSTGRES 연구 프로젝트(Michael Stonebraker 주도) 에 있습니다. SQL 인터페이스가 추가된 이후 1996 년 PostgreSQL 이라는 이름으로 오픈소스 커뮤니티에 이양됩니다. 라이선스는 BSD-like (PostgreSQL License) 라 상업·수정·재배포에 큰 제약이 없습니다.

사건 시기
POSTGRES (Berkeley) 1986
Postgres95 (SQL 도입) 1995
PostgreSQL 1.0 1996
MVCC 정착 6.x ~ 7.x
Streaming Replication 9.0 (2010)
JSONB 타입 9.4 (2014)
논리적 복제 10 (2017)
선언적 파티셔닝 10 (2017)

PostgreSQL 의 정체성은 "확장 가능한 관계형 DBMS" 입니다. 타입·연산자·인덱스·언어를 모두 사용자 코드로 더할 수 있는 구조에서 출발했고, 이는 오늘날 extension 생태계로 이어집니다.

2. ACID 와 표준 SQL

PostgreSQL 은 트랜잭션의 원자성·일관성·격리성·지속성(ACID) 을 기본값으로 보장합니다. 단일 인스턴스 안에서 격리 수준은 Read Committed 가 기본이며 Repeatable Read · Serializable 까지 선택 가능합니다.

표준 SQL 준수도 단단합니다. CTE(WITH) · 윈도우 함수 · LATERAL 조인 · 재귀 쿼리 같은 표준 기능을 다른 RDBMS 보다 일찍 안정화한 사례가 많습니다. JSON 표준(SQL/JSON 경로 표현식) 도 점진적으로 도입됐습니다.

3. Extension 생태계

CREATE EXTENSION ... 한 줄로 새 기능을 끼워 넣을 수 있습니다.

extension 역할
pg_trgm 부분 문자열 유사도 검색
unaccent 라틴 발음기호 제거
postgis 지리정보 (공간 인덱스·SRS·함수)
pgvector 벡터 임베딩 저장·유사도 검색
timescaledb 시계열 하이퍼테이블·압축
citus 샤딩·분산
hstore 키-값 타입
pg_partman 파티션 관리 자동화

extension 은 PostgreSQL 메이저 버전과 호환성이 묶여 있어 업그레이드 계획에 함께 포함시키는 편이 안전합니다.

4. MySQL · MariaDB 와의 비교

MySQL 은 1995 년 등장했고 LAMP 스택의 일부로 널리 퍼졌습니다. 2009 년 Oracle 이 Sun 을 인수하면서 MariaDB 가 포크됐습니다. 강점은 익숙함·튜닝 자료의 풍부함·일부 워크로드의 처리량입니다.

PostgreSQL 과의 차이로 자주 언급되는 항목들.

  • 트랜잭션·격리 — InnoDB 기준 비슷하지만 기본값과 잠금 모델 세부가 다릅니다.
  • DDL — MySQL 의 일부 DDL 은 묵시적 커밋을 일으킵니다. PostgreSQL 은 트랜잭션 안에서 DDL 을 묶기가 비교적 자연스럽습니다.
  • 타입 풍부함 — PostgreSQL 이 배열·JSONB·범위·UUID·열거형·도메인 등에서 더 풍부합니다.
  • 확장성 — PostgreSQL extension 모델이 더 깊습니다.

선택은 워크로드·운영 자원·생태계 친숙도에 좌우됩니다.

5. SQLite 와의 자리 차이

SQLite 는 D. Richard Hipp 이 2000 년에 만든 라이브러리형 DB 입니다. 별도 서버 없이 한 파일에 데이터를 담습니다. 임베디드·데스크탑·모바일·테스트 환경에서 강합니다. 동시 쓰기 다중 클라이언트는 약점이지만 단일 프로세스 읽기는 매우 빠른 편입니다.

예를 들어 한 프로젝트 의 food-app · language-app 가 SQLite 를 씁니다. 로컬 앱이라 서버가 필요 없고 사용자 PC 한 대 안에서 끝납니다.

6. CockroachDB · YugabyteDB

CockroachDB(2015 년 GA) 와 YugabyteDB(2018 GA) 는 PostgreSQL 호환을 표방하는 분산 SQL 후보입니다. 글로벌 분산·자동 샤딩·강한 일관성을 내세웁니다. PostgreSQL 와이어 프로토콜·SQL 일부를 따라가지만 구현은 별개 엔진이라 PostgreSQL 만의 기능 (특히 일부 extension) 이 그대로 쓰이지는 않습니다.

7. MongoDB 와의 비교

MongoDB 는 2009 년 등장한 문서 지향 DB 입니다. JSON 유사 BSON 문서를 컬렉션에 저장합니다. 스키마 자유와 빠른 초기 개발이 강점으로 자주 언급되지만 트랜잭션·조인·집계의 풍부함에서는 관계형 DB 와 다른 자리에 섭니다.

PostgreSQL 의 JSONB 가 도입된 이후 "JSON 이 필요해서 MongoDB 를 골랐다" 는 명분이 줄었다는 의견도 자주 보입니다.

8. PostgreSQL for everything

근래 들어 "처음에는 PostgreSQL 한 가지로 시작하라" 는 권고가 자주 보입니다.

  • 큐: 별도 메시지 브로커 대신 SELECT ... FOR UPDATE SKIP LOCKED 로 작업 큐 (river · graphile-worker · pgmq).
  • 검색: pg_trgm · tsvector 풀텍스트 인덱스로 작은~중간 검색 요구를 충족.
  • 벡터: pgvector extension 으로 임베딩 저장·유사도 검색.
  • 시계열: timescaledb 또는 BRIN 인덱스 + 파티셔닝.
  • 캐시: 마테리얼라이즈드 뷰 또는 캐시 테이블.

장점은 운영 표면이 하나라는 점입니다. 백업·모니터링·인증·접근 제어를 한 곳에서 다룹니다. 한계는 한 DB 가 너무 많은 일을 맡으면 단일 장애점이 커지고, 워크로드가 갈라지면 결국 분리해야 한다는 점입니다.

9. 자주 걸리는 자리

메이저 버전 업그레이드 — extension 호환성 확인이 필수입니다. pg_upgrade 또는 논리적 복제로 다운타임을 줄일 수 있습니다.

인코딩·로케일 고정 — DB 생성 시점의 LC_COLLATE 가 정렬에 영향을 줍니다. 운영 중간에 바꾸기 어려우니 처음에 결정합니다.

autovacuum 비활성화 — 끄면 bloat 가 누적됩니다 (postgres-deep 에서 자세히 다룹니다).

시퀀스 캐시 — nextval 의 캐시 설정이 다중 프로세스에서 갭을 만들 수 있습니다.

타임존 가정 — TIMESTAMPTZ 와 TIMESTAMP 는 미묘하게 다릅니다. 저장은 UTC, 표시 시 변환이 일반적입니다.

하고픈 말

데이터 저장소 선택은 처음에 무겁게 느껴지지만 PostgreSQL 한 가지로 멀리 갑니다. 분리의 시점은 워크로드·트래픽·SLA 가 결정해 주지 도구 카탈로그가 결정해 주지 않습니다.

Next

  • postgres-deep

PostgreSQL 공식 문서 · PostgreSQL 라이선스 · Awesome Postgres · PostgreSQL 위키 — History 를 참고합니다.

data 카테고리의 다른 글

카테고리 전체 보기 →
  • DB 시드 소스를 코드 트리 안에 두지 않는다
  • Supabase Storage — 파일 업로드와 권한
  • Kafka 실무 — 토픽 설계와 메시지 흐름
  • 여러 PostgreSQL 풀 한 앱에서 관리하기
  • 백업과 복구
  • 이미지 파이프라인