DevOps/SRE

Load Test

peanutwalnut 2025. 7. 23. 15:10

로드 테스트란?

  • 정의: 서비스·시스템에 예상 동시 사용자 수 혹은 요청량을 부하(로드)로 가해, 성능 한계와 안정성을 검증하는 성능 테스트의 한 유형입니다.
  • 목적: 실제 운영 환경에서의 트래픽 패턴을 모방해
    • 처리량(Throughput)
    • 응답 시간(Response Time)
    • 시스템 자원(CPU, 메모리, I/O) 사용률
    • 에러 발생율
      등을 측정·분석하여, 병목 지점과 최대 용량을 파악하고 SLA(Service Level Agreement) 준수 여부를 확인합니다.

 

주요 테스트 유형 비교

테스트 유형                        설명

 

로드 테스트 정상 예상 트래픽(peak load)을 가정해 시스템이 요구사항을 만족하는지 확인
스트레스 테스트 한계 이상 과부하를 걸어 어떻게 장애가 발생·복구되는지 확인
스파이크 테스트 순간적으로 급증하는 트래픽(스파이크)에 대한 대응력 측정
지속성 테스트 장시간 부하(예: 수 시간~수일)를 걸어 메모리 누수·자원 고갈 여부 검사
 

로드 테스트 절차

  1. 목표 정의
    • 최대 동시 사용자 수, 요청 유형(API 엔드포인트, 페이지 뷰 등), SLA 기준(응답 시간, 에러율) 설정
  2. 시나리오 설계
    • 사용자 행동 플로우(로그인→검색→조회→장바구니→결제) 작성
    • 각 스텝 별 요청 비율(예: 조회 70%, 등록 20%, 삭제 10%) 명시
  3. 테스트 환경 구성
    • 운영과 유사한 하드웨어·네트워크 구성
    • 데이터 볼륨(테스트 DB) 셋업
  4. 부하 생성
    • 점진적(스텝) 부하: 10→50→100→… 사용자를 단계별로 증가
    • 고정 부하: 예상 최대 사용자 수로 일정 시간 유지
  5. 모니터링 & 수집
    • 서버 자원(CPU, 메모리, 네트워크, 디스크 I/O)
    • 애플리케이션 메트릭(응답 시간, 에러율, TPS)
    • 로그(애플리케이션/미들웨어/OS 로그)
  6. 분석 & 보고
    • 임계점(목표 부하에서 성능 저하 시작 시점) 도출
    • 병목 지점(쿼리, 쓰레드 풀, GC 등) 식별
    • 개선 방안 제시(스케일 업/아웃, 캐싱, 쿼리 튜닝 등)

대표적인 로드 테스트 도구

도구                              특징

 

JMeter Java 기반, GUI/CLI 지원, 플러그인 풍부, 복잡한 시나리오 모델링 가능
Gatling Scala 기반, 코드로 시나리오 작성, 높은 동시성, 리소스 효율적
Locust Python 기반, 사용자가 직접 시나리오 스크립트 작성, 실시간 웹 UI 모니터링 제공
k6 Go 기반, JavaScript로 시나리오 작성, 클라우드 실행 지원, CLI 친화적
Artillery Node.js 기반, 간단한 YAML/JS 스크립팅, 서버리스 환경 지원
 

베스트 프랙티스

  1. 실제 트래픽 패턴을 최대한 반영
    • 피크 시간대, 요청 분포, 유저 씬 시나리오 등
  2. 테스트 환경 격리
    • 운영 환경과 분리된 별도 스테이징 환경에서 수행
  3. 점진적 부하 증분
    • 갑작스러운 대규모 부하는 시스템 불안정으로 이어질 수 있으므로, 단계별로 올리기
  4. 모니터링 통합
    • APM(Application Performance Monitoring)·인프라 모니터링 툴과 연동해 종합 분석
  5. 자동화 및 CI 파이프라인 연계
    • 코드 변경 시 자동으로 부하 테스트 스크립트 실행
  6. 결과 검증 및 재현성 확보
    • 테스트 결과를 문서화하고, 동일 조건에서 반복 실행해 일관성 확인