MySQL 아키텍처
일반적으로 MySQL 서버와 통신을 할 때는 위와 같은 그림으로 동작합니다
웹 서버에서는 MySQL 서버와 통신하기 위한 컴포넌트인 커넥터를 사용합니다
커넥터는 MySQL 서버와의 연결을 설정하고, 쿼리 및 다른 데이터베이스 작업을 수행하기 위한 인터페이스를 제공하죠
그 대표적인 예시로 JDBC가 있습니다
MySQL 서버 아키테처를 이해하기 위해서는 주요한 컴포넌트들을 알아야 합니다.
이는 MySQL 엔진, 스토리지 엔진, 운영체제, 그리고 디스크로 구성되어 있습니다.
MySQL 엔진
MySQL 엔진은 쿼리 파서, 전처리기, 옵티마이저, 그리고 쿼리 실행기로 구성되어 있습니다.
쿼리 파서
쿼리 파서는 사용자로부터 입력 받은 SQL을 파싱하여 Syntax tree를 생성합니다
이 과정에서 문법 오류 검사가 이루어집니다.
쿼리 파서의 역할은 컴파일 과정과 유사하지만, SQL은 컴파일 타임에서 검증할 수 없으므로 매번 쿼리 실행 시 구문 평가를 수행합니다.
전처리기
전처리기는 쿼리 파서에서 만든 트리를 바탕으로 전처리 작업을 시작합니다.
이 단계에서는 테이블이나 컬럼의 존재 여부, 접근 권한 등을 확인하여 semantic 오류를 검사합니다.
옵티마이저
옵티마이저는 쿼리를 처리하기 위한 가장 효율적인 방법을 결정합니다.
이를 위해 여러 전략을 만들고, 각 전략의 비용 정보와 테이블의 통계 정보를 이용하여 최적의 실행 계획을 수립합니다.
옵티마이저가 결정하는 전략에 따라 쿼리의 성능이 크게 달라질 수 있습니다.
그러나 개발자로서는 항상 옵티마이저의 판단을 믿을 수는 없으며, 때로는 직접 튜닝이 필요할 수 있습니다.
쿼리 실행기
쿼리 실행기는 옵티마이저가 결정한 실행 계획을 바탕으로 실제 쿼리를 실행합니다.
이 과정에서 핸들러 API를 통해 스토리지 엔진에게 데이터 요청을 전달합니다.
스토리지 엔진
스토리지 엔진은 디스크에서 데이터를 가져오거나 저장하는 역할을 합니다.
MySQL의 스토리지 엔진은 플러그인 형태로 제공되며, 핸들러 API를 충족시키는 방식으로 직접 구현하여 사용할 수 있습니다.
대표적으로 InnoDB와 MyISAM 엔진이 있지만, MySQL 8.0부터는 InnoDB 엔진이 기본적으로 사용됩니다.
InnoDB
InnoDB는 트랜잭션 안정성을 보장하는 ACID(원자성, 일관성, 고립성, 지속성)를 지원하는 스토리지 엔진입니다.
또한, 행 수준 잠금 및 외래 키 제약 조건을 지원하여 높은 동시성을 제공합니다.
그리고 데이터를 디스크에 쓸 때는 일관성있는 상태로 유지하기 위해 로그를 먼저 기록하는 Write-Ahead Logging (WAL) 방식을 사용합니다.
MyISAM
MyISAM은 트랜잭션을 지원하지 않는 스토리지 엔진으로, 풀 테이블 잠금 방식을 사용합니다.
이로 인해 동시성이 낮지만, 대용량 데이터를 빠르게 읽을 수 있어서 읽기 중심의 작업에 적합합니다.
그러나 데이터의 무결성이 중요한 경우나, 데이터의 변경이 빈번한 경우에는 InnoDB 엔진이 더 적합합니다.
운영체제
운영체제는 MySQL 서버와 스토리지 엔진이 디스크와 통신하는 방법을 관리합니다.
이는 파일 시스템, 디스크 I/O, 네트워크, 메모리 관리 등 다양한 작업을 수행합니다.
부족한 점이나 잘못 된 점을 알려주시면 시정하겠습니다 :>
'DEV > Backend' 카테고리의 다른 글
정규화 (0) | 2023.06.01 |
---|---|
소프트 파싱과 하드 파싱 (0) | 2023.06.01 |
대용량 시스템 아키텍처 (0) | 2023.06.01 |
서버의 스케일 업과 스케일 아웃 (0) | 2023.06.01 |
Session 개요 with Spring (1) | 2023.05.25 |