Markdown Converter
Agent skill for markdown-converter
> 이 문서는 Claude가 동일한 MySQL 성능 최적화 학습 프로젝트를 재현할 수 있도록 하는 상세한 가이드입니다.
Sign in to like and favorite skills
이 문서는 Claude가 동일한 MySQL 성능 최적화 학습 프로젝트를 재현할 수 있도록 하는 상세한 가이드입니다.
각 Phase의
docs/phase-XX/README.md 작성 시 반드시 다음 내용을 포함해야 합니다:
예시 (Phase 5 - 동시성 제어):
## 트랜잭션 격리 수준이란? ### 왜 필요한가? 동시에 여러 사용자가 같은 데이터를 읽고 쓸 때 발생하는 문제를 제어합니다. 예를 들어, 쇼핑몰에서 재고가 1개 남은 상품을 두 명이 동시에 구매하려 할 때... ### 실무 사례: 은행 송금 시스템 A가 B에게 100만원을 송금하는 도중 C가 A의 잔액을 조회하면? - READ UNCOMMITTED: 송금 중간 상태(잔액 감소)가 보임 → Dirty Read - READ COMMITTED: 송금 완료 전까지 이전 잔액이 보임 - REPEATABLE READ: 트랜잭션 시작 시점의 잔액이 계속 보임 - SERIALIZABLE: 송금이 완료될 때까지 조회 대기 ### 안티패턴: SERIALIZABLE 남용 "안전하니까 모든 트랜잭션에 SERIALIZABLE 적용" → 결과: 동시성 처리량 90% 감소, 데드락 빈발 → 해결: 대부분 READ COMMITTED로 충분, 필요한 곳만 락 명시적 사용
작업 완료 후 반드시 다음 검증을 수행해야 합니다:
# 각 Phase의 SQL 파일을 실제로 실행하여 검증 docker exec mysql-performance-master mysql -u root -p[PASSWORD] < schemas/phase-XX/파일명.sql # 에러 없이 실행되는지 확인 echo $? # 0이면 성공
# 각 스크립트가 실제로 동작하는지 확인 bash scripts/phase-XX/스크립트명.sh
information_schema.innodb_locks → MySQL 8.0에서 performance_schema.data_locks로 변경됨information_schema.innodb_lock_waits → performance_schema.data_lock_waits로 변경됨DEFAULT 값 사용 불가CURDATE(), NOW() 등 비결정적 함수 사용 불가LIMIT/OFFSET에 표현식 직접 사용 불가 (Prepared Statement 필요)date +%s.%N 미지원 (python3 time.time() 사용)paste -sd, 동작 다름 (for 루프로 대체)# Phase 1-6 전체 스키마 검증 for phase in 01 02 03 04 05 06; do for sql in schemas/phase-${phase}/*.sql; do echo "Testing: $sql" docker exec -i mysql-performance-master mysql -u root -p[PASSWORD] < "$sql" 2>&1 | grep -i error done done
"docker로 mysql 띄우고, mysql로 대용량 데이터를 핸들링하는 법을 학습할거야" 추가 요구사항: - 스텝별로 느린 것도 확인하면서 점차 개선하는 걸 보고 싶어 - 예를 들면 인덱스를 활용하기 전/후 비교 - 실행계획 학습, 옵티마이저 컨트롤 - 락이 걸리는 부분, 락을 해결하는 법 - 데드락이 걸리는 시연 해결하는 법 - 인덱스로만 해결되지 않는 부분은 어떻게 해결하는지 - 모니터링은 어떻게 하는지 등등 순차적으로 배우고 싶어 - 세세하게 학습 가이드와 스크립트를 작성해줘 - 백엔드 시니어 개발자로서 더 알아야 되는 부분 있으면 컨텐츠 추가 - mysql 설정에 관련한 컨텐츠도 있으면 좋을 것 같아(파라미터 라던가, 문자열 셋이라던가, 그리고 튜닝 가능한 부분 등등) - 정규화에 대한 한계와 반정규화로 성능을 끌어올리는 예시도 있으면 좋을 것 같아
mysql-performance-master/ ├── README.md # 프로젝트 개요 및 전체 가이드 ├── QUICK_START.md # 5분 빠른 시작 가이드 ├── CLAUDE.md # 프로젝트 재현 가이드 (이 파일) ├── docker/ # Docker 환경 설정 │ ├── docker-compose.yml # MySQL + 모니터링 스택 ├── config/ # MySQL 설정 파일 │ ├── my.cnf # 마스터 서버 최적화 설정 │ └── my-slave.cnf # 슬레이브 서버 설정 ├── schemas/ # 데이터베이스 스키마 │ ├── init/ # 초기화 SQL │ ├── normalized/ # 3NF 정규화 스키마 │ ├── denormalized/ # 반정규화 스키마 │ └── partitioned/ # 파티션 테이블 스키마 ├── scripts/ # 실행 스크립트 │ ├── phase-01/ # Phase별 스크립트 │ ├── data-generation/ # 대용량 데이터 생성 │ ├── performance-testing/ # 성능 테스트 도구 │ └── monitoring/ # 모니터링 스크립트 ├── examples/ # 실습 예제 │ ├── charset-collation/ # 문자셋 성능 비교 │ ├── connection-tuning/ # 커넥션 풀 튜닝 │ ├── indexing/ # 인덱싱 최적화 │ ├── normalization/ # 정규화 vs 반정규화 │ ├── concurrency/ # 동시성 제어 │ └── partitioning/ # 파티셔닝 전략 ├── docs/ # 단계별 학습 가이드 │ ├── phase-01/ ~ phase-11/ # 각 Phase별 상세 가이드 │ └── troubleshooting/ # 문제 해결 가이드 ├── monitoring/ # 모니터링 설정 │ ├── prometheus/ # Prometheus 설정 │ └── grafana/ # Grafana 대시보드 └── performance-tests/ # 성능 테스트 결과 ├── benchmarks/ # 벤치마크 결과 └── reports/ # 성능 분석 리포트
목표: 성능 최적화를 위한 완벽한 테스트 환경 구축
주요 구성요소:
핵심 파일:
docker/docker-compose.yml: 전체 스택 구성config/my.cnf: 성능 최적화된 MySQL 설정examples/charset-collation/charset-performance-test.sql: 문자셋 성능 비교scripts/phase-01/test-environment.sh: 환경 검증 스크립트목표: 정규화와 반정규화의 성능 차이 체험
주요 학습:
핵심 파일:
schemas/normalized/01-create-tables.sql: 완전 정규화 스키마schemas/denormalized/01-create-tables.sql: 성능 최적화 반정규화 스키마목표: 인덱스 없는 상황부터 시작해 점진적 성능 개선
체험 시나리오:
목표: 다양한 인덱싱 기법과 성능 최적화
주요 기법:
목표: 락 문제 체험과 해결 방법 학습
핵심 파일:
schemas/phase-05/01-transaction-isolation-locks.sql: 격리 수준별 락 동작schemas/phase-05/02-deadlock-demonstration-resolution.sql: 데드락 시연 및 해결schemas/phase-05/03-gap-lock-next-key-analysis.sql: Gap Lock 분석schemas/phase-05/04-application-level-concurrency.sql: 앱 레벨 동시성 제어실습 시나리오:
목표: 인덱스로 해결되지 않는 문제의 고급 해결책
핵심 파일:
schemas/phase-06/01-partitioning-strategies.sql: 파티셔닝 전략schemas/phase-06/02-batch-processing.sql: 배치 처리 최적화schemas/phase-06/03-temp-memory-tables.sql: 임시/메모리 테이블schemas/phase-06/04-procedure-vs-application.sql: 프로시저 vs 앱 로직고급 기법:
목표: 추가 고급 최적화 기법
목표: 대용량 트래픽 처리를 위한 확장 전략
확장 기법:
목표: 실무 운영 필수 기술
운영 기술:
목표: 실시간 성능 모니터링과 장애 대응
모니터링 시스템:
목표: 실제 서비스 수준의 성능 테스트
종합 시나리오:
학습 단계별 데이터 볼륨:
주요 테이블 구성:
# 메모리 설정 innodb_buffer_pool_size = 1G # 전체 RAM의 70-80% innodb_log_buffer_size = 64M innodb_log_file_size = 256M # I/O 최적화 innodb_flush_log_at_trx_commit = 2 # 성능 vs 안정성 균형 innodb_flush_method = O_DIRECT innodb_file_per_table = 1 # 동시성 설정 innodb_thread_concurrency = 0 # 자동 조정 innodb_read_io_threads = 8 innodb_write_io_threads = 8
# 슬로우 쿼리 로그 slow_query_log = 1 long_query_time = 0.1 log_queries_not_using_indexes = 1 # Performance Schema performance_schema = 1 performance-schema-instrument = 'statement/%=ON'
-- 실행 시간 측정 SET @start_time = NOW(6); [테스트 쿼리] SET @end_time = NOW(6); SELECT TIMESTAMPDIFF(MICROSECOND, @start_time, @end_time) / 1000 as execution_time_ms; -- 리소스 사용량 측정 SELECT * FROM performance_schema.memory_summary_global_by_event_name;
-- 상세 실행계획 EXPLAIN FORMAT=JSON [쿼리]; -- 비용 분석 SELECT * FROM performance_schema.events_statements_history_long WHERE SQL_TEXT LIKE '%your_query%';
-- 동일한 조건에서 재측정 -- 개선율 계산: ((old_time - new_time) / old_time) * 100
# 1. 프로젝트 디렉토리 생성 mkdir mysql-performance-master && cd mysql-performance-master # 2. 필수 디렉토리 구조 생성 mkdir -p {docker,config,schemas/{init,normalized,denormalized,partitioned},scripts/{phase-01,data-generation,performance-testing,monitoring},examples/{charset-collation,connection-tuning,indexing,normalization,concurrency,partitioning},docs/{phase-01,phase-02,phase-03,phase-04,phase-05,phase-06,phase-07,phase-08,phase-09,phase-10,phase-11},monitoring/{prometheus,grafana/provisioning},performance-tests/{benchmarks,reports}} # 3. 핵심 파일 작성 (이 가이드 참조) # - docker/docker-compose.yml # - config/my.cnf # - schemas/init/01-create-databases.sql # - scripts/phase-01/test-environment.sh # - README.md, QUICK_START.md # 4. 환경 시작 cd docker && docker-compose up -d
이 가이드를 따라 구현하면 동일한 수준의 MySQL 성능 최적화 학습 환경을 구축할 수 있습니다. 각 Phase는 독립적으로도 활용 가능하며, 전체 과정을 통해 체계적인 MySQL 마스터가 될 수 있습니다.
각 Phase 작업 완료 시 아래 항목을 모두 확인해야 합니다:
# Phase X: [제목] ## 🎯 학습 목표 [이 Phase에서 달성하고자 하는 구체적인 목표] ## 📚 핵심 개념 ### [개념 1]: [제목] #### 왜 필요한가? [비즈니스/기술적 필요성 설명] #### MySQL 내부 동작 원리 [InnoDB 엔진 수준의 동작 설명] #### 실무 사례 **사례 1: [서비스명] - [상황]** - 문제: [구체적인 문제 상황] - 원인: [기술적 원인 분석] - 해결: [적용한 해결책] - 결과: [정량적 개선 수치] **사례 2: ...** #### 안티패턴 ❌ **[잘못된 패턴]** - 증상: [어떤 문제가 발생하는가] - 원인: [왜 문제가 되는가] - 해결: [올바른 방법] ### [개념 2]: ... ## 🔧 실습 가이드 ### Step 1: [제목] ```sql [실행할 SQL]
예상 결과: [예상되는 출력 또는 결과]
| 시나리오 | Before | After | 개선율 |
|---|---|---|---|
| [시나리오1] | Xms | Yms | Z% |
A: [답변]
해결: [해결 방법]
--- ## 🔄 작업 흐름 요약
undefined