데이터베이스 엔진이란?
한 문장 요약
데이터베이스 엔진 = 데이터를 저장하고 관리하고 처리하는 C/C++ 프로그램
🎯 데이터베이스 엔진의 역할
1. 데이터 저장 (Persistence)
디스크에 데이터를 안전하게 저장
├─ 테이블 구조 관리
├─ 인덱스 생성 & 유지
└─ 파일 시스템 관리
2. 데이터 검색 (Query Processing)
요청: SELECT SUM(amount) FROM orders WHERE id > 10
↓
엔진의 처리:
├─ 파서: 쿼리를 이해
├─ 옵티마이저: 최적의 실행 계획 수립
├─ 실행기: RAM에 로드 → CPU에서 계산
└─ 반환: 결과 데이터
3. 성능 최적화 (Optimization)
- 인덱스를 활용한 빠른 검색
- 쿼리 최적화 (불필요한 연산 제거)
- 캐싱 (자주 쓰는 데이터 메모리에 유지)
- 병렬 처리 (대용량 데이터)
4. 데이터 무결성 (Integrity)
트랜잭션 관리:
완전 성공 또는 완전 실패
(중간에 실패하면 전체 롤백)
제약 조건:
├─ PRIMARY KEY (중복 방지)
├─ FOREIGN KEY (관계 일관성)
├─ NOT NULL (필수 필드)
└─ UNIQUE (유니크 보장)
⚙️ 엔진의 동작 원리
쿼리 실행 흐름
┌────────────────────────────────────┐
│ 쿼리 수신 │
│ SELECT * FROM users WHERE id = 1 │
└──────────────┬─────────────────────┘
│
┌──────────────▼─────────────────────┐
│ [파서] Parsing │
│ - 문법 검사 │
│ - 쿼리 구조 파악 │
└──────────────┬─────────────────────┘
│
┌──────────────▼─────────────────────┐
│ [옵티마이저] Query Optimization │
│ - 실행 계획 수립 │
│ - 인덱스 사용 여부 결정 │
│ - 가장 빠른 방법 선택 │
└──────────────┬─────────────────────┘
│
┌──────────────▼─────────────────────┐
│ [실행기] Executor │
│ 1. 디스크에서 데이터 읽기 │
│ 2. RAM으로 로드 │
│ 3. CPU에서 조건 필터링 │
│ 4. 결과 반환 │
└──────────────┬─────────────────────┘
│
┌──────────────▼─────────────────────┐
│ 결과 반환 │
│ [{ id: 1, name: 'John' }] │
└────────────────────────────────────┘
📊 함수 처리 위치별 성능 비교
내장함수 (Built-in Functions)
SELECT SUM(amount) FROM orders; -- 엔진이 직접 처리✅ 빠른 이유:
- 엔진에 이미 C 코드로 구현됨
- 데이터가 이미 메모리에 있음 (옮길 필요 없음)
- CPU에서 최적화된 기계어 실행
- 병렬 처리 가능
예시: 백만 개 행 합계
SUM(amount) → 0.002초 ⚡
사용자 정의 함수 (UDF)
CREATE FUNCTION CUSTOM_SUM(amount INT) RETURNS INT BEGIN
RETURN amount * 2;
END;
SELECT CUSTOM_SUM(amount) FROM orders; -- 엔진이 해석 & 실행⚠️ 느린 이유:
- 엔진이 각 행마다 함수 해석 필요
- 추가 오버헤드 발생
- 병렬 처리 어려움
예시: 백만 개 행 처리
CUSTOM_SUM() → 0.05초 (느림)
애플리케이션 함수
// Node.js에서
const result = await db.query('SELECT amount FROM orders');
const total = result.reduce((sum, row) => sum + row.amount, 0);❌ 가장 느린 이유:
- 백만 개 행을 모두 네트워크로 전송
- 애플리케이션 메모리에 로드
- JavaScript 인터프리터가 계산
- 메모리 낭비
예시: 백만 개 행 처리
애플리케이션 함수 → 0.5초 (훨씬 느림)
📈 성능 비교 표
| 함수 위치 | 처리 대상 | 속도 | 이유 |
|---|---|---|---|
| 내장함수 | 엔진 (메모리) | ⚡⚡⚡ 빠름 | C 코드, 최적화됨 |
| UDF | 엔진 (메모리) | ⚡⚡ 중간 | 해석 오버헤드 |
| 애플리케이션 | 앱 (네트워크) | ⚡ 느림 | 전송 + 인터프리터 |
🛠️ 유명한 데이터베이스 엔진
| 엔진 | 언어 | 특징 | 사용 사례 |
|---|---|---|---|
| PostgreSQL | C | 고급 기능, JSON 지원 | 엔터프라이즈 |
| MySQL | C/C++ | 빠르고 가벼움 | 웹 애플리케이션 |
| SQLite | C | 파일 기반, 초경량 | 모바일, 임베디드 |
| MongoDB | C++ | 문서형 DB | NoSQL |
| Redis | C | 메모리 기반 초고속 | 캐싱, 세션 |
💡 핵심 개념
엔진 = 전문가 데이터 처리기
비유: 도서관의 사서
당신 (프로그램)
↓ "신청서" (SQL 쿼리)
사서 (데이터베이스 엔진)
├─ 책 위치 파악 (인덱싱)
├─ 빠르게 찾아주기 (쿼리 최적화)
├─ 손상 방지 (트랜잭션)
└─ 결과 반환
당신에게 책 반환 (결과 데이터)
🔗 관련 개념
다음 단계:
- 프로그램, 드라이버, 엔진의 관계 - 계층 구조 이해하기
- C 언어는 어떻게 실행될까? - 엔진이 C로 만들어진 이유
관련 포스트: