모종닷컴

MySQL 플러그인 스토리지 엔진 모델 본문

Programming/데이터베이스

MySQL 플러그인 스토리지 엔진 모델

모종 2022. 7. 23. 22:53
반응형

플러그인 스토리지 엔진 모델

MySQL에서 쿼리가 실행되는 과정을 본다면 거의 대부분의 작업이 MySQL 엔진에서 처리되고, 마지막 '데이터 읽기/쓰기' 작업만 스토리지 엔진에 의해 처리된다. 

MySQL 에는 이미 기본적으로 많은 스토리지 엔진을 지니고 있다. 하지만 수많은 사용자의 요구 조건을 만족시키기 위해 기본적으로 제공되는 스토리지 엔진 이외에 부가적인 기능을 더 제공하는 스토리지 엔진이 필요할 수 있기에, 사용자가 직접 스토리지 엔진을 개발하는 것(=플러그인)도 가능하다. 

플러그인해서 사용할 수 있는 것이 스토리지 엔진만은 아니다. 검색어 파서도 플러그인 형태로 개발해서 사용할 수 있으며, 사용자의 인증을 위한 플러그인도 있다.

모든 쿼리 작업에 스토리지 엔진 모델이 적용되지는 않는다.

MySQL 에서 MyISAM이나 InnoDB 와 같이 다른 스토리지 엔진을 사용하는 테이블에 대해 쿼리를 실행하더라도 MySQL 의 처리 내용은 대부분 동일하며 단순히 '데이터 읽기/쓰기' 영역의 처리만 차이가 있을 뿐이다. 실질적인 GROUP BY나 ORDER BY  등 복잡한 처리는 스토리지 엔진 영역이 아니라 MySQL 엔진의 처리 영역인 쿼리 실행기에서 처리된다.

하나의 쿼리 작업은 여러 작업으로 나뉘는데, 각 하위 작업이 MySQL 엔진 영역에서 처리되는지 아니면 스토리지 엔진 영역에서 처리되는지 구분할 줄 알아야 한다.

MySQL 서버에서 지원되는 스토리지 엔진 종류

MySQL 서버에서 지원되는 스토리지 엔진을 보기 위해서 아래 명령어를 입력해볼 수 있다.

SHOW ENGINES;

show engines 결과

컬럼 중에서 Support 에 대해서 설명하면 다음과 같다

  • YES : MySQL 서버에 해당 스토리지 엔진이 포함돼 있고, 사용 가능으로 활성화된 상태
  • DEFAULT :  'YES'와 동일한 상태이지만 필수 스토리지 엔진임을 의미한다 (스토리지 엔진이 없으면 MySQL이 시작되지 않을 수도 있음)
  • NO : 현재의 MySQL 서버에 스토리지 엔진이 포함되지 않았음을 의미
  • DISABLED : 현재 MySQL 서버에 스토리지 엔진이 포함됐지만 파라미터에 의해 비활성화된 상태

MySQL 서버에 포함되지 않은 스토리지 엔진(Support 칼럼이 NO)을 사용하려면 MySQL 서버를 다시 컴파일해야 한다. 하지만 서버가 적절히 준비만 돼 있다면 플러그인 형태로 빌드된 스토리지 엔진 라이브러리를 다운로드해서 끼워 넣기만 하면 사용할 수 있다. 또한 플러그인 형태의 스토리지 엔진은 손쉽게 업그레이드할 수 있다.  

플러그인 목록

스토리지 엔진뿐만 아니라 모든 플러그인의 내용은 다음의 명령어로 확인할 수 있다.

스토리지 엔진 뿐만 아니라 타입이 다른 것도 보인다.

위에서 잠시 언급했듯이 MySQL 서버에서는 스토리지 엔진뿐만 아니라 다양한 기능을 플러그인 형태로 지원한다. 인증이나 전문 검색 파서 또는 쿼리 재작성과 같은 플러그인이 있으며, 비밀번호 검증과 커넥션 제어 등에 관련된 다양한 플러그인이 제공된다. 

플러그인 아키텍처의 단점

MySQL 8.0 부터는 기존의 플러그인 아키텍처를 대체하기 위해 컴포넌트 아키텍처가 지원된다. 그렇다면 플러그인 아키텍처의 단점이 무엇일까?

  • 플러그인은 오직 MySQL 서버와 인터페이스할 수 있고, 플러그인끼리는 통신할 수 없음
  • 플러그인은 MySQL 서버의 변수나 함수를 직접 호출하기 때문에 안전하지 않음 
  • 플러그인은 상호 의존 관계를 설정할 수 없어서 초기화가 어렵다
반응형

'Programming > 데이터베이스' 카테고리의 다른 글

MySQL InnoDB 스토리지 엔진 (1)  (0) 2022.07.30
MySQL 쿼리 실행 구조  (0) 2022.07.25
MySQL 메모리 할당 및 사용 구조  (0) 2022.07.22
MySQL 스레딩 구조  (0) 2022.07.19
MySQL 아키텍처  (0) 2022.07.19