MySQL 데이터베이스 엔진(스토리지 엔진)이란?
스토리지 엔진(storage engine)은 데이터베이스 관리 시스템(DBMS)이 데이터베이스에 저장된 데이터를 생성(Create), 읽기(Read), 갱신(Update)할 때 실제로 사용하는 핵심 소프트웨어 모듈입니다. 같은 MySQL 서버라도 어떤 스토리지 엔진을 선택하느냐에 따라 트랜잭션 처리 방식, 잠금(locking) 단위, 인덱스 구조 등 데이터 처리 방식이 크게 달라집니다.
현재 MySQL 최신 버전의 기본(default) 스토리지 엔진은 InnoDB입니다. InnoDB는 ACID 트랜잭션, 행 수준 잠금(row-level locking), 외래 키(foreign key) 제약 조건을 지원하기 때문에 대부분의 일반적인 웹 애플리케이션과 서비스에 가장 널리 사용됩니다.
SHOW ENGINES 명령어로 지원 엔진 목록 확인하기
MySQL 서버가 지원하는 스토리지 엔진의 전체 목록은 SHOW ENGINES 명령어 한 줄로 간단히 확인할 수 있습니다.
mysql> SHOW ENGINES;
실행 결과는 다음과 같습니다.
| Engine | Support | Comment | Transactions | XA | Savepoints |
|---|---|---|---|---|---|
| MEMORY | YES | 해시 기반, 메모리에 저장되며 임시 테이블에 유용 | NO | NO | NO |
| MRG_MYISAM | YES | 동일한 구조의 MyISAM 테이블들을 하나로 묶은 컬렉션 | NO | NO | NO |
| CSV | YES | CSV 형식으로 데이터를 저장하는 스토리지 엔진 | NO | NO | NO |
| FEDERATED | NO | 원격 MySQL 서버의 테이블에 접근하는 연합(Federated) 엔진 | NULL | NULL | NULL |
| PERFORMANCE_SCHEMA | YES | 서버 성능 정보를 수집하는 Performance Schema | NO | NO | NO |
| MyISAM | YES | MyISAM 스토리지 엔진 | NO | NO | NO |
| InnoDB | DEFAULT | 트랜잭션, 행 수준 잠금, 외래 키 지원 | YES | YES | YES |
| BLACKHOLE | YES | /dev/null 엔진 (입력된 모든 데이터가 사라짐) | NO | NO | NO |
| ARCHIVE | YES | 데이터 보관용 아카이브 스토리지 엔진 | NO | NO | NO |
9 rows in set (0.04 sec)
결과 컬럼 의미
- Support: 해당 엔진의 지원 여부 (YES / NO / DEFAULT)
- Transactions: 트랜잭션 지원 여부
- XA: 분산 트랜잭션(XA 프로토콜) 지원 여부
- Savepoints: 세이브포인트(트랜잭션 내 부분 롤백 지점) 지원 여부
주요 스토리지 엔진 특징
- InnoDB: 트랜잭션과 외래 키를 지원하며 충돌 없는 동시성 처리에 강점이 있어 기본 엔진으로 채택되었습니다.
- MyISAM: 과거의 기본 엔진으로, 읽기 위주 작업에서 빠르지만 트랜잭션을 지원하지 않습니다.
- MEMORY: 데이터를 메모리에만 저장해 속도가 매우 빠르지만, 서버 재시작 시 데이터가 사라집니다.
- CSV: 테이블 데이터를 CSV 파일로 저장하여 스프레드시트 등 외부 도구와의 데이터 교환에 유용합니다.
- ARCHIVE: 로그처럼 삽입 후 거의 조회하지 않는 대량 데이터를 압축 저장하는 데 적합합니다.
- BLACKHOLE: 입력된 데이터를 모두 버리는 엔진으로, 주로 복제(replication) 테스트나 필터링 용도로 활용됩니다.
이처럼 MySQL은 다양한 스토리지 엔진을 제공하며, 애플리케이션의 요구 사항(트랜잭션 필요 여부, 읽기/쓰기 비율, 데이터 보관 기간 등)에 맞는 엔진을 선택하는 것이 중요합니다.