[기초]MySQL = "생각하는 부분(MySQL 엔진)" + "움직이는 부분(스토리지 엔진)"
마치 자동차의 내비게이션(경로 계산) 과 실제 엔진(주행) 이 분리된 것처럼, SQL 분석·최적화와 실제 데이터 읽기·쓰기를 분리해서 설계했다. 덕분에 창고 직원(스토리지 엔진)만 교체해도 나머지 시스템은 그대로 돌아간다.
[기초]| 용어 | 한 줄 풀이 | 비유 |
|---|---|---|
| 스토리지 엔진 | 실제 데이터를 디스크에 저장하고 꺼내는 모듈 | 창고 직원 |
| InnoDB | MySQL 기본 스토리지 엔진. 트랜잭션 지원 | 꼼꼼한 창고 직원 (영수증 꼭 씀) |
| MyISAM | 오래된 스토리지 엔진. 빠르지만 트랜잭션 없음 | 빠른데 영수증 안 쓰는 직원 |
| 옵티마이저 | 쿼리를 가장 빠르게 실행할 방법을 계획하는 모듈 | 내비게이션 경로 계산 |
| 파서(Parser) | SQL 문장을 문법적으로 분석해 트리 구조로 변환하는 모듈 | 문장을 주어·동사로 쪼개는 국어 선생님 |
| 파스 트리 | SQL 문장을 컴퓨터가 이해하는 트리 구조로 바꾼 것 | 문장을 단어·문법으로 쪼갠 구조도 |
| 전처리기 | 파스 트리를 보고 테이블·컬럼 존재 여부 등을 확인하는 모듈 | 주문서에 있는 메뉴가 실제 메뉴판에 있는지 확인하는 직원 |
| 핸들러 API | MySQL 엔진과 스토리지 엔진이 대화하는 규격 | USB 규격 (이 규격만 맞으면 어떤 기기든 연결) |
| 버퍼 풀 | 디스크에서 읽은 데이터를 메모리에 캐시해두는 공간 | 책상 위에 꺼내둔 자주 쓰는 책 모음 |
| 트랜잭션 | 여러 작업을 하나로 묶어서 전부 성공 or 전부 실패시키는 것 | 계좌이체 (출금·입금이 하나의 묶음) |
| MVCC | 읽기와 쓰기가 서로 안 막히도록 버전을 여러 개 유지하는 기술 | 구글 독스 편집 중에도 다른 사람이 이전 버전 열람 가능 |
| 카디널리티 | 컬럼에 얼마나 다양한 값이 있는지 나타내는 수치 | 성별(2가지) vs 주민번호(수백만 가지) |
| 실행 계획 | 옵티마이저가 쿼리를 어떻게 실행할지 정한 계획서 | 요리 레시피 |
| 인덱스 | 데이터를 빠르게 찾기 위한 색인 | 책 뒤의 찾아보기 페이지 |
| 포그라운드 스레드 | 클라이언트 요청을 직접 처리하는 스레드 | 고객 응대하는 홀 직원 |
| 백그라운드 스레드 | 내부 작업(로그 기록, 데이터 플러시 등)을 처리하는 스레드 | 창고 정리·재고 보충하는 뒷방 직원 |
| OOM | Out of Memory. 메모리 부족으로 프로세스가 강제 종료되는 상황 | 책상이 꽉 차서 새 책을 올려놓을 수 없는 상황 |
| EXPLAIN | 쿼리의 실행 계획을 보여주는 MySQL 명령어 | 내비게이션 경로 미리보기 |
| 플러시(Flush) | 메모리에 있는 데이터를 디스크에 실제로 기록하는 것 | 임시 메모를 공식 문서에 옮겨 적기 |
| Redo Log | 장애 발생 시 복구를 위한 변경 내역 기록 파일 | 블랙박스 영상 |
| 쿼리 캐시 | 동일 SQL의 결과를 메모리에 저장해두던 기능 (8.0에서 제거) | 같은 주문이 오면 이미 만든 음식을 그냥 주는 것 |
[기초] [면접]손님 (클라이언트)
└─ "스테이크 미디엄으로 주세요" (SQL 쿼리 전송)
웨이터 (커넥션 핸들러)
└─ 주문을 받아서 주방에 전달
주방장 (옵티마이저)
└─ 어느 재료를 먼저 꺼내고, 어느 순서로 요리할지 결정 (실행 계획 수립)
요리사 (실행 엔진)
└─ 주방장 지시대로 실제 요리 진행
창고 직원 (스토리지 엔진: InnoDB / MyISAM 등)
└─ 실제 냉장고(디스크)에서 재료를 꺼내거나 집어넣음

MySQL은 크게 두 레이어로 나뉜다.
MySQL 엔진: SQL을 받아서 처리하는 두뇌 역할. 파서 → 전처리기 → 옵티마이저 → 실행 엔진 순서로 동작한다. SQL을 어떻게 실행할지 결정하지만, 실제로 데이터를 건드리지는 않는다.
스토리지 엔진: 실제로 데이터를 읽고 쓰는 손발 역할. InnoDB, MyISAM 등 여러 종류가 있으며, 테이블 단위로 다르게 선택할 수 있다.
교체 가능성이 핵심이다. 두 레이어 사이에 핸들러 API라는 규격이 있어서, 이 규격만 맞추면 누구나 새로운 스토리지 엔진을 만들어 꽂을 수 있다. MySQL 코어(엔진)를 전혀 건드리지 않고 저장 방식만 교체할 수 있다.