데이터베이스 엔진이란?

한 문장 요약

데이터베이스 엔진 = 데이터를 저장하고 관리하고 처리하는 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엔진 (메모리)⚡⚡ 중간해석 오버헤드
애플리케이션앱 (네트워크)⚡ 느림전송 + 인터프리터

🛠️ 유명한 데이터베이스 엔진

엔진언어특징사용 사례
PostgreSQLC고급 기능, JSON 지원엔터프라이즈
MySQLC/C++빠르고 가벼움웹 애플리케이션
SQLiteC파일 기반, 초경량모바일, 임베디드
MongoDBC++문서형 DBNoSQL
RedisC메모리 기반 초고속캐싱, 세션

💡 핵심 개념

엔진 = 전문가 데이터 처리기

비유: 도서관의 사서

당신 (프로그램)
  ↓ "신청서" (SQL 쿼리)
사서 (데이터베이스 엔진)
  ├─ 책 위치 파악 (인덱싱)
  ├─ 빠르게 찾아주기 (쿼리 최적화)
  ├─ 손상 방지 (트랜잭션)
  └─ 결과 반환
당신에게 책 반환 (결과 데이터)

🔗 관련 개념

다음 단계:

관련 포스트: