⏰💡 폴링 API 부하테스트 진행 방법 (JMeter)

2026. 2. 15. 13:03·프로젝트/스프링 부트 3 백엔드 개발자 되기 Blog + 선착순 강의 프로젝트

1️⃣ 준비: 서버 켜져 있어야 함

  • Spring 서버가 localhost:8080에서 실행 중이어야 해.
  • 브라우저에서 http://localhost:8080/ 같은 페이지가 뜨면 OK.

2️⃣ JMeter 실행 & 새 Test Plan 만들기

  1. JMeter 실행
  2. 왼쪽 트리에서 Test Plan 보일 거야.
  3. 상단 메뉴 File → Save Test Plan As로 저장해두기 (나중에 날아갈 수 있음)

3️⃣ Thread Group 만들기 (가상 사용자 설정)

  1. 왼쪽 Test Plan 우클릭
  2. Add → Threads(Users) → Thread Group

오른쪽 설정에서 이렇게 입력:

  • Number of Threads (users): 300 (처음은 100으로 해도 돼. 성공하면 300~1000으로 올리자)
  • Ramp-up period (seconds): 30 (30초 동안 천천히 300명이 들어오는 느낌)
  • Loop Count: 1 (각 유저가 “enqueue 1번”만 하도록. 폴링은 아래에서 반복 설정할 거야)

4️⃣ HTTP Request Defaults 설정 (주소 반복 입력 없게)

  1. Thread Group 우클릭
  2. Add → Config Element → HTTP Request Defaults

오른쪽에 이렇게 입력:

  • Protocol: http
  • Server Name or IP: localhost
  • Port Number: 8080

이렇게 해두면, 이후 요청들은 Path만 적으면 돼.


5️⃣ (필수) enqueue 요청 만들기 (POST /api/lectures/1/queue)

  1. Thread Group 우클릭
  2. Add → Sampler → HTTP Request

오른쪽 설정:

  • Name: 01_enqueue
  • Method: POST
  • Path: /api/lectures/1/queue

✅ 여기까지 하면 “각 유저가 대기열 등록”을 하게 됨.


6️⃣ (핵심) enqueue 응답에서 userKey 뽑아오기 (JSON Extractor)

이걸 해야 다음 폴링에서 ${userKey}를 쓸 수 있어.

  1. 왼쪽에서 방금 만든 01_enqueue를 클릭
  2. 01_enqueue 우클릭
  3. Add → Post Processors → JSON Extractor

오른쪽 설정:

  • Names of created variables: userKey
  • JSON Path expressions: $.userKey
  • Match No.: 1
  • Default Values: NOT_FOUND

✅ 이 설정의 의미:

  • enqueue 응답 JSON에서 "userKey" 값을 찾아서
  • JMeter 변수 ${userKey}에 넣어둔다.

7️⃣ 폴링 반복을 위한 Loop Controller 만들기

  1. Thread Group 우클릭
  2. Add → Logic Controller → Loop Controller

오른쪽 설정:

  • Loop Count: 30 (각 유저가 30번 폴링 → 1초 간격이면 약 30초 동안 기다리는 느낌)

8️⃣ 폴링 요청 만들기 (GET /api/lectures/1/queue/me?userKey=...)

  1. Loop Controller 우클릭
  2. Add → Sampler → HTTP Request

오른쪽 설정:

  • Name: 02_poll_me
  • Method: GET
  • Path: /api/lectures/1/queue/me

그리고 아래 Parameters에 추가:

  • Name: userKey
  • Value: ${userKey}

✅ 이게 “enqueue로 받은 userKey로 내 순번 조회”를 반복 호출하는 구조야.


9️⃣ 폴링 간격 1초 주기 만들기 (Timer)

  1. Loop Controller 우클릭
  2. Add → Timer → Constant Timer

오른쪽 설정:

  • Thread Delay (in milliseconds): 1000

✅ 이게 “1초마다 폴링”이야.


🔟 결과 확인용 Listener 추가

초보자는 이 2개면 충분해.

  1. Thread Group 우클릭
  2. Add → Listener → Summary Report
  3. 다시 Thread Group 우클릭
  4. Add → Listener → View Results in Table (처음 확인용)

⚠️ 주의: 너무 많은 Listener 추가하면 측정이 왜곡될 수 있어. 딱 이 정도만.


🔥 실행 전에 “정상 동작” 빠르게 확인하는 방법

실행하기 전에, 요청이 진짜 잘 되는지 1명만으로 테스트해보자.

  1. Thread Group 클릭
  2. Users를 1, Ramp-up 1, Loop 1로 바꾼다.
  3. 상단 ▶️ 실행
  4. View Results in Table에서 응답이 200 OK인지 확인

✅ 여기서 enqueue 응답에 userKey가 있고, poll 응답이 JSON이면 성공.

그 다음 다시 Users 300으로 올리자.

폴링테스트B 구조
 ├─ 01_enqueue
 │   └─ JSON Extractor
 ├─ Loop Controller (30)
 │   ├─ 02_poll_me
 │   └─ Constant Timer (1000)
 ├─ Summary Report
 ├─ View Results in Table
 └─ HTTP Request Defaults

'프로젝트 > 스프링 부트 3 백엔드 개발자 되기 Blog + 선착순 강의 프로젝트' 카테고리의 다른 글

⏰💡 폴링 API 부하 테스트 (500명 실험)  (0) 2026.02.15
⏰💡 JMeter 구성 요소 해석해보기  (1) 2026.02.15
⏰💡 선착순 강의에서 비관적 락(PESSIMISTIC LOCK)을 사용한 이유?  (0) 2026.02.15
⏰ 선착순 강의 대규모 트래픽 처리 – Redis 2차 설계  (0) 2026.02.15
⏰🚨 신청 버튼을 누르지도 않았는데 자동으로 신청되는 문제 (Redis 대기열 + localStorage 이슈)  (0) 2026.02.14
'프로젝트/스프링 부트 3 백엔드 개발자 되기 Blog + 선착순 강의 프로젝트' 카테고리의 다른 글
  • ⏰💡 폴링 API 부하 테스트 (500명 실험)
  • ⏰💡 JMeter 구성 요소 해석해보기
  • ⏰💡 선착순 강의에서 비관적 락(PESSIMISTIC LOCK)을 사용한 이유?
  • ⏰ 선착순 강의 대규모 트래픽 처리 – Redis 2차 설계
hak0622
hak0622
개발하면서 “이게 뭐지?”라는 순간마다 궁금한 점을 바탕으로 정리한 개발 블로그입니다.
  • hak0622
    궁금한 개발 이야기 Why?
    hak0622
  • 전체
    오늘
    어제
    • 분류 전체보기 (68)
      • 공부 (36)
        • 1. 자바 ORM 표준 JPA 프로그래밍 - 기본.. (35)
        • 시험 (1)
      • 프로젝트 (32)
        • 스프링 부트 3 백엔드 개발자 되기 Blog + .. (32)
  • 인기 글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
hak0622
⏰💡 폴링 API 부하테스트 진행 방법 (JMeter)
상단으로

티스토리툴바