저는 RealMySQL 을 공부하기 이전까지 MySQL 에서 엔진이 사용된다고 하는데, 그게 도대체 무엇인지 몰랐습니다.
매번 MyISAM, InnoDB 라고 하는데, 도대체 이게 무엇인지 전혀 모르겠었습니다.
하지만, 이번에 스터디를 통해 공부를 해보며, 이에 대한 개념이 어느정도 확립될 수 있었습니다.
먼저 이를 알아보기 위해서 MySQL 의 구조에 대해서 알아보아야 할 것 같습니다.
MySQL 서버의 전체 구조는 위와 같습니다.
프로그래밍 API 가 MySQL 서버를 호출하면 커넥션 핸들러가 커넥션을 매핑해주고, 해당 API 에 따라 맞게 동작을 수행해줍니다.
그에서 MySQL 에 머리라고 할 수 있는 MySQL 엔진이 있을 것 같습니다.
이는, 실제로 SQL 을 파싱하여 이해하고, 또한 쿼리 계획을 최적화합니다.
그리고 스토리지 엔진 API 가 있는 것을 확인할 수 있습니다.
InnoDB, MyISAM, MEMORY 엔진등이 있죠.
이는 어떤 작동을 할까요?
스토리지 엔진은 보시는 바와 같이 MySQL 서버의 끝단에 있습니다.
데이터 파일과 맞닿아 있죠.
MySQL 엔진이 뇌 역할을 한다면, 스토리지 엔진은 실제로 손과 발의 역할을 해주는 것입니다.
데이터에 접근할 수 있게끔 해주는 것이죠.
그렇기 때문에, MySQL 은 스토리지 엔진을 커스터마이징 할 수 있게끔 많이 도와줍니다.
플러그인, 컴포넌트, 스토리지 엔진까지 말이죠.
또한 이는 실제로 민감한 정보들을 관리하는 MySQL 을 건드리지 못하게 하고, 가장 끝단만 유저가 커스터 마이징 할 수 있게끔 하여, 자유도는 높이되 안정성마저 그대로 두는 방법입니다.
아주 똑똑한 방법을 택했다고 할 수 있어요.
MySQL 은 위 3개의 스토리지 엔진 (실제로는 더 많겠지만, 대표적인) 에서 InnoDB 를 최근에 많이 사용하고 있습니다.
그것은 아래 InnoDB 가 가지고 있는 특징과 연관이 있는데요!
InnoDB 는 높은 동시성을 제공합니다.
일관된 읽기를 진행하기 위해서 사용하는 언두 로그, 리두 로그, 버퍼 풀 등등
락을 걸지 않고 동시성을 보장할 수 있게끔 하는 방법과, 또한 지연된 쓰기 연산을 하기 위한 방법, 또한 캐싱을 효율적으로 수행해주죠.
또한 다른 스토리지 엔진이 가지지 못하고 있는 레코드 락이라는 개념또한 가지고 있기 때문에, 사용하지 않을 수 없는 스토리지 엔진이라서 사용하고 있는 것 같습니다.
여러분들.. InnoDB 공부 많이 하십쇼!
다른 스토리지 엔진들은 많이 사용되지 않는 것 같습니다...
InnoDB 공부많이 하겠습니다~!ㅎㅎ