java
CHAPTER 85 / 99
읽기 약 2분
FUNCTION
성능 테스트: JMeter 기초
핵심 개념
부하 테스트 설계·Thread Group·HTTP Sampler — 100명 동시 접속 시뮬레이션.
본문
JMeter 기본 구조
Test Plan
├── Thread Group (사용자 그룹)
│ ├── Number of Threads (사용자 수): 100
│ ├── Ramp-up Period: 30s
│ └── Loop Count: 10
├── HTTP Request (요청)
│ ├── Server: api.openhyperstep.com
│ ├── Path: /api/users
│ └── Method: GET
├── Listeners (결과 분석)
│ ├── Summary Report
│ ├── Aggregate Report
│ └── Response Times Over Time.jmx XML 예시 (간소화)
<?xml version="1.0" encoding="UTF-8"?>
<jmeterTestPlan version="1.2">
<hashTree>
<TestPlan testname="OHS Load Test">
<stringProp name="TestPlan.user_defined_variables"/>
</TestPlan>
<hashTree>
<ThreadGroup testname="Users">
<stringProp name="ThreadGroup.num_threads">100</stringProp>
<stringProp name="ThreadGroup.ramp_time">30</stringProp>
<stringProp name="LoopController.loops">10</stringProp>
</ThreadGroup>
<hashTree>
<HTTPSamplerProxy testname="GET /api/users">
<stringProp name="HTTPSampler.domain">api.openhyperstep.com</stringProp>
<stringProp name="HTTPSampler.port">443</stringProp>
<stringProp name="HTTPSampler.protocol">https</stringProp>
<stringProp name="HTTPSampler.path">/api/users</stringProp>
<stringProp name="HTTPSampler.method">GET</stringProp>
</HTTPSamplerProxy>
</hashTree>
</hashTree>
</hashTree>
</jmeterTestPlan>CLI 실행
# 헤드리스 (CI용)
jmeter -n -t test.jmx -l results.jtl -e -o report/
# -n: non-GUI
# -t: 테스트 계획 파일
# -l: 결과 파일
# -e: 리포트 생성
# -o: 리포트 출력 디렉토리결과 분석 지표
Average: 평균 응답 시간 (ms)
Median: 중앙값 (50th)
90% Line: 상위 90% (P90)
95% Line: P95
99% Line: P99
Min/Max: 최소·최대
Throughput: 초당 요청 수 (TPS)
Error %: 에러율SLO 검증 — Gatling DSL (대안)
// Gatling — 코드 기반 부하 테스트 (Scala/Java)
import io.gatling.javaapi.core.*
import io.gatling.javaapi.http.*
import static io.gatling.javaapi.core.CoreDsl.*
import static io.gatling.javaapi.http.HttpDsl.*
class LoadSimulation extends Simulation {
HttpProtocolBuilder httpProtocol = http
.baseUrl("https://api.openhyperstep.com")
.acceptHeader("application/json");
ScenarioBuilder scn = scenario("User Load")
.exec(http("Get Users")
.get("/api/users")
.check(status().is(200)));
{
setUp(
scn.injectOpen(
rampUsers(100).during(30), // 30초간 100명 증가
constantUsersPerSec(50).during(120) // 120초간 초당 50명
)
).protocols(httpProtocol)
.assertions(
global().responseTime().percentile(95).lt(500), // P95 < 500ms
global().failedRequests().percent().lt(1.0) // 에러 < 1%
);
}
}부하 테스트 시나리오
Smoke Test: 10명, 1분 — 기본 동작 확인
Load Test: 100명, 30분 — 일반 트래픽
Stress Test: 500명, 30분 — 한계 탐색
Spike Test: 50→500→50, 짧은 시간 — 급증 대응
Soak Test: 100명, 24시간 — 메모리 누수다음 챕터
CH.17 "로깅 전략: SLF4J + Logback" — 프로덕션 로그.
AI 프롬프트
🤖 AI에게 잘 물어보는 법 — 모델·전략별 프롬프트
Claude
무료: Sonnet 4.6 / Pro $20/mo: Opus 4.6
내 Spring 코드의 JMeter 부하 테스트 부분을 분석해서 SLO 임계값 설정와 개선 우선순위를 알려줘.
ChatGPT
무료: GPT-5.5 / Plus $20/mo: GPT-5.5 Pro
JMeter 부하 테스트 vs 다른 패턴 비교를 실전 사례 5개로 보여주고 JMeter vs Gatling vs k6를 알려줘.
Gemini
무료: 2.5 Flash / Pro $19.99/mo: 3.1 Pro
내 코드베이스 전체를 분석해서 JMeter 부하 테스트 관련 부하 테스트 미실시 영역를 보고해줘.
Grok
무료: Grok 4.1 / SuperGrok $30/mo
2026년 한국 기업의 JMeter 부하 테스트 채택률과 한국 SaaS 부하 테스트 빈도를 솔직히 알려줘.
⭐ 이것만 기억하세요
성능 테스트: JMeter 기초는 이 3가지만 확실히 잡으세요
1.JMeter는 GUI + CLI 가능 — 부하 패턴 시뮬레이션과 SLO 검증
2.핵심 지표: P95/P99 응답 + Throughput(TPS) + 에러율 — 평균만 보면 long tail 놓침
3.다음 챕터 CH.17에서 로깅 — 프로덕션 디버깅의 핵심
공유하기
진행도 85 / 99