Skip to content

banggeunho/mysql

Repository files navigation

MySQL 성능 최적화 마스터 과정

백엔드 시니어 개발자를 위한 체험형 MySQL 성능 최적화 학습 프로젝트

🎯 학습 목표

실제 대용량 데이터 환경에서 MySQL 성능 문제를 체험하고, 단계적으로 최적화 기법을 익혀 실무에서 바로 적용할 수 있는 능력을 기른다.

핵심 학습 내용

  • 점진적 성능 개선: 느린 상황부터 시작해서 단계적으로 최적화
  • Before/After 비교: 모든 최적화 기법의 정량적 성능 측정
  • 실무 시나리오: 실제 서비스에서 발생하는 문제 상황 재현
  • 고급 운영 기법: 백엔드 시니어가 알아야 할 MySQL 운영 노하우

📊 데이터 규모

  • 기본 학습: 100만 건 (빠른 테스트용)
  • 실전 체험: 500만 건 (실무 수준)
  • 심화 학습: 1,000만 건 (대용량 처리)

📋 학습 로드맵

Phase 1: 환경 구축 & MySQL 설정 마스터

  • Docker MySQL 8.0 환경 구축
  • InnoDB 엔진 파라미터 최적화
  • 문자셋/콜레이션 성능 영향 분석
  • 커넥션 풀 & 메모리 튜닝

Phase 2: 데이터 모델링 & 정규화/반정규화 ✅ 완료!

  • ✅ 3NF 정규화 vs 반정규화 완전한 성능 비교
  • ✅ 현실적 패턴의 대용량 테스트 데이터 생성 (100만~1000만 건)
  • ✅ 복잡한 JOIN 성능 문제 체험 및 해결
  • ✅ 집계 테이블, 트리거, 계산된 컬럼 활용 전략
  • ✅ 자동화된 성능 분석 및 리포트 생성

Phase 3: 인덱싱 최적화 마스터 ✅ 완료!

  • ✅ "느린 상황" 슬로우 쿼리 체험 (32가지 패턴, 자동 분석)
  • ✅ 다양한 인덱스 유형별 성능 비교 (단일/복합/커버링/함수형)
  • ✅ EXPLAIN 실행계획 분석 및 시각화 도구 (자동 채점 & 최적화 제안)
  • ✅ 고급 인덱싱 기법 (JSON 인덱스, 인덱스 힌트, 조건부 인덱스)
  • ✅ 종합 성능 분석 리포트 및 실무 적용 가이드

Phase 4: 실행계획 심화 분석 & 쿼리 최적화 ✅ 완료!

  • ✅ 윈도우 함수 최적화 (ROW_NUMBER, RANK, LAG/LEAD, 집계 함수)
  • ✅ 서브쿼리 vs JOIN 성능 비교 (EXISTS, IN, 상관 서브쿼리)
  • ✅ 통계 정보 관리 및 옵티마이저 힌트 활용
  • ✅ 옵티마이저 추적을 통한 내부 동작 분석
  • ✅ 통합 실행 도구 및 종합 가이드 제공

Phase 5: 동시성 제어 & 락 관리 ✅ 완료!

  • ✅ 트랜잭션 격리 수준별 락 동작 체험 (READ UNCOMMITTED ~ SERIALIZABLE)
  • ✅ 데드락 의도적 발생 및 자동 복구 메커니즘 분석
  • ✅ Gap Lock & Next-Key Lock 심화 분석 및 시각화
  • ✅ 애플리케이션 레벨 동시성 제어 (낙관적/비관적 락, 세마포어)

Phase 6: 고급 최적화 & 파티셔닝 ✅ 완료!

  • ✅ RANGE/LIST/HASH/KEY 파티셔닝 전략 및 성능 비교
  • ✅ 배치 처리 최적화 (LOAD DATA, bulk insert, 청크 처리)
  • ✅ 임시 테이블 vs 메모리 테이블 사용 전략
  • ✅ 프로시저 vs 애플리케이션 로직 성능 비교 분석

Phase 8: 확장성 & 아키텍처 패턴

  • 마스터-슬레이브 복제
  • 샤딩 전략 설계
  • 읽기 전용 복제본 활용
  • 캐시 계층 연동

Phase 9: 운영 & 백업/복원

  • 논리적/물리적 백업
  • 바이너리 로그 관리
  • 포인트-인-타임 복구
  • 디스크 I/O 최적화

Phase 10: 모니터링 & 알림 시스템

  • Performance Schema 활용
  • 실시간 모니터링 대시보드
  • 성능 지표 알림 설정
  • 장애 대응 자동화

Phase 11: 실전 시나리오 & 종합 테스트

  • 전자상거래 시뮬레이션
  • 대용량 트래픽 부하 테스트
  • 장애 시나리오 재현
  • 성능 최적화 종합 리포트

🏗️ 프로젝트 구조

mysql-performance-master/
├── README.md                      # 프로젝트 개요 및 가이드
├── docker/                        # Docker 환경 설정
│   ├── docker-compose.yml
│   └── mysql/
├── config/                        # MySQL 설정 파일
│   ├── my.cnf
│   └── optimization-configs/
├── schemas/                       # 데이터베이스 스키마
│   ├── normalized/
│   ├── denormalized/
│   └── partitioned/
├── scripts/                       # 데이터 생성 및 테스트
│   ├── data-generation/
│   ├── performance-testing/
│   └── monitoring/
├── examples/                      # 실습 예제
│   ├── indexing/
│   ├── normalization/
│   ├── concurrency/
│   └── partitioning/
├── docs/                          # 단계별 학습 가이드
│   ├── phase-01/ ~ phase-11/
│   └── troubleshooting/
├── monitoring/                    # 모니터링 도구
│   ├── dashboards/
│   └── alerts/
└── performance-tests/             # 성능 테스트 결과
    ├── benchmarks/
    └── reports/

🚀 Quick Start

1. 환경 구축

# 1. 프로젝트 클론/다운로드
cd mysql-performance-master

# 2. Docker MySQL 환경 시작
cd docker && docker-compose up -d

# 3. MySQL 연결 확인
mysql -h 127.0.0.1 -P 3306 -u root -p

2. 첫 번째 실습 시작

# Phase 1 가이드 확인
cat docs/phase-01/README.md

# 기본 테이블 생성
mysql -h 127.0.0.1 -P 3306 -u root -p < schemas/normalized/01-create-tables.sql

# 테스트 데이터 생성 (100만 건)
python scripts/data-generation/generate_users.py --count 1000000

📊 성능 측정 도구

모든 최적화 과정에서 정량적 성능 측정을 위한 도구들:

  • 쿼리 실행 시간 측정: 마이크로초 단위 정확한 측정
  • EXPLAIN 분석: 실행 계획 자동 분석
  • 슬로우 쿼리 로그: 자동 파싱 및 리포트 생성
  • 리소스 사용량: CPU, 메모리, I/O 모니터링
  • 동시성 테스트: 멀티 스레드 부하 테스트

🎓 학습 결과물

각 Phase 완료 시 생성되는 결과물:

  • ✅ 성능 측정 리포트 (Before/After 비교)
  • ✅ 최적화 적용 과정 문서
  • ✅ 실무 적용 체크리스트
  • ✅ 장애 대응 플레이북

📚 참고 자료

🤝 기여 및 피드백

학습 과정에서 발견한 개선사항이나 추가 시나리오 제안은 언제든 환영합니다!


Ready to become a MySQL Performance Master?

Phase 1부터 차근차근 시작해보세요! 👉 Phase 1 가이드

About

mysql 스터디 (Index, Partitioning, Lock, Deadlock, Sharding 등)

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors