부하 테스트 (Load Testing)는
시스템(웹 서버, API, DB 등)이 얼마나 많은 사용자나 요청을 동시에 처리할 수 있는지 측정하는 성능 테스트의 일종이다.
| 항목 | 설명 |
|---|---|
| 🎯 목적 | 정상적인 사용량 또는 최대 사용량 조건에서 시스템의 안정성, 응답 속도, 처리량을 측정 |
| 🧪 방식 | 동시에 여러 사용자(가상 사용자)를 시뮬레이션하여 요청을 보내고, 응답 시간, 에러율, 처리량 등을 측정 |
| 📊 도구 | JMeter, Locust, Apache Bench(ab), k6, Gatling 등 |
| 💥 예시 | “100명이 동시에 로그인 요청을 보낼 때 서버가 버티는가?” “1분간 1000건의 결제 요청이 들어올 때 처리 가능한가?” |
테스트 목표 설정
시나리오 정의
도구 선택 및 테스트 실행
모니터링 및 측정
결과 분석 및 병목 개선
사용자가 몰릴 수 있는 쇼핑몰의 결제 시스템을 테스트한다고 해보자.
예상 동시 사용자: 500명
부하 테스트 시나리오:
- /login, /product/view, /cart/add, /payment 요청을 순서대로 수행
결과:
평균 응답 시간: 200ms
최대 응답 시간: 1.5초
에러율: 0.3%
병목 원인:
/payment에서 DB connection pool 부족 → 설정 증가 필요
| 테스트 종류 | 설명 |
|---|---|
| ✅ Load Test | 점진적으로 부하를 증가시켜 시스템 한계 측정 |
| 🔥 Stress Test | 한계를 넘는 부하를 줘서 언제 터지는지 확인 |
| 🐢 Soak Test | 장시간 동안 부하를 줘서 메모리 누수 등 확인 |
| 🧨 Spike Test | 짧은 시간에 갑자기 많은 요청을 보내는 테스트 |
| 항목 | 🧪 JMeter | ⚙️ k6 | 🚀 Gatling | 🧵 Locust |
|---|---|---|---|---|
| 언어 | Java 기반 (GUI/스크립트) | JavaScript 기반 | Scala 기반 | Python 기반 |
| 사용 방식 | GUI + CLI | CLI + 코드형 (JS) | 코드형 (Scala) | 코드형 (Python) |
| 러닝커브 | 쉬움 (GUI 제공) | 쉬움~보통 (JS 필요) | 어려움 (Scala 필요) | 보통 (Python 필요) |
| 실행 속도 | 느림 (무겁고 JVM 필요) | 빠름 (경량, Go 기반) | 빠름 | 보통 |
| CI/CD 통합 | 가능 (복잡함) | 매우 쉬움 (DevOps 친화적) | 가능 | 가능 |
| 분산 테스트 | 있음 (복잡) | 있음 (k6 Cloud 또는 OSS 설정) | 있음 | 쉬움 (worker 개념 명확) |
| 시각화 | HTML 리포트, 플러그인 | CLI + Grafana 연동 (Prometheus) | 기본 리포트 있음 | Web UI 제공 |
| 대표 특징 | 오래된 표준, GUI | DevOps 친화적, 코드 기반 | 대규모 처리 성능 우수 | 이벤트 기반 유저 행동 시뮬레이션 우수 |
GUI로 시나리오 쉽게 작성 가능
다양한 플러그인, CSV 파라미터 등 지원
JVM 기반이라 무거움
코드 작성보다는 GUI 중심이라 자동화/버전 관리에 불리
✅ 추천: 테스트 입문자, GUI 친화적 환경이 필요한 경우
JS 기반으로 코드로 시나리오 작성
Docker/K8s, CI/CD, Grafana와 연동 용이
경량, 성능 우수
GUI 없음 (코드만으로 작성)
JS에 익숙하지 않으면 초반 진입장벽 있음
✅ 추천: DevOps 환경, 자동화된 부하 테스트, 클라우드 기반 운영
성능 최적화 매우 우수
리포트 퀄리티 좋고, 코드 기반 시나리오
Scala 언어 → 러닝커브 높음
✅ 추천: 고성능 테스트가 중요한 대기업, 트래픽 높은 시스템
Python 기반 → 친숙함
웹 UI로 시뮬레이션 관리 가능
대규모 테스트엔 약간 느릴 수 있음
✅ 추천: Python 유저, 이벤트 기반 사용자 시뮬레이션이 필요한 경우
| 상황 | 추천 도구 |
|---|---|
| GUI로 쉽게 부하 테스트 시작 | 🧪 JMeter |
| CI/CD 파이프라인에 통합, 코드로 관리 | ⚙️ k6 |
| 트래픽이 아주 많고 성능 중심 | 🚀 Gatling |
| Python 친숙 + 웹 기반 테스트 | 🧵 Locust |