🔍 들어가며
PostgreSQL에서 클라이언트가 SQL을 전달하면, 단순히 실행만 되는 것이 아니라 내부적으로 다단계 처리를 거쳐 결과를 반환하게 됩니다.
이 과정을 정확히 이해하면 성능 튜닝, 쿼리 최적화에 큰 도움이 됩니다.
🔄 PostgreSQL SQL 처리 과정 – 흐름도 (텍스트 순서도)
🧑💻 클라이언트
│
▼
📝 SQL 전송 (예: SELECT * FROM users;)
│
▼
📚 1. Parser
└─ SQL 문법 분석
└─ Syntax Tree 생성
└─ 문법 오류 체크
│
▼
🔍 2. Analyzer / Rewriter
└─ 테이블/컬럼 존재 확인
└─ View, Rule 적용 시 쿼리 재작성
│
▼
🧠 3. Planner / Optimizer
└─ 가능한 여러 실행 계획 수립
└─ 비용(cost) 기반 최적 계획 선택
│
▼
⚙️ 4. Executor
└─ 실행 계획에 따라 테이블 액세스
└─ 데이터를 필터링/정렬/집계
│
▼
📤 5. 결과 반환
└─ 클라이언트에 결과 전송
📍 SQL 처리 과정 요약
SQL이 PostgreSQL에 도달하면 아래의 단계로 처리됩니다
1. Parser (파서)
→ SQL 문장을 구문 분석(Parsing)하여 구문 트리(Syntax Tree) 생성
→ 문법 오류(Syntax Error)가 있는지 체크
예시)
SELECT name FROM employees WHERE department = 'Sales';
-- SELECT, FROM, WHERE 등의 키워드를 구조화하여 트리 형태로 저장
Parse Tree
└── SELECT
├── targetList: name
├── fromClause: employees
└── whereClause: department = 'Sales'
2. Analyzer(분석기)
→ 구문 트리를 의미분석 (예: 테이블/컬럼 존재 여부 확인) 후 Parse tree에 해당 내용을 추가하여 Query Tree를 생성
3. Rewriter (재작성기)
→ Planner에 전달되기 전에 뷰(View), 규칙(Rule)이 있다면 Query Tree를 재작성
→ Query Rewrite 또는 최적화가 필요하지 않은 Simple Query의 경우 바로 Executor 단계로 넘어갑니다.
* Simple Query : create, drop, alter, vacuum 등의 DDL, DCL문
* Complex Query : select, update, delete 등 과 같은 DML문
3. Planner / Optimizer (계획 수립기 / 최적화기
→ Planner에 전달된 Query Tree 데이터 명세를 기반으로
다양한 실행 계획을 생성하고 비용(cost)을 비교하여 최적의 계획 선택
4. Executor (실행기)
→ 선택된 실행 계획을 기반으로 실제 데이터를 읽고, 연산을 수행한 뒤 결과 반환
5. Result Delivery (결과 반환)
→ 클라이언트에게 결과 전달
💡 참고 흐름도 (SQL → 계획까지)
SQL 입력
↓
📚 Parse Tree 생성 (Syntax Tree)
↓
🔍 Query Tree (Analyzer + Rewriter)
↓
🧠 Planned Statement Tree (Optimizer)
↓
⚙️ 실행 (Executor)
🔍 용어 구분 (PostgreSQL 기준)
| 용어 | 설명 |
| Syntax Tree | SQL을 파싱했을 때 생성되는 트리 구조. SQL 문법 구조를 반영 |
| Parser Tree (Parse Tree) | PostgreSQL 내부에서 파싱 결과로 생성되는 노드 트리 구조 |
| Query Tree | 분석기(Analyzer)와 리라이터(Rewriter)를 거친 후 생성되는 의미 분석 트리 |
| Planned Statement Tree | Optimizer가 실행 계획을 만든 후의 트리 |
'🗄️ DB_이야기 > # 🐘 PostgreSQL' 카테고리의 다른 글
| 🐘 [PostgreSQL] Vacuum (1) | 2025.07.11 |
|---|---|
| 🐘 [PostgreSQL] PostgreSQL의 핵심 개념, MVCC란? (1) | 2025.07.10 |
| 🐘 [PostgreSQL] 전반적인 아키텍처 & 동작 흐름 정리 (1) | 2025.07.10 |
| 🐘 [PostgreSQL] PostgreSQL 메모리(Memory) 구조 (4) | 2025.07.08 |
| 🐘 [PostgreSQL] PostgreSQL 프로세스(Process) 구조 (2) | 2025.07.08 |