본문 바로가기
🗄️ DB_이야기/# 🐘 PostgreSQL

🐘 [PostgreSQL] SQL 처리 과정

by gwon_s 2025. 7. 10.

🔍 들어가며

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가 실행 계획을 만든 후의 트리