# MySQL 엔진 아키텍처

## MySQL 엔진 아키텍처

<img src="https://wiki.luigi99.cloud/uploads/images/gallery/2026-01/BOfzTFep6noBsQOs-image-1769398749956.png" width="50%">

- MySQL 서버는 사람의 머리 역할을 담당하는 **MySQL 엔진**과 손발 역할을 담당하는 **스토리지 엔진**으로 구분
- 스토리지 엔진의 **핸들러 API**를 만족하면 누구나 **스토리지 엔진을 구현해** MySQL 서버에 추가해서 사용 가능

---

## MySQL 엔진

- 클라이언트로부터의 접속 및 쿼리 요청을 처리하는 **커넥션 핸들러, SQL 파서, 전처리기, 옵티마이저**가 중심을 이룸
- 표준 SQL 문법을 지원해 **표준 문법**을 지켜 작성된 쿼리는 **타 DBMS와 호환**되어 실행 가능

---

## 스토리지 엔진

- 실제 데이터를 **디스크 스토리지에 저장**하거나 **데이터를 읽어오는 역할**을 수행
- MySQL 엔진은 하나만 사용할 수 있지만 **스토리지 엔진은 여러 개를 동시에 사용 가능**
- 다음 명령어를 통해 테이블에 사용할 스토리지 엔진을 지정할 수 있음

  ```mysql
  CREATE TABLE test_table (fd1 INT, fd2 INT) ENGINE=INNODB;
  ```

---

## 핸들러 API

- MySQL 엔진의 쿼리 실행기에서 **데이터를 쓰거나 읽을 때** 각 스토리지 엔진에 요청을 하는데 이를 **핸들러(Handler) 요청**으로 부름
- 핸들러 API를 통해 레코드 작업이 얼마나 수행됐는지 확인하는 명령어
  ```mysql
  SHOW GLOBAL STATUS LIKE 'Handler%';
  ```