혜야의 코딩스토리
[Spring] JMeter 사용법 - JMeter란?, 테스트 사용법 본문
이번 포스팅에선 웹 어플리케이션 성능 테스트 오픈 소스인 JMeter에 대해서 알아보겠습니다.
📌JMeter란?
Apache에서 만든 자바로 만들어진 웹 어플리케이션 성능 테스트 오픈 소스입니다.
JMeter를 이용해서 아래와 같은 테스트를 할 수 있습니다.
- 웹 - HTTP, HTTPS (Java, NodeJS, PHP, ASP.NET, …)
- SOAP / REST 웹 서비스
- FTP
- JDBC
- LDAP
- JMS - Message-oriented middleware (MOM)
- Mail - SMTP(S), POP3(S) and IMAP(S)
- Native commands or shell scripts
- TCP
- Java Objects
Swing으로 제작한 GUI와 CLI 방법을 지원하고 있습니다. 자세한 동작 방법은 아래에서 알아보겠습니다.
📌설치하기
1. Apache JMeter 다운로드 페이지 접속
Apache JMeter - Download Apache JMeter
Download Apache JMeter We recommend you use a mirror to download our release builds, but you must verify the integrity of the downloaded files using signatures downloaded from our main distribution directories. Recent releases (48 hours) may not yet be ava
jmeter.apache.org
2. apache-jmeter-5.6.2.zip 클릭해서 다운로드 후 압축해제
-- 저는 5.4.1버전을 설치하였습니다. 이전 버전은 아래경로에서 찾을 수 있습니다.
📌실행 방법
cmd -> 압축푼 폴더 아래 bin 폴더로 이동 -> jmeter 입력 후 엔터
c:\apache-jmeter-5.4.1\bin>jmeter
아래와 같은 GUI 가 나옵니다. CLI는 아래 테스트 방법에서 알려드리겠습니다
📌테스트 전 유의사항
테스트 하는 웹 어플리케이션 서버와 테스트를 돌리는 서버는 서로 달라야 합니다.
JMeter를 돌리는 서버와 웹 어플리케이션 서버가 같으면 같은 메모리를 사용하기 때문에 정확한 값을 측정할 수 없습니다.
📌JMeter 테스트 용어
테스트 들어가기 전 JMeter 테스트 용어부터 알아보겠습니다.
- Thread Group : 테스트에 사용될 쓰레드 개수, 쓰레드 1개당 사용자 1명
- Sampler : 사용자의 액션 (예: 로그인, 게시물 작성, 게시물 조회 등)
- Listener : 응답을 받아 리포팅, 검증, 그래프 등 다양한 처리
- Configuration : Sampler 또는 Listener가 사용할 설정 값 (쿠키, JDBC 커넥션 등)
- Assertion : 응답 확인 방법 (응답 코드, 본문 내용 비교 등)
📌테스트 방법
File > New > Test Plan Name 설정
1. Thread Group
🧸 Thread Group : 테스트에 사용될 쓰레드 개수, 쓰레드 1개당 사용자 1명
테스트할 유저 수를 설정합니다.
0에서 만든 테스트에 오른쪽 클릭 > Add > Threads (Users) > Thread Group
1) Action to be taken after a Sampler error
- Error가 리턴됐을 때 어떻게 할 건지에 대한 설정을 할 수 있습니다.
2) Thread Properties
- Number of Threads : 쓰레드 개수
- Ramp-up period : 쓰레드 개수를 만드는데 소요되는 시간
- Loop Count : infinite | n 으로 값을 설정할 수 있으며 설정된 값에 따라 Number of Threads X Ramp-up period 만큼 요청을 다시 보낸다.
-- 10명의 유저가 1초만에 2번 반복해서 에러가 발생해도 계속 요청을 보낸다고 설정하겠습니다.
2. Sampler
🧸 Sampler : 사용자의 액션 (예: 로그인, 게시물 작성, 게시물 조회 등)
사용자를 만들었으니 이제 사용자가 해야 할 행동을 정의해보겠습니다.
위에서 만든 Thread Group 우클릭 > Add > Sampler > HTTP Request 클릭
1) 위에서 만든 Controller에 요쳥을 보내는 Sampler를 만들겠습니다.
- Protocol : http / https
- Server Name or IP : 테스트 할 주소 (ex. localhost, hyecoding.tistory.com)
- Port Number : 8080
- HTTP Request : Get / posts / 10
2) 모두 입력 후 Add버튼을 눌러 추가합니다.
3. Listener
🧸 Listener : 응답을 받아 리포팅, 검증, 그래프 등 다양한 처리
1) Sampler가 받아오는 리턴 값을 바탕으로 그래프, 레포팅을 만들어주는 Listener를 만들어보겠습니다.
- HTTP Request에 오른쪽 클릭 > Add > Listener > View Results Tree, Summary Report, View Results in Table 생성
4. Assertion
🧸 Assertion : 응답 확인 방법 (응답 코드, 본문 내용 비교 등)
1) 응답값이 제대로 왔는지 검증을 하기위해 Assertion을 추가해보겠습니다.
- HTTP Request 우클릭 > Add > Assertions > Response Assertion 클릭
2) Text Response 클릭 > 하단 Add 클릭 -> 추가된 Partters to Test 더블클릭 > 테스트 패턴 네임 입력
3) Custom failure message > 에러메시지 입력
5. 최종 구성 확인
- 모두 생성되었다면 이제 테스트를 실행해보겠습니다.
📌JMeter 테스트 실행
Start버튼을 클릭하면 테스트가 진행됩니다.
만약, 테스트 결과를 지우고 싶다면 해당 버튼으로 Clear하면 됩니다.
View Results Tree
아까 요청을 20번 보내게 했기때문에 20개의 요청 정보가 나온 걸 볼 수 있습니다.
하나의 리퀘스트의 테스트 시작 시간, 응답 속도 등 다양한 정보들이 나옵니다.
Summary Report
- Label : Sampler 명
- # Samples : 샘플 실행 수 (Number of Threads X Ramp-up period)
- Average : 평균 걸린 시간 (ms)
- Min : 최소
- Max : 최대
- Std. Dev. : 표준편차
- Error % : 에러율
- Throughput : 분당 처리량
- Received KB/sec : 초당 받은 데이터량
- Sent KB/sec : 초당 보낸 데이터량
- Avg. Bytes : 서버로부터 받은 데이터 평균
View Results에 대한 통계를 나타냅니다. 통계 정보가 필요한 경우 사용하면 되겠습니다.
error
경로를 일부러 틀리게 작성하여 실행해보니 에러가 발생했습니다.
Response data탭에서 404에러가 발생하였다는 것을 확인할 수 있었습니다.
프로젝트 보고서 작성용으로 테스트를 진행해 보았습니다.
툴 사용방법이 쉽고, 결과데이터를 한눈에 볼 수 있다는 점이 좋았습니다. 👍
참고
https://effortguy.tistory.com/164
[Spring] JMeter 사용법 - JMeter란?, 테스트 방법
웹 어플리케이션 성능 테스트를 툴은 자바 오픈 소스 Apache Bench, Apache JMeter, 네이버에서 Grinder를 이용해서 만든 nGrinder, Gatling 등등이 있습니다. 이번 포스팅에선 웹 어플리케이션 성능 테스트 오
effortguy.tistory.com
'꿈 : 멋진 개발자 🧸 > Java' 카테고리의 다른 글
[Java] 클라이언트 IP 가져오기: Apache 웹서버와 리버스 프록시 환경에서 (0) | 2025.03.07 |
---|---|
[Spring] spring MVC redirect시 https -> http로 요청되는 문제 (0) | 2023.10.17 |
[Spring] Interceptor 인터셉터 (로그인 세션 체크 Interceptor로 처리하기) (0) | 2022.10.04 |
[Spring] @RequestBody / @ResponseBody 어노테이션이란? (0) | 2022.10.01 |
[Spring] AOP 관점 지향 프로그래밍 (0) | 2022.09.30 |