MySQL 엔진 아키텍처

Yong Lee·2025년 8월 12일

1. MySQL의 전체 구조

┌─────────────────────────┐
│    Programming API      │
│  (CLI, Web, App Server) │
└───────────┬─────────────┘
            │  SQL Query
            ▼
┌─────────────────────────┐
│   Connection Layer      │
│  - Connection Handler   │
│  - 인증 (User/Password)  │
│  - SSL 처리              │
└───────────┬─────────────┘
            ▼
┌─────────────────────────┐
│   SQL Layer (Server)    │
│  - SQL Parser (구문 분석) │
│  - Optimizer (최적화기)   │
│  - Query Cache (캐시)    │
│  - Executor (실행기)      │
└───────────┬─────────────┘
            ▼
┌─────────────────────────┐
│  Storage Engine Layer   │
│  - InnoDB (기본)         │
│  - MyISAM               │
│  - Memory, CSV, etc.    │
└───────────┬─────────────┘
            ▼
┌─────────────────────────┐
│ Physical Data Storage   │
│  - 데이터 파일(.ibd, .frm) │
│  - 로그 파일              │
│  - 인덱스 파일             │
└─────────────────────────┘

2. 엔진

Java, Python 등 다양한 프로그래밍 언어에서 MySQL을 쉽게 사용할 수 있습니다.
MySQL은 각 언어에 맞는 드라이버(Connector)를 제공하여, 개발자가 MySQL 서버에 연결하고 쿼리를 실행할 수 있도록 지원합니다.

MySQL 서버는 크게 MySQL 엔진과 스토리지 엔진으로 구분하는데, 주로 이 둘을 합쳐서 MySQL 서버라고 합니다.

MySQL 엔진

데이터를 실제로 저장하고 읽는 방법을 결정하는 핵심 모듈입니다.
SQL 문장을 해석하고 실행하는 MySQL 서버의 SQL Layer가 있고, 이 SQL Layer 밑에서 실제 데이터를 다루는 부분이 바로 스토리지 엔진(Storage Engine)입니다.

MySQL 엔진이 하는 일:

  • SQL 파싱: 쿼리를 해석해서 어떤 작업인지 파악
  • 쿼리 최적화: 인덱스 사용 여부, 조인 방식 결정
  • 캐시 관리: 자주 쓰는 쿼리 결과를 메모리에 저장
  • 스토리지 엔진 요청: 데이터 읽기/쓰기 작업을 해당 스토리지 엔진에 위임

스토리지 엔진

스토리지 엔진은 실제 데이터를 디스크 스토리지에 저장하거나 디스크 스토리지로부터 데이터를 읽어오는 부분을 전담하고 있습니다.
MySQL 엔진은 서버에서 하나만 있지만, 스포리지 엔진은 여러 개를 동시에 사용할 수 있습니다.

-- InnoDB 엔진을 사용하는 테이블
CREATE TABLE users (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(50)
) ENGINE=InnoDB;

-- MyISAM 엔진을 사용하는 테이블
CREATE TABLE logs (
    id INT PRIMARY KEY AUTO_INCREMENT,
    log_text TEXT
) ENGINE=MyISAM;

-- MEMORY 엔진을 사용하는 테이블
CREATE TABLE session_cache (
    session_id VARCHAR(255) PRIMARY KEY,
    data TEXT
) ENGINE=MEMORY;

이처럼 테이블별로 어떤 엔진을 쓸지 골라서 사용가능합니다.
그럼 이렇게 했을 때의 장점은 무엇일까요?

  • 트랜잭션이 필요한 데이터 → InnoDB
  • 읽기 전용 로그 → MyISAM (읽기 속도 빠름)
  • 빠른 임시 데이터 저장 → MEMORY
  • CSV로 쉽게 내보내고 싶은 데이터 → CSV 엔진

아래는 엔진별로 특징을 구분해봤으며 사용자가 직접 엔진을 추가할 수 있습니다.

엔진특징
InnoDB트랜잭션 지원, 외래키 지원, 현재 MySQL 기본값
MyISAM트랜잭션 미지원, 읽기 속도 빠름
MEMORY메모리에 데이터 저장, 재시작 시 데이터 소멸
CSVCSV 파일로 데이터 저장, 엑셀 호환 용이
ARCHIVE압축 저장, 대량의 로그/히스토리 보관
FEDERATED원격 MySQL 서버의 테이블에 연결
BLACKHOLE데이터를 버리는 엔진(로그만 남김)
profile
오늘은 어떤 새로운 것이 나를 즐겁게 할까?

0개의 댓글