#성능

17 편의 글

파이썬 서버가 느릴 때: py-spy로 5분 안에 병목 찾기
5 분 소요

파이썬 서버가 느릴 때: py-spy로 5분 안에 병목 찾기

운영 중인 파이썬 프로세스에 코드 수정·재시작 없이 붙는 샘플링 프로파일러 py-spy 사용법을 정리합니다. dump로 멈춘 프로세스의 정체 확인, top으로 실시간 병목 관찰, record와 플레임그래프, --idle로 보는 off-CPU 대기, GIL 관점의 해석, 컨테이너에서 쓰는 법까지 다룹니다.

CDN이 속도를 높이는 방법: 캐시 히트부터 동적 콘텐츠까지
5 분 소요

CDN이 속도를 높이는 방법: 캐시 히트부터 동적 콘텐츠까지

실무자 관점에서 CDN의 동작을 정리합니다. 거리(RTT)를 줄이는 엣지 구조, 캐시 히트율을 결정하는 Cache-Control과 캐시 키, 무효화와 배포 전략, 캐시가 안 되는 동적 콘텐츠까지 CDN이 돕는 방식(TLS 종료·커넥션 재사용), 그리고 히트율을 갉아먹는 흔한 실수들을 다룹니다.

Redis가 빠른 이유: 메모리, 단일 스레드, 자료구조
5 분 소요

Redis가 빠른 이유: 메모리, 단일 스레드, 자료구조

Redis가 초당 수십만 요청을 처리하는 구조적 이유를 정리합니다. 디스크 없는 메모리 접근, 락이 필요 없는 단일 스레드 이벤트 루프, 목적에 맞게 구현된 자료구조라는 세 기둥과, 단일 스레드의 함정(느린 명령이 전체를 막는 구조), 그리고 Redis가 느려지는 경우까지 다룹니다.

데이터베이스 인덱스가 하는 일: B-tree, 조회 비용, 쓰기의 대가
5 분 소요

데이터베이스 인덱스가 하는 일: B-tree, 조회 비용, 쓰기의 대가

인덱스가 조회를 빠르게 만드는 원리를 B-tree 구조에서 풀어냅니다. 풀 스캔과의 비용 차이, 복합 인덱스와 컬럼 순서, 인덱스가 공짜가 아닌 이유(쓰기 비용·저장 공간), 어떤 컬럼에 인덱스를 만들고 어떤 컬럼에는 만들지 않는지의 실무 기준까지 정리합니다.

REST API가 느릴 때: 병목을 찾는 순서
5 분 소요

REST API가 느릴 때: 병목을 찾는 순서

API 응답이 느릴 때 감이 아니라 순서로 병목을 찾는 방법을 정리합니다. 어디가 느린지 구간부터 쪼개는 계측, 데이터베이스, 직렬화, 외부 호출, N+1이라는 단골 병목 4곳, 캐싱과 페이지네이션 같은 처방의 우선순위, 그리고 p50이 아니라 p99를 봐야 하는 이유까지 다룹니다.

Load Average의 정체: CPU 사용률과 다른 점
4 분 소요

Load Average의 정체: CPU 사용률과 다른 점

리눅스 지표 중 가장 자주 오독되는 Load Average를 정확히 읽는 법을 정리합니다. 실행 중+실행 대기+디스크 대기(D 상태)를 합친 숫자라는 정의, 코어 수로 나눠 읽는 기준, CPU 사용률과 어긋나는 네 가지 전형 사례, 1·5·15분 세 값의 추세 독법까지 다룹니다.

서버가 느린 이유 #5 데이터베이스가 느려질 때: 인덱스, 락, 커넥션 풀
6 분 소요

서버가 느린 이유 #5 데이터베이스가 느려질 때: 인덱스, 락, 커넥션 풀

잘 돌던 데이터베이스가 느려지는 원인을 추적합니다. 데이터 성장이 임계를 넘는 순간 무너지는 풀 스캔, 인덱스가 있는데도 사용되지 않는 조건, 락 대기 체인과 긴 트랜잭션, 커넥션 풀 고갈의 증상 구분, EXPLAIN과 통계 뷰로 확인하는 진단 순서를 다룹니다.

서버가 느린 이유 #4 대역폭은 충분한데 느릴 때: 지연시간, RTT, 재전송
5 분 소요

서버가 느린 이유 #4 대역폭은 충분한데 느릴 때: 지연시간, RTT, 재전송

회선 대역폭은 남는데 네트워크가 느린 상황의 원인을 추적합니다. RTT와 왕복 횟수가 체감 속도를 정하는 구조, TCP 핸드셰이크와 TLS의 왕복 비용, BDP와 윈도우 한계, 패킷 손실과 재전송 확인법, 커넥션 재사용까지 다룹니다.

서버가 느린 이유 #3 SSD인데도 느릴 때: 쓰기 증폭, fsync, 큐 깊이
6 분 소요

서버가 느린 이유 #3 SSD인데도 느릴 때: 쓰기 증폭, fsync, 큐 깊이

SSD를 썼는데도 디스크가 병목인 상황의 원인을 추적합니다. 스펙시트 IOPS의 전제 조건, fsync가 만드는 내구성 쓰기의 비용, SLC 캐시 소진과 쓰기 증폭, 큐 깊이 1의 물리적 한계, 클라우드 볼륨의 IOPS 상한까지 다룹니다.

서버가 느린 이유 #2 메모리를 늘려도 빨라지지 않을 때: 페이지 캐시, 스왑, 워킹셋
6 분 소요

서버가 느린 이유 #2 메모리를 늘려도 빨라지지 않을 때: 페이지 캐시, 스왑, 워킹셋

메모리를 증설했는데 성능이 그대로인 상황의 원인을 추적합니다. 페이지 캐시와 available의 의미, 남는 메모리가 이미 캐시로 일하고 있는 구조, 스왑과 swappiness, 워킹셋 크기 판단, 컨테이너 메모리 한도와 애플리케이션 힙 설정까지 다룹니다.

서버가 느린 이유 #1 CPU 사용률은 낮은데 느릴 때: run queue, I/O wait, 락 경합
6 분 소요

서버가 느린 이유 #1 CPU 사용률은 낮은데 느릴 때: run queue, I/O wait, 락 경합

CPU 사용률이 낮은데도 서버가 느린 상황의 원인을 추적합니다. run queue와 스케줄링 지연, I/O wait의 함정, 락 경합과 off-CPU 대기, 클라우드의 스틸 타임까지, 사용률 그래프가 놓치는 대기 시간을 찾는 진단 순서를 다룹니다.

앵귤러 고급 강좌 #7 성능 튜닝 — Virtual Scroll, Image, Profiler
12 분 소요

앵귤러 고급 강좌 #7 성능 튜닝 — Virtual Scroll, Image, Profiler

앵귤러 앱의 성능을 빌드, 런타임 변경 감지, 자원 세 layer로 나눠서 정리합니다. Virtual Scroll과 NgOptimizedImage, Angular DevTools Profiler, Defer block까지 큰 앱에서 실제로 효과를 내는 도구들을 한곳에 묶어 살펴봅니다.