
서버 부하 테스트는 단순히 서버가 동작하는지를 확인하는 것이 아니라,
얼마나 많은 요청을 언제까지 안정적으로 처리할 수 있는지를 검증하는 과정이다.
주요 목적은 다음과 같다.
동시 접속자 증가 시 서버의 한계 지점 파악
CPU, 메모리, 네트워크 자원 사용 변화 관찰
장애 발생 시점과 원인 분석
서비스 배포 전 안정성 검증
운영 환경에서의 병목 구간 식별
실무에서는 정상 동작보다 **언제부터 비정상 동작이 시작되는지가 더 중요하다.
개발 환경(Local)에서는 문제가 없던 서비스가
운영 서버에서는 다음과 같은 문제를 일으킬 수 있다.
동시 요청 증가로 응답 지연 발생
CPU 사용률 급증
메모리 부족(OOM)
프로세스 비정상 종료
웹 서버(Nginx) 또는 WAS(Tomcat, FastAPI 등) 다운
이러한 문제는 코드만으로는 확인할 수 없고,
실제 요청을 발생시키는 부하 테스트를 통해서만 검증 가능하다.
부하 테스트 중에는 단순 성공/실패가 아니라 지표 변화를 관찰해야 한다.
top, htop으로 실시간 확인
사용자 요청 증가 시 CPU가 얼마나 빠르게 상승하는지
특정 프로세스가 CPU를 독점하는지 여부
메모리 증가 추세 확인
요청 종료 후 메모리 반환 여부
메모리 누수 의심 상황 판단
ps, top으로 프로세스 수 변화 확인
좀비 프로세스 발생 여부
WAS 또는 웹 서버 프로세스 다운 여부
평균 응답 시간
최대 응답 시간
요청 증가에 따른 응답 지연 시작 지점
부하 테스트 중에는 반드시 모니터링 명령어를 병행해야 한다.
top
CPU, 메모리 사용량 실시간 확인
서버 전체 상태 파악에 적합
htop
top보다 직관적인 UI
프로세스별 자원 사용량 확인 용이
부하 테스트 도구 실행과 동시에
다른 터미널에서 top 또는 htop을 띄워놓는 것이 기본 운영 습관이다.
강의에서는 특정 도구 하나를 강제하지 않고,
다양한 부하 테스트 도구 중 하나 이상을 직접 선택해 사용하도록 안내했다.
공통적으로 테스트 도구는 다음 요소를 설정한다.
동시 접속자 수
요청 횟수
테스트 지속 시간
요청 대상 URL
중요한 것은 소규모 → 중간 → 과부하 단계별 테스트이다.
부하 테스트는 한 번으로 끝내는 것이 아니라 단계적으로 진행해야 한다.
동시 접속자 수 소량
서버 정상 응답 여부 확인
동시 접속자 수 점진적 증가
CPU, 메모리 변화 관찰
응답 지연 발생 시점 기록
3단계: 한계 테스트
서버가 감당할 수 있는 최대 부하까지 테스트
오류 발생 시점 확인
서버가 다운되는 조건 기록
이 과정에서 “몇 명까지 안정적이었는지”를 명확히 수치로 남기는 것이 중요하다.
테스트 조건 (동시 사용자 수, 요청 수, 시간)
서버 사양 (CPU, 메모리)
사용한 부하 테스트 도구
테스트 중 CPU/메모리 변화
응답 지연 및 오류 발생 시점
최종 결론 (안정 구간 / 위험 구간)
“로그와 지표를 기반으로 판단했다”는 설명이 중요하다.
# GPG 키 등록
sudo gpg --no-default-keyring --keyring /usr/share/keyrings/k6-archive-keyring.gpg --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys C5AD17C747E3415A3642D57D77C6C491D6AC1D69
# 저장소 리스트 추가
echo "deb [signed-by=/usr/share/keyrings/k6-archive-keyring.gpg] https://dl.k6.io/deb stable main" | sudo tee /etc/apt/sources.list.d/k6.list
# 패키지 업데이트 및 k6 설치
sudo apt update
sudo apt install k6
import http from 'k6/http';
import { sleep } from 'k6';
export default function () {
// 테스트할 서버 주소 입력
// 1. 본인 서버 테스트 시: http://localhost:8080
// 2. 연습용 서버 테스트 시: http://test.k6.io
http.get('http://test.k6.io');
// 가상 사용자(VU) 간의 간격 조절 (1초 대기)
sleep(1);
}
옵션명령어를 통해 가상 사용자 수와 테스트 지속 시간을 조절할 수 있습니다.
k6 run --vus 50 --duration 30s test.js
--vus 50: 동시에 접속하는 가상 사용자(Virtual Users)를 50명으로 설정합니다.
--duration 30s: 테스트를 30초 동안 진행합니다.
| 지표명 | 의미 | 비고 |
|---|---|---|
| http_req_duration | 요청부터 응답까지 걸린 시간 (Latency) | 평균(avg), 최대(max), p95, p99 확인 |
| http_req_failed | 테스트 중 실패한 요청 비율 | 0.00%에 가까울수록 안정적 |
| http_reqs | 초당 처리량 (TPS) | 서버가 초당 처리할 수 있는 요청 수 |
| vus | 현재 활성화된 가상 사용자 수 | 설정한 VU 값과 실제 동작 확인 |
