💡 핵심 인사이트
스토리지 엔진은 데이터베이스의 겉모습(SQL 파싱, 최적화) 뒤에 숨어서 **"실제 데이터를 하드 디스크에 어떻게 저장하고, 어떻게 불러올 것인가?"**를 전담하는 심장부이자 핵심 모듈입니다.
MySQL은 '플러그인 아키텍처'를 통해 용도에 따라 InnoDB(트랜잭션/안정성)나 MyISAM(빠른 단순 읽기) 등 다양한 스토리지 엔진을 골라 끼워 쓸 수 있습니다.
Ⅰ. DBMS 아키텍처 내 스토리지 엔진의 위치
DBMS는 크게 두 개의 뇌로 나뉩니다. 하나는 명령을 해석하는 **'데이터베이스 엔진(SQL 엔진)'**이고, 다른 하나는 창고 관리를 담당하는 **'스토리지 엔진'**입니다.
[ MySQL 아키텍처 예시 ]
┌──────────────────────────────────────────────┐
│ 클라이언트 │
└──────────────────────┬───────────────────────┘
▼ (SQL 쿼리)
┌──────────────────────────────────────────────┐
│ [ 데이터베이스 엔진 (MySQL 서버) ] │
│ - 파서(Parser): 문법 검사 │
│ - 옵티마이저(Optimizer): 최적 실행계획 수립 │
└──────────────────────┬───────────────────────┘
▼ (핸들러 API)
┌──────────────────────────────────────────────┐
│ [ 스토리지 엔진 (Pluggable Storage Engine) ] │◀─ 이 테이블은 InnoDB로!
│ ┌──────────┐ ┌──────────┐ ┌─────────────┐ │◀─ 저 테이블은 MyISAM으로!
│ │ InnoDB │ │ MyISAM │ │ Memory │ │
│ └──────────┘ └──────────┘ └─────────────┘ │
└──────────────────────┬───────────────────────┘
▼
[ 물리적 디스크 (Data Files) ]
개발자가 SELECT 쿼리를 날리면 DB 엔진이 이를 해석한 뒤, "스토리지 엔진아, 이 조건에 맞는 데이터 좀 디스크에서 가져와!"라고 지시(핸들러 API 호출)합니다.
Ⅱ. 대표적인 스토리지 엔진 비교 (MySQL 중심)
MySQL은 테이블을 생성할 때 ENGINE=InnoDB처럼 스토리지 엔진을 지정할 수 있습니다. 각 엔진은 데이터를 저장하는 방식과 잠금(Lock)의 범위가 완전히 다릅니다.
1. InnoDB (현재의 표준 및 기본 엔진)
- 핵심 키워드: 트랜잭션(ACID) 지원, 행 단위 잠금(Row-level Lock), 복구 능력.
- 특징:
- 결제 시스템이나 게시판처럼 삽입, 수정, 삭제가 빈번하게 일어나는 서비스에 필수적입니다.
- 하나의 데이터를 수정할 때 테이블 전체를 잠그지 않고 해당 줄(Row)만 잠가서 동시성 처리 성능이 뛰어납니다.
- 외래키(Foreign Key)를 지원하며, 시스템이 뻗어도 로그를 통해 데이터를 복구(Crash Recovery)할 수 있습니다.
- 용도: 일반적인 거의 모든 웹/앱 서비스의 기본 테이블.
2. MyISAM (과거의 영광)
- 핵심 키워드: 단순성, 빠른 읽기 속도, 테이블 단위 잠금(Table-level Lock).
- 특징:
- 트랜잭션을 지원하지 않습니다. (작업 중 오류가 나도 롤백이 안 됨).
- 데이터를 수정할 때 테이블 전체에 락을 걸어버리기 때문에, 동시 접속자가 글을 쓰면 대기(병목) 현상이 심하게 발생합니다.
- 대신 트랜잭션 처리를 위한 오버헤드가 없어서
SELECT(조회) 속도가 극단적으로 빠릅니다.
- 용도: 과거 블로그의 조회수 높은 정적 페이지, 로그 수집 테이블 (현재는 대부분 InnoDB로 대체됨).
3. Memory (HEAP) 엔진
- 데이터를 디스크가 아닌 메모리(RAM)에만 저장하는 해시 인덱스 기반 엔진입니다. 재부팅 시 데이터가 날아가므로 임시 캐시나 세션 관리용 테이블로 씁니다.
📢 섹션 요약 비유: DB 엔진이 고객의 주문을 받는 레스토랑의 홀 매니저라면, 스토리지 엔진은 주방장입니다. 손님이 빠른 패스트푸드를 원하면 'MyISAM 주방장'이 요리하고, 절대 실수가 있어서는 안 되는 정통 코스 요리를 원하면 'InnoDB 주방장'이 요리하게끔 식당 시스템을 구축한 것입니다.