본문 바로가기

Stress Test

[부하 테스트] Jmeter 상세 설정

이번 장에서는 Jmeter의 상세 설정부분들에 대해서 알아보도록 한다.
Jmeter의 경우 상당히 많은 기능들을 가지고 있다. 이번 장에서는 필자가 사용한 기능들에 대해서만 다룰 예정이다.
만약 필자가 사용한 기능 이외에 다른 기능들이 필요하다면 아마 공식 홈페이지(링크)에서 잘 찾아보면 대부분의 기능들은 이미 존재할 것이다.


  • {Test Group Name}: Test Group에서 사용할 Thread(일반적으로 유저)를 설정한다.

    • Number of THreads (users): 테스트를 진행할 때 사용될 Threads(유저)의 수.
    • Ramp-up Period (seconds): Number of Threads가 생성되는 시간.
    • Loop Count: THread 단위로 요청하는 횟수.

아래의 이미지 기준으로 설명하면
총 10개의 Threads(유저)가 생생될 것이며 <--- Number of Threads
Threads(유저)들은 10초 이내에 생성될 것이다. <--- Ramp-up Period
생성된 Threads(유저)들은 10개의 요청을 할 것이다. <--- Loop Count
총 발생하는 요청의 수는 100개가 될 것이다.

  • Variable: Test Group 내에서 사용할 변수를 설정한다.

  • Default Header: Test Group 내에서 HTTP Request들에서 공통적으로 사용할 Header를 설정한다. Jmeter의 경우 Postman과 같이 친절하게 자동으로 Header에 정보가 입력되지 않는다. 필자는 accept와 Content-Type이 모든 요청에 추가되도록 설정하였다.

  • Timer Request Interval: 총 요청의 횟수를 결정하기 위하여 사용한다. 하지만 이번에 필자의 경우 모든 Threads(유저) 들이 일정 간격(5초)마다 요청하도록 설정하였다. Target throughput을 설정하기 위해서는 총 세개의 변수가 필요하다.

    • Target Throughtput: Threads이 요청하는 총 Request의 수
    • Threads: {Test Group Name} 에서 설정한 Threads의 수
    • Interval: Threads이 Request를 요청하는 간격 (필자의 경우 5초로 고정)

위의 세개의 변수가 존재할 때 Target Throughtput을 구하는 공식은 아래와 같다.

Target Throughtput = Threads * 60 / Interval

즉, {Test Group Name} 에서 Threads의 수를 변경하였다면 반드시 Target Throughtput을 변경해야 같은 환경 (5초 간격으로 요청을 하는 환경)에서 부하 테스트가 가능하다.

  • View Result Tree: HTTP Request 요청 및 결과를 확인 할 수 있다. 보통 최초 세팅하는 상황에서 디버깅용으로 사용하게 되는듯 하다. 하지만 필자가 표시해둔 Filename: tutorial은 추후 Request 결과를 그래프로 뽑아내기 위하 저장하는 부분이므로 기억해두도록 한다.

  • Aggregate Report: HTTP Request의 결과를 통계 그래프로 보여준다. 각 항목별로 의미하는 것이 궁금하다면 여기(링크)를 눌러서 확인해보도록 한다.

  • Aggregate Graph: Aggregate Report의 결과를 그래프로 확인할 수 있도록 보여준다.

  • Graph Result: 모든 Request들의 평균을 확인할 수 있도록 보여준다.

  • Controller: HTTP Request들의 집단. 필자의 경우 Threads(유저)들이 무작위로 Request를 전달하도록 많은 Controller 중에서 Random Controller로 설정하였다.

Request들의 경우 특별한 부분이 없으므로 설명하지 않고 넘어가도록 한다.
추후 유지보수 시에 Value값으로 들어가있는 변수 사용만 주의하면 될듯하다.

  • JWT Setter: 모든 요청 전에 작동하여 Header의 Authorization 정보를 변경한다. JWT Setter에 의해 모든 요청들은 랜덤한 인증정보를 가지게 되어 요청마다 다른 결과를 받아볼 수 있게된다. (필자는 요청마다 다른 쿼리, 다른 로직, 다른 결과가 보장되어야 모든 경우의 수를 염두한 부하테스트라고 생각한다. Parameter Setter 또한 같은 이유로 작성하게 되었다.)
    필자의 경우 Spring Security와 JWT를 사용하여 사용자를 인증한다. 만약 다른 방식으로 사용자를 인증한다면 자신의 서비스에 맞게 따로 구현하여야한다.

  • Parameter Setter: 모든 요청 전에 작동하여 Parameter를 랜덤한 값으로 수정한다. 작성일 기준으로 pageable 정보, 기간 정보, 배차 아이디 정보를 랜덤하게 생성하여 요청마다 다른 결과를 받아볼 수 있도록 구현하였다.


지금까지 Jmeter 상세 설정에 대해서 알아보았다.
여러분이 API 요청을 통한 부하 테스트를 진행할 예정이라면 이정도 설정이면 충분할 것이라 예상된다.
이제 남은 것은 필자가 쓴 글을 참고하여 자신의 서비스에 맞게 커스터마이징 하는 일이다.

'Stress Test' 카테고리의 다른 글

[부하 테스트] 결과 (1차)  (0) 2022.01.22
[부하 테스트] 서버 설정  (0) 2022.01.22
[부하 테스트] Jmeter 설정  (0) 2022.01.22
[부하 테스트] 개요  (0) 2021.12.29
[Pinpoint] 로컬 Agent 구축  (0) 2021.12.29