본문 바로가기
카테고리 없음

성능 개선의 수치화 - 1 (JMeter 사용법)

by Node.js 주니어 개발자 귤 2023. 5. 29.

기존 프로젝트에서 성능 개선을 목적으로 LIKE연산자를 이용하여 구현하였던 검색 기능을 Elastic Search를 사용한 경험이 있으나 정확히 얼마나 개선되었는지 혹은 역으로 느려졌는지 수치화가 필요하다는 생각이 들어 JMeter를 이용하여 확인하기로 하였다.

 

JMeter 설치부터 테스트 결과까지 확인해보자.

 

1.  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 방법을 지원하고 있습니다. 

 

 

2. JMeter 설치

 

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.5.zip 클릭해서 다운로드 후 압축해제

 

 

3. 실행방법

 

1. 압푹춘 폴더의 bin폴더 안 jmeter.bat 파일 실

 

 

2. 아래와 같은 GUI 가 나옵니다.

 

3. 테스트 생성

 

- Thread Group : 테스트에 사용될 쓰레드 개수, 쓰레드 1개당 사용자 1명

- Sampler : 사용자의 액션 (예: 로그인, 게시물 작성, 게시물 조회 등)

- Listener : 응답을 받아 리포팅, 검증, 그래프 등 다양한 처리

- Configuration : Sampler 또는 Listener가 사용할 설정 값 (쿠키, JDBC 커넥션 등)

- Assertion : 응답 확인 방법 (응답 코드, 본문 내용 비교 등)

 

File -> New -> Test Plan Name 설정

 

 

1. Thread Group

 

부하 테스트에 사용될 유저의 수를 설정합니다

 

생성한 Test Plan 우클릭 -> Add -> Threads(Users) -> Thread Group

 

 

Action to be taken after a Sampler error에서 Error가 리턴됐을 때 어떻게 할 건지에 대한 설정을 할 수 있습니다.

 

Thread Properties

 

- Number of Threads : 쓰레드 개수(유저 수)

- Ramp-up period : 쓰레드 개수를 만드는데 소요되는 시간

- Loop Count : infinite | n 으로 값을 설정할 수 있으며 설정된 값에 따라 Number of Threads X Ramp-up period 만큼 요청을 다시 보낸다.

 

100명의 유저가 3초동안 5번 반복해서 에러가 발생해도 계속 요청을 보낸다고 설정하겠습니다.

 

 

 

2. Sampler

 

Thread Group에서 사용자를 생성하였고 이제 사용자의 행동을 설정해보겠습니다.

 

Thread Group 우클릭 -> Add -> Sampler -> HTTP Request 클릭

 

 

 

테스트할 Controller에 요청을 보내는 Sampler를 만들겠습니다.

 

저의 경우를 예시로 보여드리면 localhost 환경의 테스트이고 포트는 3000, 요청메소드는 Get, 요청주소는  /search/indexSearch?page=1&keyword=서울 이기 때문에 아래와 같이 됩니다.

 

- Server Name pr IP : localhost

- Port Number : 3000

- HTTP Request: Get 요청,  /search/indexSearch?page=1&keyword=서울

 

 

 

입력값을 모두 입력했다면 Add 해주시면 됩니다.

 

 

 

3. Listener

 

위에서 만든 Sampler가 받아오는 리턴 값을 바탕으로 그래프, 리포트 등을 만들어주는 Listener를 만들겠습니다.

 

위에서 만든 HTTP Request에 오른쪽 클릭 -> Add -> Listener -> View Results Tree,Summary Report, View Results in Table 생성

 

 

 

4. Assertion

 

응답값이 제대로 왔는지 검증하기 위해 Assertion을 추가하겠습니다.

 

위에서 만들었던 HTTP Request 우클릭 -> Add -> Assertions -> Response Assertion 클릭

 

위의 과정을 모두 따라 하셨다면 아래와 같이 구성됩니다.

 

 

 

3. JMeter 테스트 실행

 

이 버튼을 클릭하면 위에서 한 설정대로 테스트가 진행됩니다

 

.

 

테스트 실행 버튼을 누르면 눈에 띄는 변화는 없으나 우측 상단에 테스트 시간과 테스트 갯수가 출력됩니다.

 

모두 완료되었다면 뒤에서 만든 View Results Tree,Summary Report, View Results in Table을 클릭해보면 결과를 알 수 있습니다.

 

 

 혹시나 아까 만든 설정들이 적용이 되지 않았다면 저 버튼을 클릭해주면 됩니다.

 

아래와 같이  View Result Tree를 클릭해보면 성공 결과를 알 수 있습니다.

 

다음으로 Summary Report를 클릭해보면 아래와 같은 그림이 출력되며 항목별 설명은 이와 같습니다.

 

- Label : Sampler 명

- # Samples : 샘플 실행 수 (Number of Threads X Ramp-up period)

- Average : 평균 걸린 시간 (ms)

- Min : 최소 걸린 시간 (ms)

- Max : 최대 걸린 시 (ms)

- Std. Dev. : 걸린 시간의 표준편차

- Error % : 에러율

- Throughput : 분당 처리량

- Received KB/sec : 초당 받은 데이터량

- Sent KB/sec : 초당 보낸 데이터량

- Avg. Bytes : 서버로부터 받은 데이터 평균

 

 

 

여기까지 JMeter 사용법과 함께 성능의 수치화를 진행해보았다.

 

다음엔 나의 프로젝트의 성능 개선을 체크해봐야겠다.