기술인사이트

기술리포트

지구력·복합 시나리오·분산 테스트와 결과 분석

1부에서는 성능 테스트의 개념과 절차그리고 JMeter가 웹·API 부하 테스트를 다루는 기본 동작 원리를 살펴봤습니다. 2에서는 실무에서 진짜 위력을 발휘하는 심화 기능을 소개합니다단발성 요청을 넘어 장시간·복합 시나리오·대규모 부하를 다루고결과를 보고서로 풀어내는 방법까지 정리합니다.

이 글에서 다루는 내용

지구력(Soak) 테스트와 Non-GUI 모드의 필요성

CSV 데이터를 활용한 복합 시나리오 테스트

HTTP(S) Test Script Recorder로 시나리오 자동 녹화

HTML 테스트 리포트 생성

부하 분산 테스트(Master / Slave) PerfMon 서버 모니터링

현장 참고 — 가상 서비스응답 코드성능 목표·워크로드 설계, 4단계 분석법

 

1. 지구력(Soak) 테스트 따라 하기

지구력 테스트는 평균적인 부하를 장시간 지속적으로 가해시간이 지나도 시스템이 버티는지 확인합니다. 짧은 테스트에서는 드러나지 않는 메모리 누수리소스 고갈점진적 성능 저하(응답 시간 증가·처리량 감소)를 잡아내는 데 목적이 있습니다.

 

테스트 시나리오

평균적인 동시 사용자 수를 유지하며 몇 시간에서 며칠 동안 테스트를 실행합니다.

실제 사용자의 일반적인 행동 패턴(로그인 → 메인 페이지 → 상품 조회 반복)을 모방합니다.

 

STEP 1. Thread Group 추가하기

Test Plan에서 우클릭 Add > Threads(Users) > Thread Group 을 선택합니다.

 

STEP 2. 부하 설정하기

Thread Properties에서 평균 부하 수준에 맞게 값을 설정합니다.

  • Number of Threads (users) — : 50~200 (유지할 동시 사용자 수)

  • Ramp-up period (seconds) — : 300 (지정한 사용자 수에 도달하기까지의 시간)

  • Loop Count — Infinite로 두면 정지 전까지 시나리오를 계속 반복합니다.

 

[그림 1] Thread Group — Number of Threads 50 · Ramp-up 300 · Loop 무한 설정

 

STEP 3. HTTP Request로 시나리오 구성하기

Thread Group에서 우클릭 Add > Sampler > HTTP Request 를 선택하고실제 사용자 흐름을 모방하도록 요청을 구성합니다.

 

STEP 4. Think Time을 위한 Timer 추가하기

Thread Group에서 우클릭 Add > Timer > Constant Timer 를 선택합니다.

Timer를 쓰는 이유

실제 사용자는 요청과 요청 사이에생각하는 시간(Think Time)’을 가집니다. Constant Timer로 이 간격을 부여하면 훨씬 현실적인 장시간 부하를 만들 수 있습니다.

 

[그림 2] Add > Timer > Constant Timer 선택

STEP 5. 결과 수집용 리스너 추가하기

