1. 프로세스 아키텍처 (Process Architecture)
PostgreSQL은 사용자의 요청을 처리하기 위해 여러 개의 프로세스를 사용 함
1-1. Postmaster (Daemon Process)
- 데이터 베이스 서버가 시작될 때 가장 먼저 실행되는 부모 프로세스
- 클라이언트의 연결 요청을 감시하고, 요청이 들어오면 새로운 'Backend Process'를 생성(fork)하여 연결을 넘겨줌
1-2. Backend Process
- 클라이언트와 1:1로 매핑되어 실제 SQL 쿼리를 실행하는 프로세스
- 클라이언트가 접속을 종료할 때까지 유지 됨
1-3. Nackground Processes
- 데이터베이스의 성능과 안정성을 유지하기 위해 뒤에서 묵묵히 일하는 프로세스들
- Writer(Checkpointer/Background Writer): 메모리에 있는 데이터를 주기적으로 디스크에 기록
- WAL Writer: 틀내잭션 로그(Write Ahead Log)를 디스크로 안전하게 옮김
- Autovacuum Launcher: 불필요해진 데이터(Garbage)를 정리하여 성능 저하를 막음
2. 메모리 아키텍처 (Memory Archiitecture)
데이터를 효율적으로 처리하기 위해 메모리는 공유 영역과 개별 영역으로 나뉨
2-1. Shared Memory : 모든 프로세스가 공통으로 사용하는 공간
- Shared Buffer : 디스크에서 읽어온 데이터 페이지를 보관하는 캐시 영역
- WAL Buffer : 디스크에 기록하기 전 트랜잭션 로그를 임시 저장
2-2. Local Memory : 각 Nackend Process가 자신만의 작업을 위해 할당받는 공간
- Work Mem : 정렬(sort)이나 조인(join)작업을 수행할 때 사용 됨
- Maintenance Work Mem : 인덱스 생성이나 진공(Vacuum) 작업 등 관리 업무에 사용 됨
3. 저장소 구조 (Storage Architecture)
데이터가 디스크에 불리적으로 어떻게 저장되는지를 결정
3-1. Page/Block : PostgreSQL 저장소의 기본 단위(보통8KB)이다. 실제 행(Row) 데이터가 이 페이지 안에 저장 됨
3-2. MVCC (Multi-Version Concurrency Control) : 동시성을 제어하는 핵심 기술. 데이터를 수정할 때 기존 데이터를 덮어쓰지 않고 새로운 버전을 생성함으로써, 읽기 작업과 쓰기 작업이 서로 방해받지 않게 함
쿼리 워크플로우
- 연결(Connection) : 클라이언트가 접속을 요청하면 부모 프로세스인 Postmaster가 이를 받아 자식 프로세스인 Backend Process를 생성(fork)함. 이 때부터 해당 클라이언트 전용 통로가 생기는 것임
- 구문 분석(Parser) : 사용자가 보낸 SQL 문장에 오타가 없는지, 문법에 맞는지 검사하여 분석 트리(Parse Tree)를 만듦
- 재작성 (Rewrite) : 뷰(View)나 룰(Rule) 시스템을 적용하여 쿼리를 더 단순하거나 구체적인 형태로 변형
- 최적화 및 계획(Optimizer/Planner) : 핵심 단계. 통계 정보를 바탕으로 인덱스를 쓸지, 테이블 전체를 읽을지 결정하여 가장 비용이 적은 실행 계획 세움
- 실행 (Executor) : 계획에 따라 데이터를 가져옴
- Shared Buffers(공유 메모리)에 찾는 데이터가 있는지 확인
- 없으면 디스크에서 읽어와 메모리에 올림
- 데이터를 수정한다면 WAL Buffers에 로그를 먼저 남기고 데이터 변경
잘 안 와닿아서 개인적으로 더 알아본 단계 설명
- 재작성 단계
active_users 라는 이름의 view가 있고 사용자가 쿼리문으로 "select * from active_users" 를 날린 경우 내부적으로는 "select * from users where status == 'active'" 를 실행해서 결과를 사용자에게 보여줌
- 최적화 단계
PostgreSQL의 옵티마이저는 비용 기반 최적화(CBO, Cost-Based Optimization) 방식 사용
비용은 쿼리를 실행할 때 예상되는 CPU 사용량과 디스크 I/O 등을 숫자로 계산한 값!
상세 워크플로우
- 경로 생성(Path Generation): 데이털르 가져올 수 있는 모든 가능한 경로 탐색
- ex) 인덱스를 탈지, 그냥 처음부터 끝까지 풀스캔할지, 어떤 알고리즘을 사용할지 등
- 비용 계산(Cost Estimation): 각 경로에 대해 수치를 매김. DB가 미리 수집해둔 통계정보를 참조
- ex) 이 테이블은 데이터가 100만 건이니까 인덱스가 효율적이다, 이 조건은 결과가 1건만 나오겠네 등
- 최적의 계획 선택(Plan Selection): 계산된 비용 중 가장 낮은(가장 빠른) 경로를 최종 실행 계획(Plan Tree)으로 확정
'공부' 카테고리의 다른 글
| [IT 인프라] 클라우드 개념 및 종류, 클라우드 형태, 클라우드 기술 및 용어 (1) | 2026.04.22 |
|---|---|
| [IT 인프라] 서버와 클라이언트, 서버의 역할 및 종류 (0) | 2026.04.20 |
| [컴퓨터구조] 프로세스, 프로세스 제어 블록(PCB, Process Control Block) (0) | 2026.03.18 |
| Node.js 와 Nest.js (1) | 2026.03.17 |