티스토리 뷰
데이터베이스는 **선언형 프로그래밍**으로 동작한다. 사용자는 SQL을 전송하고 결과를 받지만, 그 사이에는 여러 내부 절차가 실행된다. 아래 예시를 기준으로 단 한줄의 SQL이 어떻게 처리되는지 샅샅이 살펴보자.
SELECT name, age FROM users WHERE id = 1;
DBMS 내부 구성

데이터베이스에서 SQL을 처리하는 흐름을 간단하게 도식화한 형태인데 실제는 이것보다 훨~씬 복잡하다. 기본적으로 이런 과정을 거쳐 SQL이 실행된다는 정도로만 이해하면 될 것 같다.
| 구성 요소 (엔진) | 역할 |
|---|---|
| SQL 파서(Parser) | SQL 문장을 문법적으로 분석, 참조 객체 확인, 권한 체크 |
| 옵티마이저(Optimizer) | 통계 정보를 활용해 최적의 실행 계획(Execution Plan) 수립 |
| 실행 엔진(Executor) | 옵티마이저가 만든 계획을 실제로 실행 |
| 스토리지 엔진(Storage Engine) | 데이터를 저장하고 읽는 I/O 작업 수행 |
| 버퍼 매니저(Buffer Manager) | 캐시 메모리(Buffer Pool) 관리, 필요 시 디스크에서 데이터 로드 |
| 트랜잭션 매니저 | 트랜잭션 시작/커밋/롤백, Isolation 보장, 동시성 제어 |
| 로그 엔진 | WAL[1] 등 변경 사항 기록, 장애 시 복구 지원 |
| 인덱스 엔진 | 인덱스 구조(B+ Tree 등) 생성 및 탐색 |
| 통계 수집기(Statistics Collector) | 테이블/인덱스 통계 수집 → 카탈로그[2] 저장, 옵티마이저가 참조 |
1. SQL 파싱 및 최적화
- SQL 문장을 파싱한다. 문법 검증 및 SQL 분석을 수행한다.
- 참조한 테이블이나 컬럼이 존재하는지 확인한다.
- 사용자가 참조한 테이블이나 인덱스 등에 권한이 있는지 확인한다. 없으면 에러를 반환한다.
2. 실행 계획 수립 (Optimizer)
- 옵티마이저가 통계 정보를 활용해 다양한 실행 계획을 세운다.
- 실행 계획 중 비용이 가장 낮은 실행 계획을 선택한다.
3. 실행 엔진 동작
- 실행 엔진은 옵티마이저가 만든 실행 계획을 실제로 수행하는 주체이다.
- 이 과정에서 트랜잭션 매니저가 트랜잭션을 시작한다.
- Isolation 레벨에 따라 다른 세션과의 격리성을 보장한다.
- 필요한 경우 인덱스 엔진을 통해 인덱스를 탐색한다.
4. 스토리지 엔진 (Storage Engine)
- 요청받은 데이터 페이지를 버퍼 매니저에게 요청한다.
5. 버퍼 매니저 (Buffer Manager)
- 버퍼 풀(Cache) 에 데이터가 있는지 확인한다.
- 있으면 바로 반환하고 없으면 디스크에서 데이터를 읽어 버퍼에 적재한 후 스토리지 엔진에게 반환한다.
6. 로그 기록 (Write-Ahead Logging)
- 순수 SELECT 하는 경우에는 로그를 기록하지 않는다.
- INSERT/UPDATE/DELETE (쓰기): 반드시 변경 내용을 WAL 로그에 기록
- WAL이란 것은 반드시 데이터를 디스크에 쓰기 전에 로그가 먼저 기록되어야 함을 의미한다.
- 장애시 복구할 수 있게 먼저 로그를 남기는 것이다.
[1] : Write-Ahead Logging의 약자로 데이터를 디스크에 쓰기 전에 먼저 변경 내용을 로그에 기록한다는 의미
[2] : DMBS 내부의 메타데이터를 저장하는 특별한 데이터 집합
'데이터베이스' 카테고리의 다른 글
| 캐싱, 간단할 줄 알았다. 그런데... (0) | 2026.03.29 |
|---|---|
| 서브쿼리 이해하기: 인라인뷰, 스칼라 서브쿼리, 상관·비상관 쿼리 (1) | 2025.12.01 |
| 인덱스 미활용 안티 쿼리 패턴 (0) | 2025.08.17 |
| 인덱스 개념 정리 (B+Tree 중심) (0) | 2025.05.18 |
| Replication이란? (0) | 2025.03.22 |
