본문 바로가기
데이터베이스

MySQL 아키텍처 및 특징 - Scale Out, Sharding(샤딩)

by Data Lib 2023. 11. 8.

이번 포스팅에서는 데이터베이스 종류 시리즈 두번째 MySQL에 대해 알아보도록 하겠습니다. MySQL을 처음 사용하게 된것은 내 개인 홈페이지 데이터베이스였든데요. 그 시점에 오라클은 뭔가 무겁고 가벼운 데이터베이스가 필요했습니다. 그러다 MySQL이 가장 적합한 데이터베이스라는 것을 알게 되었습니다. 그럼 MySQL 출현 배경과 아키텍처, 특징에 대해 살펴보도록 할까요. 
 

 

MySQL이란?

MySQL의 출발은 오픈소스 데이터베이스였습니다. 어느 순간 세상에서 많이 사용하는 인기있는 플랫폼이 되자 오라클에서 정식으로 인수하게 됩니다. 표준 데이터베이스 언어인 SQL(Structured Query Language)을 사용하는 오픈소스 RDBMS가 등장하게 되었던 겁니다. 한때는 Oracle, MS SQL Server와 같이 3대 DBMS를 차지했죠.

 

1. 등장 배경

웹(web)이 출현하면서 작은 기업, 개인 등 다양한 Data Size를 가진 주체들이 시장에 참여하게 되었습니다. 그러면서 기존 DBMS(오라클 등) 가격적 부담스러움을 느끼고 있었죠. 그런데 무료이고 오픈소스이면서 성능도 괜찮은 데이터베이스, 바로 MySQL의 수요가 올라가게 된것입니다. 

2. MySQL 라이센스 정책 

MySQL의 라이선스 정책은 두가지가 있습니다. MySQL 엔터프라이즈 버전이라고 유료버전이고 최신 패치 적용 및 지원을 우선적으로 해줍니다. 또 한가지는 MySQL 커뮤니티 버전으로 무료 버전입니다. 
 

MySQL 아키텍처

MySQL Server 내부 모듈은 컴포넌트 형태로 구성되어 있습니다. 여러 기능들이 퍼즐 형식으로 존재한다고 생각하면 됩니다. 퍼즐이라는 말은 다른 스토리지 엔진을 추가하거나 기능을 추가 할 때 다른 모듈에 크게 영향을 주지 않는다는 점이 유리합니다. 
 
MySQL은 크게 MySQL 엔진과 스토리지 엔진으로 구분됩니다. 둘을 합쳐 MySQL Server라고 표현합니다. MySQL 구조내 “Pluggable Storage Engine”으로 성격이 다른 아키텍처를 엔진을 선택하여 사용할 수 있습니다. 각 엔진은 테이블 별로 처리하는 방법이 다른게 특징입니다. 
 

MySQL 아키텍처
MySQL 아키텍처

 

1. MySQL 엔진

클라이언트로부터 접속 및 쿼리 요청을 처리하는 커넥션 핸들러, SQL파서, 전처리기, 옵티마이저 등의 역할을 합니다. DBMS의 두뇌 역할이라고 생각하면 됩니다. 

2. 스토리지 엔진

실제 데이터를 디스크 스토리지에 저장하거나 디스크 스토리지로 부터 데이터를 읽어 오는 역할을 합니다. MySQL 엔진은 하나지만 스토리지 엔진은 여러 개를 동시에 사용할 수 있습니다. 
 

Scale Up vs Sacle OutSharding(샤딩)
Scale Up vs Sacle Out, Sharding

 

Scale Up & Scale Out 가능

1. Scale Up

  • 스케일 업은 Cpu, 메모리, Disk 등의 사양을 늘리는 방식을 말합니다.
  • 예를 들어, Cpu 4 Core, Mem 16G에서 Cpu 8 Core, Mem 64G로 성능을 높이는 방식을 말합니다.
  • 이런 방식은 보통 하나의 서버로 운영할 때 사용하며, 사양 변경을 위한 다운타임을 가져가야 합니다.  

2. Sacle Out

  • 스케일 아웃은 서버를 수평적으로 늘리는 방식입니다.
  • 예를 들어, Cpu 4 Core, Mem 16G의 서버에 추가적으로 동일한 사양의 서버를 붙이는 방식입니다.
  • 이 방식은 다운타임이 없이 가능하며 함수, 컬럼, 로우를 공유하여 사용할 수 있습니다.

Sharding(샤딩)

Sharding이라는 용어를 접했을 때 생소했는데요. 금방 연상되는게 데이터베이스 Partition이었습니다. 개념 자체는 비슷한데 목적이 다릅니다. 데이터베이스에서 파티션키가 있듯이 데이터를 어떻게 분할 할지 결정할 때 샤드 키(Shard Key)를 사용합니다.

 

샤드키(Shard key)는 컬럼으로 구성되고 어떤 샤드에 저장할지 결정합니다. 예를 들어, UID를 이용하여 10000~20000 사용자는 첫번째에, 20001~40000은 두번째 Shard에 저장하는 방법이다. 그 외에도 지역 코드 또는 날짜와 같은 컬럼을 이용할 수 있습니다.

Sharding의 특징 및 사용 목적

  1. 분산 처리 효과로 더 많은 데이터 쓰기를 처리함
  2. 단일 서버에 적합하지 않은 대용량 데이터 세트 처리에 유리함
  3. 작은 인덱스 크기, 작은 작업 크기로 성능 향상

마지막으로 MySQL의 장단점에 대해 정리해 보겠습니다.

장점

  • 오픈소스 라이선스는 무료 또는 상대적으로 저렴. 단, 상업용으로 사용시 엔터프라이즈 라이선스 구입 필요
  • 타 DBMS에 비해 고사양을 요구하지 않음
  • 웹 환경에 맞게 커스터마이징 가능함
  • Scale Out(시스템확장)에 유리

단점

  • 대용량 배치 작업 성능이 좋지 못함
  • 분석 함수 등 지원 미흡
  • 서브쿼리가 지원되지 않음 (4.1 버전 이상부터 지원)
  • 실시간 백업이 안됨. 단, 복제(Replication) 기능으로 복원 가능