20강 / 20강

알고리즘 고르기 — 느릴 때 무엇을 먼저 볼까

측정 · 병목 · 처방, 그리고 전 19강의 정리

알고리즘 고르기 — 느릴 때 무엇을 먼저 볼까
가장 좋은 알고리즘은 없습니다. 이 문제, 이 데이터 크기에 맞는 알고리즘이 있을 뿐이에요.

드디어 마지막 강입니다. 지금까지 배운 것을 현장에서 쓰는 순서로 정리해 봅시다.

"사이트가 느려요"라는 신고를 받았습니다. 무엇부터 해야 할까요?

어디를 고칠지 잘못 고르면 노력이 통째로 낭비됩니다.
Python 브라우저에서 실행

느릴 때 확인하는 순서

#확인발견되면관련 강
1어느 요청이 느린가 (p95·p99 로그)범위를 좁힌다19강
2DB 쿼리가 몇 번 나가는가N+1 문제 → 딕셔너리로 합치기8강
3조회 컬럼에 인덱스가 있는가Full Scan O(n) → 인덱스 O(log n)5강
4같은 계산을 반복하는가캐시 · 메모이제이션13·16강
5이중 반복문이 있는가O(n²) → 해시나 정렬로 낮추기3·6·8강
6전부 정렬하고 앞 몇 개만 쓰는가힙 Top-N10강
7대기열이 계속 쌓이는가처리기 증설 · 유입 제한11·17강

위에서부터 순서대로 보세요. 대부분 3번 안에 답이 나옵니다.

병목 진단기 — 증상을 고르면 처방과 관련 강의를 알려 줍니다
불러오는 중…

자료·연산별 도구 요약표

하고 싶은 일도구비용강
열쇠 하나로 정확히 찾기딕셔너리 · 집합O(1)8
정렬된 데이터에서 찾기이진 탐색 · DB 인덱스O(log n)5
조건이 복잡한 검색선형 탐색 · 검색 엔진O(n)4
순서대로 나열sorted(key=…)O(n log n)6·7
합계 · 평균 · 개수한 번 훑기 · CounterO(n)10
상위 N개만heapq.nlargestO(n log k)10
명단 겹치기 · 빼기집합 연산O(n+m)9
순서대로 처리dequeO(1)11
급한 것 먼저 처리heapq 우선순위 큐O(log n)11
빠른 근사 최적탐욕O(n log n)12
정확한 최적동적 계획법O(n·m)13
N단계 이내 연결 찾기BFSO(V+E)15
최소 비용 경로다익스트라O(E log V)15
같은 계산 반복 줄이기LRU 캐시O(1)16
과부하 막기토큰 버킷O(1)17
이상 징후 찾기규칙 점수 · Z-점수O(n)18
정답은 상황에 따라 다릅니다. 그 '상황'을 판단하는 법이 이 강의의 결론이에요.
Python 브라우저에서 실행

서버를 키우는 것과 알고리즘을 고치는 것

서버 증설알고리즘 개선
효과대개 2~4배때로 1,000배 이상
비용매달 계속 나감한 번 고치면 끝
데이터가 10배 되면또 증설해야 함O(log n)이면 거의 그대로
적합한 경우이미 효율적인데 양이 많을 때복잡도가 잘못 골라졌을 때

O(n²)를 서버로 해결하려는 것이 가장 흔하고 가장 비싼 실수입니다. 데이터가 10배가 되면 100배 느려지는데, 서버를 100대로 늘릴 수는 없으니까요.

🤔 확인 문제
전체 실행 시간의 5%를 차지하는 부분을 100배 빠르게 만들면 전체는?
🤔 확인 문제
데이터가 10배 늘 때마다 서버를 증설하는 것으로 해결되지 않는 경우는?
🤔 확인 문제
알고리즘을 고를 때 가장 먼저 생각해야 할 것은?