패스트캠퍼스 데브캠프 : 남궁성의 백엔드 개발 3기

대용량 처리를 위한 MySQL 이해 | MySQL

Tech_JINI 2025. 4. 28. 16:10

https://db-engines.com/en/ranking

 

DB-Engines Ranking

Popularity ranking of database management systems.

db-engines.com

웹 백엔드 개발을 하다 보면 대부분의 데이터는 관계형 데이터베이스에 저장하게 된다.
그중에서도 MySQL은 가장 많이 사용되는 오픈소스 관계형 DB다.

그래서 이번 글에서는 내가 강의를 들으면서 정리한 MySQL의 핵심 구조와 작동 방식을 쉽고 간단하게 풀어보려고 한다.

 


1. 왜 MySQL인가?

  • 가장 인기 있는 오픈소스 관계형 데이터베이스 (DB-Engines 기준 상위권)
  • 접근성과 학습 비용이 낮고, 무료로 사용할 수 있음
  • SQL 표준을 비교적 잘 따르기 때문에 다른 DB와도 큰 차이가 없다.

 

 

2. 웹의 흐름과 MySQL의 역할

데이터베이스는 파일을 관리하는 서버이다.

 

서버-> MySQL Connector -> MySQL 서버

 

클라이언트는 json을 통해 서버에게 데이터를 달라고 요청

서버는 SQL을 통해서 MySQL서버에게 데이터를 요청

 

3. MySQL 서버 내부 구성

✅ MySQL 엔진 - 뇌 역할

  1. 쿼리 파서 (Parser)
    • SQL 문장을 구조화(Syntax Tree)해서 이해할 수 있게 만듦
    • 문법 오류도 이 단계에서 체크
  2. 전처리기 (Preprocessor)
    • 테이블이나 컬럼이 실제로 존재하는지 확인
    • 권한은 있는지, 의미상 문제가 없는지 체크 (Semantic 검사)

🧠 이 두 단계는 프로그래밍 언어의 컴파일러 전처리 단계와 비슷해!

    3. 옵티마이저 (Optimizer)

  • SQL을 처리하는 여러 방법 중에서 **가장 빠를 것 같은 계획(실행 계획)**을 선택
  • 통계 정보, 테이블 구조, 인덱스 등을 활용해서 결정

“어느 테이블부터 먼저 읽을까?”, “필요 없는 조건은 빼자” 같은 고민을 하는 단계

  • 때로는 옵티마이저가 판단을 잘못할 수도 있어서, 개발자가 힌트를 줘야 할 때도 있다

 

 

 

4. 쿼리 실행기 (Executor)

  • 옵티마이저가 고른 계획대로 실제 데이터를 요청하는 단계
  • 스토리지 엔진에 ‘데이터 줘!’ 하고 요청

 

쿼리실행기: 옵티마이저가 결정한 계획대로 스토리지 엔진에 요청하는 역할

 

핸들러 요청: 스토리지 엔진에 요청을 하는 것.

이 핸들러 API를 만족하는 스토리지 엔진을 만들기만 하면, 직접 구현하여 추가해서 사용 할 수 있다.

 

 

쿼리 캐시가 주는 인사이트

 

4. 쿼리 캐시 vs 소프트 파싱

과거 MySQL 5.x에서는 쿼리 캐시라는 기능이 있었다.

  • 동일한 SQL이 들어오면 결과를 캐시에서 바로 리턴했다
  • 빠르긴 한데, 테이블의 데이터가 바뀌면 캐시도 무조건 갱신해야 해서 관리 비용이 컸다
  • 그래서 MySQL 8.0부터는 쿼리 캐시 기능이 완전히 사라짐

🧠 참고로 Oracle은 소프트 파싱이라는 비슷하지만 다른 방식으로 최적화를 한다:

  • SQL 자체가 아닌 실행 계획만 캐싱
  • 성능은 좋지만, 데이터는 매번 새로 읽기 때문에 캐시 관리가 훨씬 간단함

→ 결국, 캐시는 빠르지만 관리가 어렵고,
도입 시엔 항상 트레이드오프를 고려해야 한다.

 

 

스토리지 엔진

✅ 스토리지 엔진 - 손과 발 역할

  • 실제로 디스크에서 데이터를 읽거나 저장하는 일을 담당
  • 플러그인 형태로 존재해서 교체 가능 (핸들러 API만 맞추면 됨)
  • 대표적인 스토리지 엔진:
    • InnoDB: MySQL 8.0 이상에서 기본값, 트랜잭션 지원
    • MyISAM: 과거 많이 사용됐지만 지금은 거의 안 씀

 

5. 다시 정리하면...


개념 역할
MySQL 엔진 SQL을 분석하고 실행 계획을 세움
스토리지 엔진 실제로 데이터를 읽고 저장
옵티마이저 가장 효율적인 쿼리 실행 방법 결정
쿼리 캐시 동일 SQL 요청 시, 결과를 바로 리턴하는 기능 (MySQL 5까지)
소프트 파싱 (Oracle) 실행 계획만 캐싱, 데이터는 새로 가져옴

✨ 마무리

MySQL은 단순히 데이터를 보관하는 창고가 아니다.
SQL을 해석하고, 계획을 세우고, 최적의 방법으로 데이터를 찾아주는 지능형 시스템이디.