MySQL Server의 구성
MySQL Architecture는 기본적으로 Server-Client 구조로 이루어져 있습니다.
MySQL Database가 Server의 역할을 수행하며, MySQL Server에 연결하는 Application을 Client라고 부릅니다. 이러한 MySQL Server는 크게 MySQL 엔진과 스토리지 엔진으로 구분할 수 있습니다.
이 중 MySQL 엔진의 경우 요청된 SQL 문장을 분석하거나 최적화하는 등 DBMS의 두뇌에 해당하는 역할을 수행하며, 스토리지 엔진은 실제 Data를 디스크 스토리지에 저장하거나 읽어오는 부분을 담당합니다.
이처럼 각각의 엔진의 역할이 극명하게 나뉘다 보니, 사용자의 요청을 처리하기 위한 엔진 간의 Data 요청 및 전송 과정은 필수 불가결합니다. MySQL에서는 이러한 요청을 Handler 요청이라고 부르며, 이때 사용되는 API를 Handler API라고 합니다. 즉, Handler API를 통해 MySQL 엔진과 스토리지 엔진은 Data를 주고 받습니다.
MySQL Engine
본 문서에서는 MySQL Server의 구성요소 중 하나인 MySQL 엔진에 대해 알아보도록 하겠습니다.
- MySQL 엔진은 Connection Handler와 SQL Interface, Parser 및 Query의 최적화된 실행을 위한 Optimizer 등으로 구성되어 있습니다.
- MySQL Server에서 스토리지 엔진은 동시에 여러 개를 사용할 수 있지만 MySQL 엔진은 단 하나만 사용할 수 있습니다.
Connection Pool Layer
Connection Pool은 MySQL Architecutre의 최상위 계층으로 Client의 Connection을 생성 및 관리하며 요청 Query를 처리합니다.
- 연결 처리
MySQL Server는 Client의 Connection 요청에 대해 Thread를 할당합니다. Client는 할당받은 Thread에서 Query를 수행합니다.
(Thread는 Server에 의해 캐시 되므로 새로운 Connection에 대하여 항상 생성할 필요는 없습니다.)
- 인증
MySQL Server는 Client가 연결될 때마다 Client의 호스트, 사용자 이름, 패스워드 등을 기반으로 인증을 수행합니다.
- 보안
MySQL Server에 Client가 성공적으로 연결되면 Server는 해당 Client가 특정 Query를 수행할 권한이 있는지 확인합니다.
SQL Interface
MySQL은 Command를 수신하고 Client에게 결과를 전송하는 Interface로 ANSI SQL 표준을 준수하며, 대부분의 ANSI 호환 Database Server의 SQL을 Interface로 사용합니다.
SQL Interface 구성요소는 DML, DDL, Stored Procedures, Views, Triggers 등이 있습니다.
Parser
사용자 요청 Query를 토큰(MySQL이 인식할 수 있는 최소 단위의 어휘나 기호)으로 분리, Tree 형태의 구조로 만들어 내는 작업을 의미합니다. 이 과정에서 Query의 문법 오류 발견 시 사용자에게 오류 메시지를 전달합니다.
Optimizer
사용자의 요청 Query를 얼마나 낮은 비용으로 효율적으로 처리할지를 결정하는 역할을 수행합니다. Query 재작성, 스캔 순서 조정 및 인덱스의 선택과 같은 작업을 수행합니다.
Cache & Buffers
Data 및 인덱스에 대해 빠르게 Read/Write 하기 위한 목적으로 사용되는 메모리 공간입니다. MyISAM의 Key Cache나 InnoDB의 Buffer Pool과 같은 보조 저장소를 이야기합니다.
기획 및 글 | 기술기획팀
이미지 제작 | 디자인그룹 이민석
'엑셈 경쟁력 > DB 인사이드' 카테고리의 다른 글
DB 인사이드 | MySQL Architecture - 3. Thread (0) | 2022.06.30 |
---|---|
DB 인사이드 | MySQL Architecture - 2. 스토리지 엔진 (0) | 2022.06.30 |
DB 인사이드 | PostgreSQL Vacuum - 6. Autovacuum (4) | 2022.04.29 |
DB 인사이드 | PostgreSQL Vacuum - 5. Manual Vacuum (0) | 2022.04.29 |
DB 인사이드 | PostgreSQL Vacuum - 4. Visibility Map (0) | 2022.04.29 |
댓글