개발을 진행하고나서 프로그램이 성능이 얼마나 괜찮은지를 확인하려고할때 가장 많이 사용하는 성능테스트 도구로 Jmeter를 사용한다.
다양한 테스트 방법들이 있지만 이번 포스팅에서는 가장 기본이 되는 방법에 대해서 작성할 예정이다.
설치
Mac OS 기준으로 작성한다.
우선 Mac M1 기준으로 Apache Jmeter 공식홈페이지에서 다운받아서 실행해본결과 어플리케이션이 자꾸 죽어버리는 현상이 있어 포기하고 brew로 설치하였다.
brew install jmeter
금방 설치가 완료된다. 설치가 완료된 다음에 다음 명령을 실행하여 Jmeter를 실행한다.
open /opt/homebrew/bin/jmeter
이는 Jmeter의 설치 경로와 관련이 있기 때문에 개인 환경에 따라서 다를수가 있다. 그럴 경우에는 which로 경로를 확인해보고 실행하자.
위와같은 그림이 나오면서 Jmeter가 실행된다.
java awt를 사용해서 만든것 같아 보인다. 우선 좌측에는 Test Plan을 추가할수 있는 영역이 있으며 오른쪽에는 상세정보에 대한 내용을 보여주는 전형적인 옛날 UI를 볼수 있다. 하지만 이런 옛날스러워 보이지만 놀랍게도 아래 그림에 있는것 처럼 깃털모양을 클릭하면 추가로 Plug-in을 설치할수 있는 기능도 제공하고있다. 추가로 설치할 플러그인은 해당 기능을 이용하여 설치하면 된다.
Test Plan
테스트 방법에 대해서 정의를 한다. 좌측에 Test Plan의 항목에 마우스 오른쪽을 클릭하게되면 컨텍스트 메뉴가 노출된다.
우선 Thread Group을 추가해준다. 이는 1개의 Thread를 User 1명으로 생각하고 해당 그룹에 Thread수를 변경하면서 테스트가 가능하다. 대체적으로 동시접속자수라고 생각하는게 이해하기 편하다. 여러가지 옵션이 있지만 아래와같이 기본적인 설정은 두고 Thread 수만 1000으로 변경하였다.
그 다음은 테스트를 위한 Sampler를 등록해야한다. Sampler가 실제 우리가 요청하는 테스트의 단위라고 생각하면 된다.
API 요청에 대한 테스트를 진행하기 때문에 HTTP Request의 Sampler를 add 해준다.
추가가 되면 왼쪽 Thread Group에 HTTP Request Sampler가 등록된다.
Sampler를 선택하면 좀더 상세한 테스트 정보를 입력할수 있다. 아래 그림과 같이 localhost에 대해서 테스트를 진행하며 기본 Port인 8080으로 설정하여 URL을 입력해주면된다.
다음으로는 Sampler의 결과에 대한 정보를 받기 위해 리스너 설정을 추가한다. 그냥 실행해도 테스트는 진행되지만 결과에 대한 리포트를 받아볼수 없다. 그렇기 때문에 상세한 리포트를 확인하기 위해서는 리스너를 등록해서 결과에 대한 정보를 확인하는것이 좋다.
위 그림과 같이 Thread Group에서 마우스 오른쪽을 클릭하여 컨텍스트 메뉴를 통해 Listener 항목을 보면 다양한 리포트들이 있는것을 확인할수 있다. 가장 기본적인 View Results in Table을 등록해 보겠다.
리스너가 등록된다음에 기존에 등록한 Sampler를 실행하면된다. 실행버튼을 누르게 되면 우측 상단 부분에 처음에 Thread Group에서 설정한 User(Thread Count 수)만큼 숫자가 설정되면 테스트를 진행한다. 그 다음에 앞서 등록학 View Results in Table을 선택하여 수행 결과를 확인해보면된다.
그림에서 보는바와 같이 Thread Group에서 순서대로 Sampler가 1000번동안 동작하였고 각종 정보들을 보여준다. 하지만 Status가 실패된것으로 나온다. 어떠한 항목때문에 실패했는지에 대해서 확인을 할수가 없었다. 그래서 다른 리스너를 추가로 추가해서 왜 실패를 했는지 확인을 해보아야 한다.
리스너 항목을 보면 View Results Tree라는 리스너가 있다. 해당 리스너를 추가하여 다시한번 테스트를 수행하면 결과를 얻을수 있다. View Results in Table과는 다르게 개별 API 테스트 요청별로 상세한 정보를 확인할수 있었다. 위 그림에서와 같이 API Test를 수행했지만 Sampler Result의 값을 확인해보면 Response code:401이라는 항목을 확인할수 있다. API요청은 인증없이는 사용하지 못하도록 서버에서 설정하였기 때문에 테스트가 실패하였다. 그렇기 때문에 인증을 통과 할수 있도록 설정을 해주어야 한다. 인증은 헤더의 값에 발급받은 토큰정보를 통해 인증을 하는 방식을 사용한다.
등록한 Sampler에 마우스오른쪽을 눌러 컨텍스트 메뉴를 보면 Config Element > HTTP Header Manager가 있다. 여기에 발급한 토큰 정보 한개를 추가하여 Header를 통해서 인증할수 있도록 설정한다.
Header의 Authorization에 Bearer 방식으로 토큰정보를 입력한다. 이후 테스트를 다시 진행해보면 결과가 다음처럼 진행된다.
정상적으로 API 요청이 되었고 테스트가 진행되었다. 여기서 HTTP의 요청과 응답시간은 Sampler Time(ms)를 참고하면 된다.
자세한 리스너별 항목이 어떤 의미를 하는지는 해당 블로그를 참조하면 좋을것 같다.
( 참고 : https://ko.myservername.com/geomto-peulogeon )
이렇게하여 HTTP Request를 Jmeter를 통해 동시접속 테스트 하는 방법을 확인해 보았다. 여기서 좀더 다양하게 응용하여 여러가지 테스트를 한번에 같이 진해하보면 좋을것 같다. Sampler와 Listener의 그룹의 위치에 따라서 각각의 결과를 볼수도 있고 한번에 결과를 볼수도 있기 때문에 적절하게 잘 설정을 선택하여 구성을 하면 한눈에 보기 쉬운 테스트리포트를 얻을수 있을것 같다.
개인적으로 사용해본결과 해당 Thread Group내부에 여러가지 Sampler를 등록하여 전체의 결과의 Listener를 등록할 경우 Response Time등을 그래프로 한눈에 확인할수 있어 성능비교등에 사용하면 매우 활용도가 높을것이라고 예상된다.
'Dev > Infra & Module' 카테고리의 다른 글
Terraform Plugin 설치 환경구성 (0) | 2022.09.15 |
---|---|
Terraform 이란 (0) | 2022.09.15 |
Redis Client 접속 및 간단 명령어 (0) | 2022.08.22 |
Amazone SNS (0) | 2022.08.04 |
M1 쿠버네티스 MiniKube 설치 (0) | 2022.06.07 |
댓글