mun dev

[JMeter] Apache JMeter란? 사용방법, 성능 및 부하테스트 본문

DB

[JMeter] Apache JMeter란? 사용방법, 성능 및 부하테스트

mndev 2023. 6. 16. 18:00

 

 

1. Apache JMeter란?

 

Apache JMeter는 서버가 제공하는 성능 및 부하를 측정할 수 있는 테스트 도구이다.

JMeter는 순수 Java 애플리케이션 오픈소스이며 서버나 네트워크 또는 개체에 대해 과부하를 시뮬레이션하여 강도를 테스트하거나 다양한 부하 유형에서 전체 성능을 분석하는 데 사용할 수 있다.

 

Apache에서 만든 자바로 만들어진 웹 어플리케이션 성능 테스트 오픈 소스입니다.

JMeter를 이용해서 아래와 같은 테스트를 할 수 있습니다.

 

- 웹 - HTTP, HTTPS

- 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 다운로드 

https://jmeter.apache.org/download_jmeter.cgi

 

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

Binaries apache-jmeter-5.5.zip 설치

 

 

 

2. 실행

cmd >압축푼 폴더 아래 bin 폴더로 이동 > jmeter 입력 후 엔터

조금만 기다리면 jmeter GUI가 나타나게 됩니다.

 

 

3. 테스트

 

배포한 서버에서 테스트를 하면 좋지만 대용량 데이터를 넣고 처리하기 때문에 크레딧이 많이 나올 것 같아 로컬환경에서 진행하였습니다.

 

 

주요개념

  • Thread Group: 몇 개의 쓰레드가 동시에 요청을 보내는 지
  • Sampler: 어떤 유저가 해야 하는 액션
  • Listener: 응답을 받았을 때 어떤 동작을 취하는 지  (검증, 리포트, 그래프 그리기 등)
  • Configuration: Sampler 또는 Listener가 사용할 설정 값 (쿠키, JDBC 커넥션 등)
  • Assertion: 응답 결과의 성공 여부를 판단하는 조건 (응답 코드, 본문 내용 등)

 

4. 스레드 그룹 추가

저같은 경우는 프로젝트의 상품조회만 단독으로 테스트를 할 것이기 때문에 스레드 그룹 하나만 추가를 해두었습니다.

만약 다른 기능 상품조회, 전체상품조회등 각각의 부하테스트를 하려면 하나의 스레드 그룹이 아닌 똑같은 방식으로 하나 더 만들어서 진행하면 됩니다.

 

5. 테스트 환경 설정

Users 100명, second 1초, 1번반복 환경을 설정합니다.

각 상황에 맞게 설정하시면 됩니다.

 

 

6.  HTTP Request 추가

이후 https에 대한 요청을 처리해줄 수 있는 httpRequest를 추가해줍니다.

 

 

7. Listener(ViewResultsTree, Summary Report, ViewResults in Table) 추가

부하테스트 후 결과를 보기위해 해당 리스너들을 추가합니다.

 

 

8. Response Assersion추가

Response Assersion도 추가합니다.

 

 

 

이제 하나의 스레드에 이런구조가 완성됩니다. 

 

 

8. 요청 페이지 정보 입력

이후

Ip: 요청할 페이지의 IP (저는 로컬이라 localhost로 작성하였습니다.)

PortNumber: 요청 페이지의 포트번호

Http Request: GET(GET뿐만 아니라 POST등 다양한 종류가 있습니다.)

Path: 요청 페이지 경로 작성

ContentEncoding: UTF-8

 

해당 내용들을 작성하고 위에 툴바에 있는 빗자루 두개를 눌러 저장하고 초록색버튼을 누르게 되면 해당 요청이 실행됩니다.

 

9.  결과 확인

올바르게 요청이 들어갔다면 이렇게 초록색으로 Http Request가 나옵니다. 실패시에는 빨간색으로 나오게 됩니다.

 

 

 

 

10. Summary Report 결과 확인

View Results에 대한 통계를 나타냅니다. 통계 정보가 필요한 경우 사용하면 됩니다. 표형식으로 보기 쉽기 때문에 추가하는 것이 좋습니다.

 

 

- 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 : 서버로부터 받은 데이터 평균

 

 

부하테스트후 요청당 얼마나 걸리는지 확인하고 점점 늘려서 요청했을 때 한계치를 알수 있고, 해당 요청에 대한 개선작업을 수행한다면 더욱 좋은 서비스를 제공할 수 있습니다.

 

현재는 예시로 테스트 한개를 했지만 프로젝트에서 조회작업이 많이 일어나는 부분들을 스레드로 추가하여 개선전, 개선후를 비교하여 개선작업을 수행하였습니다.