OPEN HYPER STEP
← 목록으로 (Java+Spring)
JAVA · 85 / 99
java
CHAPTER 85 / 99
읽기 약 2
FUNCTION

성능 테스트: JMeter 기초


핵심 개념

부하 테스트 설계·Thread Group·HTTP Sampler — 100명 동시 접속 시뮬레이션.

본문

JMeter 기본 구조

📋 코드 (13줄)
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📋 코드 (24줄)
<?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 실행

BASH📋 코드 (8줄)
# 헤드리스 (CI용)
jmeter -n -t test.jmx -l results.jtl -e -o report/

# -n: non-GUI
# -t: 테스트 계획 파일
# -l: 결과 파일
# -e: 리포트 생성
# -o: 리포트 출력 디렉토리

결과 분석 지표

📋 코드 (8줄)
Average:    평균 응답 시간 (ms)
Median:     중앙값 (50th)
90% Line:   상위 90% (P90)
95% Line:   P95
99% Line:   P99
Min/Max:    최소·최대
Throughput: 초당 요청 수 (TPS)
Error %:    에러율

SLO 검증 — Gatling DSL (대안)

SCALA📋 코드 (29줄)
// 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%
         );
    }
}

부하 테스트 시나리오

📋 코드 (5줄)
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