부하 테스트 용어집
부하 테스트(Load Testing)란?
Section titled “부하 테스트(Load Testing)란?”부하 테스트는 예상 트래픽 및 피크 조건에서 시스템 성능, 안정성, 용량을 평가하기 위해 실제 사용자 트래픽을 시뮬레이션하는 기법입니다. 다음과 같은 질문에 답합니다:
- 시스템이 몇 명의 동시 사용자를 처리할 수 있는가?
- 지속 가능한 최대 처리량은 얼마인가?
- 극한 부하에서 성능은 어떻게 저하되는가?
- 시스템 병목은 어디에 있는가?
부하 테스트 유형
Section titled “부하 테스트 유형”Load Testing (부하 테스트)
Section titled “Load Testing (부하 테스트)”일반적인 조건에서의 성능을 측정하기 위해 현실적인 예상 부하를 시뮬레이션하는 테스트. 주요 목표는 정상~피크 사용 환경에서 응답 시간, 처리량, 리소스 사용률을 측정하는 것입니다.
사용 시점: 릴리스 전 정기 성능 검증, 벤치마크 수립.
Stress Testing (스트레스 테스트)
Section titled “Stress Testing (스트레스 테스트)”장애 지점과 임계값을 파악하기 위해 시스템을 정상 용량 이상으로 밀어붙이는 테스트. 시스템이 실패할 때까지 부하를 점진적으로 증가시킵니다.
목표: 최대 용량 및 우아한 성능 저하(graceful degradation) 동작 확인.
핵심 질문: 설계 한계를 초과하면 어떤 일이 발생하는가?
Spike Testing (스파이크 테스트)
Section titled “Spike Testing (스파이크 테스트)”단시간에 부하를 급격히 증가시켜 회복력을 테스트하는 방법. 예상치 못한 트래픽 급증(플래시 세일, 바이럴 트윗, DDoS)을 시뮬레이션합니다.
예시: 정상 부하 1,000명 → 갑자기 2분간 50,000명 → 다시 1,000명.
측정 항목: 회복 시간, 스파이크 중 오류율, 스파이크 후 리소스 정리.
Soak Testing (소크 테스트)
Section titled “Soak Testing (소크 테스트)”장시간(수 시간~수 일)에 걸쳐 중간 수준의 부하를 지속 적용해 다음 문제를 탐지합니다:
- 애플리케이션 코드의 메모리 누수
- 커넥션 풀 고갈
- 시간 경과에 따른 리소스 저하
- 캐시 포화 문제
- 디스크 공간 소진
기간: 시스템에 따라 일반적으로 8~48시간.
Capacity Testing (용량 테스트)
Section titled “Capacity Testing (용량 테스트)”성능 SLO를 충족하면서 시스템이 처리할 수 있는 최대 사용자/트랜잭션 수를 결정하는 테스트. 스트레스 테스트와 달리 성능이 허용 가능한 “최적 최대값”을 찾습니다.
Endurance Testing (내구성 테스트)
Section titled “Endurance Testing (내구성 테스트)”장기간 테스트(소크 테스트와 유사)로, 특히 오랜 운영 후에만 나타나는 문제를 검증합니다.
주로 발견하는 문제:
- 점진적 저하를 유발하는 리소스 누수
- 디스크 공간을 소진하는 로그 파일 증가
- 오래되어 무효화된 데이터베이스 통계
핵심 성능 메트릭
Section titled “핵심 성능 메트릭”Response Time / Latency (응답 시간 / 레이턴시)
Section titled “Response Time / Latency (응답 시간 / 레이턴시)”요청을 보낸 시점부터 완전한 응답을 받을 때까지의 시간.
전체 응답 시간 = 네트워크 지연 + 서버 처리 + 렌더링왜 중요한가: 사용자 경험에 직접 영향을 미칩니다. 응답 시간이 100ms 증가할 때마다 전환율이 약 1% 감소합니다.
측정 시 주의:
- 사용자가 응답을 읽거나 처리하는 시간은 포함되지 않음
- 엔드포인트/트랜잭션마다 다름
- 부하 및 시간대에 따라 변동
Throughput (처리량)
Section titled “Throughput (처리량)”단위 시간당 처리된 요청 수.
처리량 (RPS) = 전체 요청 수 / 전체 시간(초)주요 단위:
- RPS: 초당 요청 수 (Requests Per Second)
- TPS: 초당 트랜잭션 수 (Transactions Per Second)
- IOPS: 초당 I/O 작업 수
- Mbps: 초당 메가비트 (데이터 처리량)
왜 중요한가: 최대 처리량이 확장성 한계를 결정합니다.
Error Rate (오류율)
Section titled “Error Rate (오류율)”전체 요청 대비 실패 요청의 비율 또는 횟수.
오류율 (%) = (실패 요청 수 / 전체 요청 수) × 100허용 기준:
- 프로덕션: < 0.1% (성공률 99.9%)
- 테스트 기준선: 피크 부하에서 2배 이상 증가하지 않아야 함
- 스트레스 테스트: 기준 완화, 우아한 성능 저하 여부 확인
오류 유형:
- 5xx (서버 오류)
- 4xx (클라이언트/유효성 검사 오류)
- 타임아웃
- 연결 거부
- Assertion 실패
Percentile Latency / P50 / P95 / P99 / P99.9 (백분위 레이턴시)
Section titled “Percentile Latency / P50 / P95 / P99 / P99.9 (백분위 레이턴시)”순위 정렬된 응답 시간의 특정 백분위수에서의 레이턴시. 중요: 평균 레이턴시만 측정하면 절대 안 됩니다.
P95 레이턴시: 전체 요청의 95%가 이 값보다 빠르게 완료됨사용자의 80%는 P95 이하의 레이턴시를 경험20%는 더 느린 레이턴시(꼬리 레이턴시)를 경험비교 예시: P95 = 200ms, P99 = 500ms인 경우
- 100명 중 95명은 200ms 이하 응답
- 100명 중 99명은 500ms 이하 응답
- 최악 1%는 500ms 초과 (최대 레이턴시까지)
백분위수가 중요한 이유:
- [100, 100, 100, 100, 10000]의 평균 = 2060ms (오해 유발!)
- P95 = 100ms (실제 사용자 경험을 더 잘 반영)
권장 모니터링 지표:
- P50 (중앙값)
- P95 (우수한 사용자 경험 기준)
- P99 (꼬리 레이턴시 문제 식별)
- Max (최악의 케이스)
CPU and Memory Utilization (CPU 및 메모리 사용률)
Section titled “CPU and Memory Utilization (CPU 및 메모리 사용률)”테스트 중 소비되는 시스템 리소스 비율.
확인할 수 있는 것:
- 리소스 효율성
- 시스템이 성장을 감당할 수 있는지
- 용량 계획 필요성
위험 신호:
- CPU가 지속적으로 > 80%: 여유 공간(headroom) 부족
- 시간이 지남에 따라 증가하는 메모리: 메모리 누수 가능성
- 메모리 급증: 버퍼 할당 문제
Concurrent Users vs. Request Rate (동시 사용자 vs. 요청 속도)
Section titled “Concurrent Users vs. Request Rate (동시 사용자 vs. 요청 속도)”부하를 정의하는 두 가지 방법:
Concurrent Users (동시 사용자):
- 100명의 동시 사용자 = 동시에 활성화된 사용자 100명
- 각 사용자는 X초마다 1개의 요청 전송 (Think Time에 따라 다름)
- 총 RPS는 Think Time에 의존
Request Rate (요청 속도):
- 1000 RPS = 사용자 수와 무관하게 초당 1000개 요청
- 서버 부하를 더 직접적으로 측정
- 응답 시간이 다른 1000 RPS ≠ 동일한 CPU 부하
변환:
대략적 RPS = 동시 사용자 수 / 평균 Think Time예시: 100명 사용자 × (60초 Think Time / 300초 전체 = 0.2 RPS) = 20 RPS부하 테스트 패턴
Section titled “부하 테스트 패턴”Constant Load (일정 부하)
Section titled “Constant Load (일정 부하)”테스트 전체 기간 동안 X명의 동시 사용자/RPS를 일정하게 유지.
사용자: ════════════════════시간: 0 30분사용 사례: 기준 성능 측정, 안정성 검증.
Ramp-up Pattern (점진적 증가 패턴)
Section titled “Ramp-up Pattern (점진적 증가 패턴)”시스템 안정화를 허용하면서 0에서 목표 부하까지 점진적으로 증가.
사용자: ╱════════════════════시간: 0 5분 30분(5분에 걸쳐 100명까지 증가)이유: 실제 사용 패턴을 반영하지 않는 인위적 트래픽 급증 방지.
일반적인 Ramp-up 기간: 1시간 미만 테스트는 15분, 더 긴 테스트는 515분.
Staircase (Step Load) Pattern (계단형 부하 패턴)
Section titled “Staircase (Step Load) Pattern (계단형 부하 패턴)”일정 간격으로 부하를 단계적으로 증가시키며 성능 저하 지점 파악.
사용자: ╱╱╱╱ ════════════시간: 0 10분(2분마다 25명씩 증가)사용 사례: 용량 테스트, 임계점 파악.
Spike Pattern (스파이크 패턴)
Section titled “Spike Pattern (스파이크 패턴)”갑작스러운 부하 증가 후 기준선으로 복귀.
사용자: ═══╱════╲═══시간: 0 5 8 15분측정: 회복 능력, 급격한 급증 시 오류 처리.
Wave Pattern (파형 패턴)
Section titled “Wave Pattern (파형 패턴)”시간대별 트래픽 패턴을 모방하는 주기적 증가/감소.
사용자: ╱╲╱╲╱╲시간: 0 30분사용 사례: 이커머스, 뉴스 사이트 등 현실적인 트래픽 시뮬레이션.
Think Time (생각 시간)
Section titled “Think Time (생각 시간)”정의: 사용자가 콘텐츠를 읽거나 처리하는 시간을 시뮬레이션하기 위한, 사용자 액션 사이의 지연.
Think Time = 한 요청의 끝과 다음 요청의 시작 사이의 시간애플리케이션 유형별 예시:
- 이커머스: 5~30초 (상품 상세 페이지 탐색)
- 뱅킹: 10~60초 (거래 내역 읽기)
- API 호출: 0~2초 (백엔드 간 통신)
- 모바일 앱: 앱 동작에 따라 다양
테스트에 미치는 영향:
- Think Time 없음: 인위적 급증, 실제 동작 미반영
- Think Time 있음: 현실적인 점진적 요청, 더 나은 부하 분산
// 부하 테스트: 100명의 동시 사용자, Think Time 15초실제 RPS = 100명 / 15초 = 약 7 RPSHeadroom & Capacity Planning (여유 공간 및 용량 계획)
Section titled “Headroom & Capacity Planning (여유 공간 및 용량 계획)”Headroom (여유 공간)
Section titled “Headroom (여유 공간)”정상 운영 부하와 최대 용량 사이의 안전 마진.
Headroom = (최대 용량 - 예상 피크 부하) / 최대 용량
예시:- 시스템 최대 처리량: 10,000 RPS- 예상 피크: 7,000 RPS- Headroom = 3,000 / 10,000 = 30%권장 Headroom: 안전을 위해 20~30%.
왜 필요한가:
- 예측을 초과하는 트래픽 급증
- 배포 중 일시적인 성능 저하
- 긴급 스케일링 한계
Headroom 부족 시 결과:
- 예상치 못한 부하에 대한 버퍼 없음
- 오토스케일링 지연으로 성능 저하
- 연쇄 장애 가능성
주요 병목 유형
Section titled “주요 병목 유형”Database (데이터베이스)
Section titled “Database (데이터베이스)”느린 쿼리, 커넥션 풀 고갈, 또는 Lock 경합.
징표:
- CPU는 정상이지만 응답 시간이 높음
- 서버를 추가해도 처리량이 증가하지 않음
- 특정 엔드포인트만 느리고 다른 것은 빠름
애플리케이션이 요청을 효율적으로 처리하지 못하는 상태.
징표:
- CPU가 지속적으로 > 80%
- 부하에 비례해 응답 시간 증가
- 용량을 추가해도 도움이 안 됨 (요청당 응답 시간 자체가 높음)
Memory (메모리)
Section titled “Memory (메모리)”가비지 컬렉션 일시 정지나 스왑 사용을 유발하는 RAM 부족.
징표:
- 레이턴시 급등에서 Young Generation GC 일시 정지 확인
- 메모리가 꾸준히 증가 (누수)
- 특정 부하 수준에서 애플리케이션 크래시
Network Bandwidth (네트워크 대역폭)
Section titled “Network Bandwidth (네트워크 대역폭)”데이터 전송에 필요한 네트워크 용량 부족.
징표:
- 응답당 데이터 볼륨이 큼
- 리소스가 충분한데도 처리량이 정체
- 네트워크 인터페이스 > 70% 사용률
Disk I/O
Section titled “Disk I/O”로깅, 캐싱, 데이터 저장에 불충분한 디스크 속도.
징표:
- CPU 메트릭에서 높은 I/O 대기
- 순차 쓰기가 많은 작업이 느림
- SSD 마이그레이션 후 성능 향상
테스트 결과 해석
Section titled “테스트 결과 해석”허용 가능한 응답 시간 기준
Section titled “허용 가능한 응답 시간 기준”- 웹 애플리케이션: 사용자 facing 요청 < 2초
- 백엔드 API: 내부 호출 < 200ms
- 모바일: < 3초 (레이턴시 허용 범위가 더 넓음)
- 실시간 시스템: < 100ms
용량 결정 방법
Section titled “용량 결정 방법”- 예상 피크의 25%, 50%, 75%, 100%, 125%로 부하 테스트
- 처리량(RPS) vs. 응답 시간 그래프 작성
- 응답 시간이 급격히 상승하는 “무릎(knee)” 지점 파악
- 해당 지점 × 0.75~0.85 = 권장 용량 상한
회귀(Regression) 탐지
Section titled “회귀(Regression) 탐지”테스트 결과를 Baseline과 비교:
- 응답 시간 저하 > 15%: 조사 필요
- 처리량 감소 > 10%: 코드 분석 필요
- 오류율 > 0.1%: 심각한 문제
피해야 할 안티패턴
Section titled “피해야 할 안티패턴”❌ Think Time 없이 테스트: 비현실적인 트래픽 급증을 유발함
❌ 평균 레이턴시만 측정: 꼬리 레이턴시 문제를 놓침
❌ 단일 페이로드 크기로 테스트: 실제 환경에서는 다양한 크기가 존재함
❌ DB 상태 무시: 데이터 볼륨이 쿼리 성능에 영향을 줌
❌ 단일 위치에서 테스트 실행: 네트워크 레이턴시는 지역마다 다름
❌ 테스트 사이에 데이터 정리 안 함: 이전 데이터가 새 테스트의 유효성에 영향을 줌
이 가이드를 내 서비스에 직접 적용해 보세요.
TestForge 무료 스캔 시작 →