# PostgreSQL 아키텍처 개요
PostgreSQL은 오픈 소스 관계형 데이터베이스 관리 시스템으로, 신뢰성 높은 트랜잭션 관리와 확장성을 기본 원칙으로 설계되어 있다. 다중 프로세스 아키텍처와 MVCC(Multi-Version Concurrency Control), Write-Ahead Logging(WAL) 등 핵심 기술을 통해 데이터의 무결성과 지속성을 보장한다. 아래 글은 PostgreSQL의 아키텍처에 대한 포괄적 개요를 제공한다.
---
## 1. 핵심 개념과 설계 원칙
- MVCC 기반 트랜잭션 처리: 같은 시점의 읽기와 쓰기가 서로 간섭하지 않도록 버전 관리된 tuple을 통해 동시성을 확보한다.
- 다중 프로세스 아키텍처: 클라이언트 연결마다 Backend 프로세스가 생성되며, Postmaster(또는 PostgreSQL 서버 프로세스)가 이들을 관리한다.
- 기록적 영속성: WAL(Write-Ahead Logging)을 통해 디스크 장애 시점에서도 데이터 손실을 최소화하고, 재해 복구를 가능하게 한다.
- 모듈화된 저장소 계층: 데이터 파일, 인덱스, 테이블스페이스, 로컬/원격 저장소를 포함한 계층 구조로 구성된다.
- 확장성과 상호 운용성: Extension, Foreign Data Wrapper(FDW), Logical/Streaming Replication 등을 통한 기능 확장과 다중 시스템 간의 연계가 가능하다.
---
## 2. 시스템 구성 요소
### 2.1 다중 프로세스 아키텍처
- Postmaster: 서버의 초기화와 백엔드 프로세스 생성을 담당하는 메인 프로세스.
- Backend 프로세스: 각 클라이언트 연결에 대해 생성되며, SQL 조회 요청을 처리한다.
- 클라이언트/서버 모델: 클라이언트 애플리케이션은 연결을 통해 SQL을 전송하고 결과를 받는다.
### 2.2 공유 메모리와 백그라운드 프로세스
- Shared Buffers: 데이터 페이지의 캐시 저장소로, 디스크 I/O를 줄이고 쿼리 응답 시간을 개선한다.
- WAL 버퍼: 변경 로그를 임시로 보관하는 공간으로 디스크에 안전하게 기록될 때까지 대기한다.
- Background Processes:
- Checkpointer: 주기적으로 체크포인트를 수행하여 WAL의 재생 지점을 기록한다.
- Background Writer: 버퍼의 페이지를 백그라운드에서 디스크로 쓴다.
- WAL Writer: WAL 로그를 디스크에 기록한다.
- Autovacuum: 테이블의 미사용 공간 회수와 통계 갱신을 자동으로 수행한다.
- Stats Collector: 시스템 통계 수집 및 모니터링 정보를 제공한다.
- Autovacuum Launcher/Worker: 자동 진단 및 정리 작업을 관리한다.
### 2.3 저장소 계층
- Data Directory: 데이터베이스의 핵심 파일이 저장되는 로컬 저장소의 루트 디렉터리.
- Tablespaces: 데이터 파일의 물리적 위치를 지정하는 논리적 단위로, 데이터 분리 및 관리에 활용된다.
- Relation과 Heap: 테이블의 기본 저장 단위로, 행 데이터가 물리적으로 저장된다.
- 블록 크기와 외부 저장소: PostgreSQL은 주로 8KB 블록을 사용하며, 대용량 데이터의 저장 구조를 구성한다.
### 2.4 시스템 카탈로그와 메타데이터
- pg_catalog 스키마: 시스템 객체에 대한 메타데이터를 보관하는 핵심 스키마로, pg_class, pg_proc, pg_attribute 등 다양한 시스템 테이블을 포함한다.
- OID와 트랜잭션 ID(XID): 엔트리의 고유 식별자와 트랜잭션의 순서를 관리한다.
- 뷰와 함수: 시스템 카탈로그를 기반으로 한 뷰와 정의된 함수들이 DB 관리에 활용된다.
### 2.5 쿼리 처리 파이프라인
- Parser: SQL 문장을 구문 분석한다.
- Planner/Optimizer: 실행 계획을 수립하고 비용 기반 최적화를 수행한다.
- Executor: 실행 계획에 따라 데이터를 조회·조작하고 결과를 반환한다.
- 실행 계획의 병렬화: 적절한 경우 Parallel Query를 통해 다중 프로세스가 협력하여 쿼리를 처리한다.
### 2.6 저장소 접근 방법(Access Methods)
- Heap: 일반적인 테이블 저장 구조.
- B-Tree, Hash, GiST, GIN, BRIN 인덱스: 다양한 인덱스 접근 방법으로 검색 성능을 향상시킨다.
- Visibility Map, Free Space Map: 페이지 가시성 및 가용 공간 정보를 관리한다.
---
## 3. 트랜잭션, 동시성, 및 무결성
- ACID 특성: 원자성, 일관성, 고립성, 지속성 보장.
- MVCC: 버전 관리된 tuple을 통해 읽기 일관성을 유지하고, 쓰기 충돌을 최소화한다.
- 트랜잭션 격리 수준: Read Committed, Repeatable Read, Serializable 등 다양한 수준을 지원한다.
- 락 관리와 대기 큐: 행 단위 락과 뷰 수준 락 등으로 동시성 제어를 수행한다.
- 복구와 PITR( Point-In-Time Recovery): 장애 발생 시 특정 시점으로 복구하는 기능을 제공한다.
- WAL의 역할: 변경 내용을 기록하고, 복구 및 재생에 필요한 기준점으로 작동한다.
---
## 4. 저장, 복제 및 고가용성
### 4.1 WAL과 복구
- WAL 로그의 철저한 기록으로 디스크 장애 시점에서도 데이터를 재구성할 수 있다.
- 체크포인트는 WAL 레코드의 재생 위치를 최적화하고 복구 시간을 단축한다.
### 4.2 스트리밍 복제와 논리 복제
- Streaming Replication: WAL 로그를 다른 서버로 실시간 전송하여 핫 스탠바이, 장애 조치를 가능하게 한다.
- Logical Replication: 특정 테이블 단위로 복제 설정이 가능하며, 데이터 파이프라인 구성에 유리하다.
- Publication/Subscription: 논리 복제의 기본 구성 요소로, 데이터 흐름과 필터링을 제어한다.
---
## 5. 보안, 자격 인증, 및 접근 제어
- 인증 방법: Password(md5, scram-sha-256), Kerberos, LDAP, GSSAPI 등 다양한 인증 방식 지원.
- 역할(Role)과 권한(Privilege): 객체 수준 권한 관리 및 사용자/역할 기반 접근 제어를 제공한다.
- Row-Level Security(RLS): 행 수준의 정책을 통해 미세한 보안 제어가 가능하다.
- pg_hba.conf 및 pg_ident.conf: 호스트 기반 인증과 매핑 규칙 설정.
---
## 6. 확장성, 커스터마이징 및 생태계
- Extensions: PostGIS, pg_stat_statements 등 다양한 확장을 통해 기능을 확장할 수 있다.
- Foreign Data Wrapper(FDW): 외부 데이터 소스에 대한 접근과 통합을 지원한다.
- 데이터 타입과 함수의 커스터마이징: 사용자가 정의한 타입과 함수의 등록이 가능하다.
- 설정과 튜닝: postgresql.conf, pg_ctl, pg_stat_activity 등을 통해 운영 환경에 맞춘 튜닝이 가능하다.
---
## 7. 모니터링과 관리 도구
- 기본 메트릭: 쿼리 실행 시간, 블로킹, 대기 백엔드, 캐시 적중률 등.
- 자동 유지 관리: Autovacuum, Analyze 등을 통해 통계 정보의 정확성과 저장 공간의 효율성을 유지한다.
- 백업 전략: 물리적 백업, PITR, 시점 복구 등 다양한 백업 전략을 구성할 수 있다.
- 관리 인터페이스: psql, pg_dump/pg_restore, pg_basebackup 등 표준 도구를 제공한다.
---
## 8. 동작 흐름의 간단한 예시
- 클라이언트가 SQL 쿼리를 보내면, PostgreSQL은 파서를 거쳐 실행 계획(Planner/Optimizer)을 생성한다.
- 실행 계획은 Executor로 전달되어 필요 시 인덱스를 활용하고, MVCC에 따라 버전 정보를 조회한다.
- 변경이 발생하면 WAL에 기록되고, 버퍼 관리가 디스크에 반영된다.
- 트랜잭션 커밼, 커밋 또는 롤백 시점에 로깅과 복제 경로(스트리밍/논리 복제)가 업데이트된다.
---
## 9. 결론
PostgreSQL 아키텍처는 신뢰성, 일관성, 확장성에 중점을 둔 다층 구조로 구성되어 있다. MVCC를 중심으로 한 다중 프로세스 구조, WAL 기반의 내구성, 체계적인 저장소 관리, 유연한 확장성 및 보안 모델은 엔터프라이즈급 데이터베이스의 기본 요구를 충족한다. 운영 환경에서는 적절한 구성 파라미터, 백업 전략, 복제 설정을 통해 안정성과 성능을 최적화할 수 있다.
---
관련 문서: [[PostgreSQL 아키텍처 심화 해설]], [[PostgreSQL 트랜잭션 관리 원리]]