HTTP Request → Add > Listener 로 다음 리스너들을 추가합니다.

  • Summary Report — 전체 성능 지표 요약

  • jp@gc - Transactions per Second — 초당 처리량 추이

  • jp@gc - PerfMon Metrics Collector — 서버 자원(CPU·메모리 등모니터링 (6장 참고)

 

STEP 6. Non-GUI(CLI) 모드로 실행하기

장시간 테스트는 반드시 Non-GUI 모드로 실행합니다명령 프롬프트(cmd)에서 jmeter.bat이 있는 bin 폴더로 이동한 뒤 다음 명령을 입력합니다.

 

jmeter -n -t 테스트_계획.jmx -l 결과.jtl -e -o HTML_리포트_폴더

 

  • -n : Non-GUI 모드 /  -t테스트 계획(jmx)  /  -l결과 파일(jtl)  /  -e -o종료 후 HTML 리포트 생성

 

Non-GUI 모드인가

GUI 모드는 테스트가 길어질수록 메모리 사용량이 급증해 멈추거나 시스템 리소스에 영향을 주고결과의 신뢰도를 떨어뜨립니다장시간 실행이 필요한 테스트는 반드시 Non-GUI(CLI) 모드로 실행해야 합니다.

 

제목: [그림 3] Non-GUI 모드 실행 — summary 로그로 진행 상황(처리량·응답시간·에러) 확인 - 설명: [그림 3] Non-GUI 모드 실행 — summary 로그로 진행 상황(처리량·응답시간·에러) 확인

[그림 3] Non-GUI 모드 실행 — summary 로그로 진행 상황(처리량·응답시간·에러확인

 

STEP 7. 결과 확인하기

  1. 실행이 끝나면 jp@gc - PerfMon Metrics Collector  Filename에서 Browse... 로 결과 파일(.jtl)을 선택해 서버 자원 사용량 그래프를 확인합니다.

  2. -e -o 옵션으로 생성된 HTML 리포트 폴더의 index.html에서도 응답 시간·처리량·에러율 등 종합 결과를 볼 수 있습니다.

 

2. 복합 시나리오 테스트 (CSV 데이터 활용)

단일 요청이 아니라접속 → 회원가입 페이지 이동회원가입 → 로그인 → 로그아웃처럼 여러 단계로 이어지는 실제 사용자 흐름을 측정하는 방식입니다실제 서비스의 성능은 이런흐름’ 단위에서 드러나기 때문에복합 시나리오는 현장에서 매우 자주 쓰입니다.

 

두 가지 핵심 장치

  • HTTP Cookie Manager — 각 단계에서 서버가 발행하는 쿠키를 자동 저장·전달해 로그인 세션을 유지합니다여러 요청에 걸쳐 사용자 상태를 이어가야 하므로 복합 시나리오에서는 거의 필수입니다.

  • CSV Data Set Config — 가상 사용자마다 서로 다른 ID·비밀번호 등을 쓰도록, CSV 파일에서 한 줄씩 읽어 변수에 할당합니다스크립트에서는 ${변수명} 형식으로 사용합니다.

 

CSV Data Set Config의 주요 설정

 

구성이 끝나면 실제 사용자의 행동 순서대로 각 단계를 HTTP Request로 배치하고결과는 View Results Tree(요청별 디버깅 — 변수가 실제 값으로 잘 치환됐는지 확인)Summary Report(요청별·전체 성능 통계)로 확인합니다.

 

3. HTTP(S) Test Script Recorder

복잡한 시나리오를 일일이 손으로 만드는 대신실제 브라우저 동작을녹화해 테스트 스크립트를 자동 생성하는 기능입니다. JMeter를 프록시로 두고 브라우저로 사이트를 사용하면발생한 요청들이 Recording Controller 아래에 그대로 쌓입니다.

 

이런 경우에 유용합니다

로그인·검색·상품 주문 등 웹 기반 시나리오를 빠르게 확보

장바구니·결제처럼 단계가 많은 복잡한 워크플로우 녹화

프론트엔드백엔드 간 실제 통신 구조 파악

비기술자도 비교적 쉽게 테스트 시나리오를 구성

 

녹화를 위해서는 브라우저의 프록시를 JMeter(기본 포트 8888)로 향하게 하고, HTTPS 트래픽을 캡처하려면 JMeter가 생성한 루트 인증서(ApacheJMeterTemporaryRootCA.crt)를 브라우저에 신뢰 인증서로 등록해야 합니다불필요한 요청(이미지·광고 등) Include/Exclude 필터로 걸러낼 수 있습니다녹화가 끝나면 레코더를 끄고쌓인 요청을 그대로 부하 테스트에 활용합니다.

 

제목: [그림 1] 녹화로 생성된 요청 트리(Recording Controller)와 결과 그래프 - 설명: [그림 1] 녹화로 생성된 요청 트리(Recording Controller)와 결과 그래프

[그림 1] 녹화로 생성된 요청 트리(Recording Controller)와 결과 그래프

 

4. HTML 테스트 리포트 생성

JMeter는 결과를 보기 좋은 HTML 보고서로 자동 변환해 줍니다먼저 결과를 .csv 파일로 저장한 뒤상단 메뉴 Tools > Generate HTML Report에서 결과 CSVjmeter.properties 파일그리고 비어 있는 출력 폴더를 지정하면 됩니다생성된 폴더의 index.html을 열면 응답 시간·처리량·에러율 등이 그래프와 표로 정리된 종합 보고서를 확인할 수 있습니다.

 

제목: [그림 2] Generate HTML Report — 결과 CSV·properties·출력 폴더 지정 - 설명: [그림 2] Generate HTML Report — 결과 CSV·properties·출력 폴더 지정

[그림 2] Generate HTML Report — 결과 CSV·properties·출력 폴더 지정

 

5. 부하 분산 테스트 (Master / Slave)

단일 PC에서 만들 수 있는 가상 사용자는 사양에 따라 보통 500~1,000명 내외입니다그 이상을 무리하게 생성하면 JMeter 자체가 과부하로 병목이 되어정작 테스트 대상 서버가 아니라부하를 만드는 PC’가 한계에 부딪힙니다이를 해결하는 것이 분산 테스트입니다.

 

분산 테스트 구성

Master(Controller) — 테스트를 총괄 제어테스트 계획(JMX)을 모든 Slave에 전달하고 시작/종료를 명령하며 결과를 취합

Slave(Agent) — Master의 명령을 받아 실제로 부하를 생성받은 계획에 따라 가상 사용자를 만들어 대상 서버에 요청

 

제목: [그림 3] 분산 테스트 구성도 — Master가 여러 Slave를 제어해 대규모 부하를 생성 - 설명: [그림 3] 분산 테스트 구성도 — Master가 여러 Slave를 제어해 대규모 부하를 생성

[그림 3] 분산 테스트 구성도 — Master가 여러 Slave를 제어해 대규모 부하를 생성

 

Master에는 제어할 Slave들의 IP를 등록하고, Slave에서는 에이전트(jmeter-server)를 실행해 대기시킵니다이후 Master에서 Run > Remote Start All로 모든 Slave를 동시에 가동합니다.

 

알아두기

최신 JMeter RMI 연결에 기본적으로 SSL이 활성화되어 있어내부망 등에서는 SSL을 비활성화하거나 키스토어 파일을 생성해 사용합니다.

Thread 수를 500으로 설정하면 Slave마다 분할이 아니라각각’ 500명으로 실행됩니다. (Slave 3 →  1,500)

 

6. 서버 자원 모니터링 — PerfMon

응답 시간·TPS만으로는 성능 저하의원인을 규명하기 어렵습니다부하를 주는 동안 서버의 CPU·메모리·디스크 I/O·네트워크를 함께 수집해야어디서 병목이 생겼는지 체계적으로 추정할 수 있습니다. JMeter PerfMon 플러그인이 이 역할을 합니다.

모니터링 대상 서버에 Server Agent를 실행해 두고, JMeter 테스트 계획에 PerfMon Metrics Collector 리스너를 추가한 뒤 서버의 IP와 수집할 지표(CPU·Memory·Network I/O·Disk I/O)를 지정합니다테스트를 실행하면 부하에 따른 서버 자원 변화를 실시간 그래프로 확인할 수 있고결과는 .jtl 파일로 저장해 상세 분석에 활용합니다.

 

제목: [그림 4] PerfMon Metrics Collector — 부하에 따른 서버 CPU·메모리·네트워크 변화 - 설명: [그림 4] PerfMon Metrics Collector — 부하에 따른 서버 CPU·메모리·네트워크 변화

[그림 4] PerfMon Metrics Collector — 부하에 따른 서버 CPU·메모리·네트워크 변화

 

7. 현장 적용을 위한 참고 자료

7.1 가상 서비스(Virtual Service)를 활용한 테스트

테스트 대상이 의존하는 외부·연계 시스템이 항상 가용한 것은 아닙니다이때 실제 시스템의 동작을 모방(Mocking/Stubbing)하는 가상 서비스로 응답을 미리 정의하면안정적인 테스트 환경을 확보하고 종속성에 따른 불확실성을 제거할 수 있습니다.

 

사용 상황가상 서비스 활용 예시

외부 결제 API 테스트

결제 API 응답을 미리 정의해 시뮬레이션

인증 서버가 준비되지 않음

토큰 발급/검증 API를 모의 응답으로 대체

연계 시스템 응답이 느림

고정 응답 시간 또는 오류 응답 구성

병목 시나리오 설계

의도적으로 지연된 응답을 구성해 스트레스 테스트

 

주의

Mock 응답은 실제 시스템 동작을 완전히 대변하지 못할 수 있습니다운영 환경과의 차이를 고려하고테스트 종료 후에는 실제 시스템과 연계한 통합 테스트를 반드시 수행하세요.

 

7.2 응답 코드(Response Code) 이해하기

응답 코드는 시스템이 요청에 어떤 결과를 반환했는지 보여주는 중요한 지표입니다성공률 계산오류 분포 분석응답 코드별 응답 시간 비교에 활용됩니다.

 

분류의미성능 테스트 관점

1xx 정보

요청을 받았으며 처리 계속(임시 응답)

거의 직접 다루지 않음

2xx 성공

요청을 성공적으로 수용

전체 중 2xx 비율성공률시스템 안정성 지표

3xx 리다이렉션

완료를 위해 추가 작업 필요

불필요한 리다이렉션 오버헤드 확인

4xx 클라이언트 오류

요청 문법 오류·처리 불가

401/403/404 등 빈도·패턴으로 취약점 파악

5xx 서버 오류

유효한 요청 처리 실패

내부 문제의 강력한 신호 — 즉시 조사 필요

 

7.3 성능 목표 설정 예시

성능 목표는 측정 가능해야 하며, SLA와 프로젝트 특성을 고려해 고객사와 협의해 최종 확정합니다아래는 일반적인 예시입니다.

항목목표 예시

응답 시간

핵심 기능 평균 2초 이하, 95퍼센타일 3초 이하

처리량

초당 최소 200 TPS, 동시 500명에서 분당 10,000건 이상

자원 활용률

CPU 평균 70%(피크 85%) 이하메모리 75% 이하네트워크 80% 이하

SLA 기준

가용성 99.9% 이상장애 복구 1시간 이내대응 시작 30분 이내

 

7.4 워크로드 설계 예시

워크로드 모델링은 실제 사용 환경을 시뮬레이션해 현실적인 데이터를 얻기 위한 핵심 단계입니다시간대·요일·이벤트 등 다양한 시나리오를 반영하고실제 운영 데이터를 기반으로 고객사와 협의해 검증합니다.

 

  • 동시 사용자 수 — 최대 500명 시뮬레이션일반 사용자(400)·관리자(100) 등 유형 구분

  • 트랜잭션 비율 — 로그인 20% / 조회 50% / 입력 25% / 로그아웃 5% (실제 통계 기반)

  • 테스트 시간 — Ramp-up 10(0→500), Steady State 60분 유지, Ramp-down 10

  • 기타 조건 — 운영과 동일 스펙의 스테이징 서버네트워크 지연 50ms·패킷 손실 없음 등 명시


 7.5 성능 분석과 개선 방안 — 4단계 프로세스

테스트 결과를 해석하고 문제 유형을 분류해개발팀이 즉시 조치할 수 있는 근거를 보고하는 4단계 프로세스입니다테스터는해결사가 아니라안내자로서 어디를 검토해야 할지 방향을 제시합니다.

 

1단계 · 전반적 성능 분석 (현상 파악)

응답 시간(평균·최대·분포), 처리량(TPS), 에러율(특히 5xx), 자원 사용률(한계 도달 여부)을 확인해무엇이’ 일어나는지 객관적으로 파악합니다.

 

2단계 · 문제 유형 식별 (원인 진단)

문제 유형대표 현상예시

병목 현상

(Bottleneck)

부하 증가 시 응답시간 급증특정 자원이 꽉 참

동시 300명 이상에서 응답시간 1 → 5초 급등

비정상 패턴

(Abnormal)

특정 기능만 유독 느림응답 불규칙

로그인은 정상인데 결제 API만 평균 3초 이상

시스템 구성 이슈(Config)

설정값이 잘못되어 제 성능을 못 냄

DB 연결 제한으로 50명 이상 동시 접속 시 대기

 

3단계 · 원인 추정 및 보고 (근거 정리)

  • 병목 — 시간대별 성능 지표와 서버 자원 지표를 교차 분석하고저하 시점의 에러 로그를 증거로 첨부: “사용자 100명 도달 시 DB CPU 95%, 평균 응답 1→5

  • 비정상 패턴 — 기능별로 개별 테스트해 느린 기능을 특정하고 자원 사용량을 관찰: “‘마이페이지 조회만 단독 평균 2.5

  • 시스템 구성 — 관찰 현상 기반으로 가설을 세워수정이 아닌확인 요청’ 관점으로 전달: “TPS 150에서 정체되는데 CPU 50% 여유 → 스레드/커넥션 풀 설정 확인 필요

 

4단계 · 개선 방안 및 권고 작성

  • 병목 — : “DB CPU 100% 도달이 주원인관련 쿼리 튜닝 또는 DB 자원 증설 검토 요청

  • 비정상 패턴 — : “해당 API 내부 로직이 비효율적데이터 조회·처리 과정 상세 분석 권고

  • 시스템 구성 — : “자원 여유에도 처리량이 정체. WAS 스레드 풀 또는 DB 커넥션 풀 설정값 검토 필요

 

7.6 서버 자원 모니터링 도구

서버 모니터링은 전문 도구나 JMeter 자체 기능으로 수행합니다일반적으로 DataDog, New Relic, WhaTap 등을 많이 활용하며 시각화·알림 기능이 강력합니다. JMeter만으로 진행한다면 6장의 PerfMon 플러그인으로 CPU·메모리·네트워크·디스크 I/O 지표를 수집할 수 있습니다테스트 환경에 따라 전용 솔루션과 JMeter 내장 기능을 선택적으로 활용하세요.

 

마치며

2부에서는 지구력 테스트, CSV 복합 시나리오스크립트 레코더, HTML 리포트, 분산 테스트, PerfMon 모니터링까지 JMeter의 심화 기능을 살펴보고성능 목표·워크로드 설계와 4단계 분석법으로 결과를 보고서로 풀어내는 방법을 정리했습니다.

성능 테스트는 한 번의 이벤트가 아니라 품질을 지키는 꾸준한 활동입니다. 1·2부의 내용을 토대로서비스에 맞는 시나리오와 목표를 정의하고 반복적으로 측정·개선해 나가시길 바랍니다.