MySQL 8.0은 이전 버전 대비 성능, 보안, 관리 편의성 전반에서 큰 폭으로 발전한 메이저 업그레이드입니다. 데이터베이스를 운영하거나 개발하는 분들이 반드시 알아야 할 핵심 신규 기능을 아래에서 정리했습니다.
트랜잭션 기반 데이터 딕셔너리(Transaction Data Dictionary)
MySQL 8.0부터는 테이블, 스키마 등 데이터베이스 객체에 대한 정보를 저장하는 트랜잭션 방식의 데이터 딕셔너리가 도입되었습니다. 기존에는 FRM 파일 등 파일 시스템에 분산 저장되던 메타데이터가 이제 InnoDB 테이블로 통합 관리되어, 충돌 상황에서도 원자성과 일관성이 보장됩니다.
원자적 DDL(Atomic Data Definition Language)
DDL 문장이 원자적으로 처리됩니다. CREATE TABLE, DROP TABLE 같은 데이터 정의문 실행 시 데이터 딕셔너리 업데이트, 스토리지 엔진 작업, 바이너리 로그 기록이 하나의 트랜잭션으로 묶입니다. 덕분에 서버 장애가 발생해도 부분적으로만 적용된 불완전한 객체가 남지 않아 안정성이 크게 향상되었습니다.
강화된 보안 및 계정 관리
보안 수준이 한층 강화되었으며, DBA(데이터베이스 관리자)에게 더 유연한 계정 관리 기능이 제공됩니다. 역할(Role) 기반 권한 관리, 다중 인증 플러그인 지원, 비밀번호 만료 정책 설정 등 세밀한 접근 제어가 가능해졌습니다.
글로벌 암호화 기본값 지원
테이블 암호화를 위한 암호화 기본값이 전역적으로 정의·구현되었습니다. default_table_encryption 변수를 사용하면 새로 생성되는 스키마에 대한 암호화 기본값을 지정할 수 있으며, 스키마 생성 시 DEFAULT ENCRYPTION 절을 통해 해당 스키마의 기본 암호화 여부를 명시적으로 설정할 수도 있습니다.
InnoDB 엔진 개선 사항
InnoDB 엔진에는 중요한 변화가 있습니다. 자동 증가(auto-increment) 카운터의 현재 최대값이 값이 변경될 때마다 리두 로그(redo log)에 기록됩니다. 이전 버전에서는 서버 재시작 시 카운터 값이 초기화되어 중복 키 오류가 발생할 수 있었지만, 이제는 재시작 후에도 정확한 값을 유지합니다.
JSON 기능 향상
MySQL의 JSON 처리 기능도 크게 개선되었습니다. 인라인 경로 연산자인 ->>(언래핑 연산자)가 추가되어 JSON 컬럼에서 값을 더 간결하게 추출할 수 있습니다. 또한 JSON 배열 병합, JSON_TABLE 함수 등 다양한 유틸리티가 함께 도입되었습니다.
InnoDB 병렬 읽기 및 CHECK TABLE 성능 향상
새 버전의 InnoDB는 클러스터형 인덱스(clustered index)에 대한 병렬 읽기를 지원하여 CHECK TABLE 성능을 크게 향상시킵니다. 단, 이 기능은 보조 인덱스(secondary index) 스캔에는 적용되지 않습니다.
innodb_dedicated_server 자동 구성 개선
최신 버전에서 innodb_dedicated_server 변수를 활성화하면, 로그 파일의 크기와 개수가 자동으로 구성된 버퍼 풀(buffer pool) 크기를 기준으로 결정됩니다. 이전에는 감지 가능한 서버 메모리 양에 따라 로그 파일 크기만 조정되었고, 로그 파일 개수는 자동으로 구성되지 않았습니다.
마무리
MySQL 8.0은 데이터 딕셔너리 통합, 원자적 DDL, 강화된 보안과 암호화, InnoDB와 JSON 기능 개선까지 폭넓은 변화를 담고 있습니다. 업그레이드를 고려하고 있다면 위 기능들을 충분히 검토한 후 마이그레이션 계획을 세우시길 권장합니다.