DevOps/SRE
Load Test
peanutwalnut
2025. 7. 23. 15:10
로드 테스트란?
- 정의: 서비스·시스템에 예상 동시 사용자 수 혹은 요청량을 부하(로드)로 가해, 성능 한계와 안정성을 검증하는 성능 테스트의 한 유형입니다.
- 목적: 실제 운영 환경에서의 트래픽 패턴을 모방해
- 처리량(Throughput)
- 응답 시간(Response Time)
- 시스템 자원(CPU, 메모리, I/O) 사용률
- 에러 발생율
등을 측정·분석하여, 병목 지점과 최대 용량을 파악하고 SLA(Service Level Agreement) 준수 여부를 확인합니다.
주요 테스트 유형 비교
테스트 유형 설명
로드 테스트 | 정상 예상 트래픽(peak load)을 가정해 시스템이 요구사항을 만족하는지 확인 |
스트레스 테스트 | 한계 이상 과부하를 걸어 어떻게 장애가 발생·복구되는지 확인 |
스파이크 테스트 | 순간적으로 급증하는 트래픽(스파이크)에 대한 대응력 측정 |
지속성 테스트 | 장시간 부하(예: 수 시간~수일)를 걸어 메모리 누수·자원 고갈 여부 검사 |
로드 테스트 절차
- 목표 정의
- 최대 동시 사용자 수, 요청 유형(API 엔드포인트, 페이지 뷰 등), SLA 기준(응답 시간, 에러율) 설정
- 시나리오 설계
- 사용자 행동 플로우(로그인→검색→조회→장바구니→결제) 작성
- 각 스텝 별 요청 비율(예: 조회 70%, 등록 20%, 삭제 10%) 명시
- 테스트 환경 구성
- 운영과 유사한 하드웨어·네트워크 구성
- 데이터 볼륨(테스트 DB) 셋업
- 부하 생성
- 점진적(스텝) 부하: 10→50→100→… 사용자를 단계별로 증가
- 고정 부하: 예상 최대 사용자 수로 일정 시간 유지
- 모니터링 & 수집
- 서버 자원(CPU, 메모리, 네트워크, 디스크 I/O)
- 애플리케이션 메트릭(응답 시간, 에러율, TPS)
- 로그(애플리케이션/미들웨어/OS 로그)
- 분석 & 보고
- 임계점(목표 부하에서 성능 저하 시작 시점) 도출
- 병목 지점(쿼리, 쓰레드 풀, GC 등) 식별
- 개선 방안 제시(스케일 업/아웃, 캐싱, 쿼리 튜닝 등)
대표적인 로드 테스트 도구
도구 특징
JMeter | Java 기반, GUI/CLI 지원, 플러그인 풍부, 복잡한 시나리오 모델링 가능 |
Gatling | Scala 기반, 코드로 시나리오 작성, 높은 동시성, 리소스 효율적 |
Locust | Python 기반, 사용자가 직접 시나리오 스크립트 작성, 실시간 웹 UI 모니터링 제공 |
k6 | Go 기반, JavaScript로 시나리오 작성, 클라우드 실행 지원, CLI 친화적 |
Artillery | Node.js 기반, 간단한 YAML/JS 스크립팅, 서버리스 환경 지원 |
베스트 프랙티스
- 실제 트래픽 패턴을 최대한 반영
- 피크 시간대, 요청 분포, 유저 씬 시나리오 등
- 테스트 환경 격리
- 운영 환경과 분리된 별도 스테이징 환경에서 수행
- 점진적 부하 증분
- 갑작스러운 대규모 부하는 시스템 불안정으로 이어질 수 있으므로, 단계별로 올리기
- 모니터링 통합
- APM(Application Performance Monitoring)·인프라 모니터링 툴과 연동해 종합 분석
- 자동화 및 CI 파이프라인 연계
- 코드 변경 시 자동으로 부하 테스트 스크립트 실행
- 결과 검증 및 재현성 확보
- 테스트 결과를 문서화하고, 동일 조건에서 반복 실행해 일관성 확인