logo

Week 4

인덱스 / EXPLAIN

2026-06-27 (토) · 미션 공개 + 주간 방향

쿼리 어디갔니 🔍

지난 주 돌아보기 — Week 3 이력서

항목 결과
제출률 {{N}}/{{M}} 명
잘된 점 본인 PR 수치를 그대로 bullet 에 박은 학생 다수
아쉬운 점 서사 가 짧고 감정 만 있는 케이스
이번 주 가져갈 것 수치는 측정 도구 에서 오고, 본인이 측정 해야 함

05-week4-index

  • type: code
  • 마감: 2026-07-03 (금) 23:59
  • 검증: PR → mission-guard CI → AI 리뷰
  • 통과 조건: before/after EXPLAIN + latency 비교표 모두 제출

"인덱스 = 책의 목차. 없으면 전체 를 다 봐야 한다."

비유 — 전화번호부

  • 이름 없이 1만 명 중 "김철수" = 풀스캔 (10,000회)
  • 이름 가나다 정렬 책에서 찾기 = 인덱스 스캔 (~14회)

인덱스 = 미리 정렬 해둔 빠른 길.

이번 주 목표 🎯

  1. EXPLAIN 으로 쿼리 플랜 읽기type / key / rows 3 컬럼만
  2. 인덱스 적용 전후 latency 측정 — 수치 1개 이상 (hey / curl + time / k6)
  3. before/after 비교표 작성 — 같은 쿼리·같은 데이터로

EXPLAIN 출력 — 3 컬럼만 보면 OK

EXPLAIN SELECT * FROM post WHERE user_id = 5;
type key rows
ALL null 100,000

→ 풀스캔. 인덱스 없음.

type key rows
ref idx_user 23

→ 인덱스 적중.

인덱스 추가하기

CREATE INDEX idx_user ON post(user_id);
✅ 같은 쿼리 → rows 100,000 → 23
✅ latency 800ms → 50ms (-94%)
한 줄 명령. 마이그레이션 스크립트로 관리.

함정 — 인덱스가 안 타는 케이스

  • 컬럼 가공: WHERE YEAR(created_at) = 2026 (인덱스 무시)
  • LIKE 앞쪽 와일드카드: WHERE name LIKE '%kim'
  • OR 조건: WHERE a=1 OR b=2 (둘 다 인덱스 없으면 풀스캔)
  • 데이터 카디널리티 낮음: WHERE deleted=0 (대부분 0)
  • 옵티마이저 판단 으로 풀스캔 선택 (소량 테이블)

인덱스가 존재 한다 ≠ 인덱스가 쓰인다. EXPLAIN 으로 확인.

이번 주 제출할 것 📦

05-week4-index/
├── report.md
├── project/                       # Spring Boot baseline + 인덱스
└── evidence/
    ├── seed-data.sql              # 10만 row 시드
    ├── measure.sh                 # 측정 스크립트
    ├── before-explain.txt         # 인덱스 전 EXPLAIN
    ├── after-explain.txt          # 인덱스 후 EXPLAIN
    └── latency-comparison.md      # 표 형식 비교

평가는 어떻게 (5축) 📊

가중 핵심
요구사항 충족 ★★ EXPLAIN before/after 모두
구조 인덱스 명명 / 마이그레이션
기술 적용 ★★ 인덱스 선택 근거
검증 근거 ★★★ 수치 비교표 — p95 또는 평균
설명력 ★★ EXPLAIN 결과를 말로 설명

Week 4 부터 검증 근거 품질 가중 ↑↑. before/after 표 + 재현 명령 없으면 5점 불가.

측정 도구 — 본인 선택

각 도구 trade-off:

도구 장점 단점
curl + time 가장 단순 1 회 측정만
hey 동시 요청 + 분포 추가 설치
k6 시나리오 + p95/p99 학습 곡선
JMeter GUI / 무거운 시나리오 설치 + 무거움

sample 은 hey 사용. 본인이 다른 도구 골라도 OK — 선택 근거 만 evidence 에.

이번 주 일정 📅

  • 제출 마감: 2026-07-03 (금) 23:59
  • 토 15:00–16:30: 격주 강의 — 인덱스 / EXPLAIN 깊게
  • 오피스아워: 화·목 21:00 {cohort}-질문 스레드
  • PR 알림: {cohort}-리뷰 채널 자동

질문 ㄱㄱ ❓

이번 주 = "본인 코드의 SQL 을 _직접_ 측정"
다음 면접 답변 = "p95 800ms → 50ms (-94%)"

오늘 15:00 — 슬로우 쿼리 사례 5선 (퀴즈 형식).