[JMeter] MacOS(M1)에서 JMeter를 이용한 부하 테스트
MacOS(M1)에서 JMeter를 세팅하고 실제 테스트를 진행하는 방법을 알아보자
📌 서론
JMeter는 오픈 소스 부하 테스트 도구로, 웹 애플리케이션의 성능을 측정하고 분석하는 데 유용하다. 이번 포스트에서는 MacOS(Apple Silicon)에서 JMeter를 설치하고 테스트를 진행하는 방법을 알아보자
1. JMeter 홈페이지에서 다운로드 진행
JMeter 홈페이지에서 Binaries 섹션을 찾은 다음 tgz 파일을 다운로드 받고 압축을 풀어준다.
Mac에서 다운로드를 하면 기본적으로 다운로드 폴더에 저장된다.
- 압축을 풀어주고 apache-jmeter 폴더를 원하는 경로(예: study 폴더)로 옮겨주면 된다.
2. JMeter 실행하기
터미널 실행
- JMeter를 실행하기 위해 터미널(iterm)을 열고, 다운로드한 apache-jmeter 폴더 내의 bin 폴더로 이동한다.
실행 명령어 입력
- bin 폴더에서 ./jmeter 명령어를 입력하면 JMeter가 실행된다. 만약 아래와 같은 화면이 나오면 성공적으로 실행된 것이다. (처음에 Warning이 나와서 약간 당황했다..)
./jmeter
JMeter 실행 완료
- 실행에 성공하면 자동으로 아래와 같이 JMeter 창이 열린다.
3. JMeter 세팅 - Thread Group
스레드 그룹 설정하기
- JMeter가 실행된 후 가장 먼저 Thread Group을 추가해 준다.
📌 잠깐! 스레드의 개수는 어떻게 설정하나요?
Thread Group에서 Thread 수를 조절해가며 테스트를 진행할 수 있다. 초기에는 10-20개 정도의 스레드로 시작해 서버 반응을 확인하고, 점진적으로 늘려가는 것이 좋다. 이렇게 하면 서버의 성능을 평가할 수 있고, 시스템이 과부하되는 것도 예방할 수 있기 때문이다.
스레드 개수 설정
- 위의 이유를 따라 나는 스레드의 개수를 20개로 설정해 줬다. (점차 늘리면서 테스트할 예정)
4. JMeter 세팅 - 테스트를 위한 Sampler 등록
테스트를 위한 Sampler(샘플러) 등록
- 다음은 테스트를 위한 Sampler를 등록해야 한다. 나는 API 요청 테스트를 할것이라 HTTP Request Sampler를 추가했다.
추가된 샘플러 확인
- 좌측 목록을 보면 Thread group하위에 방금 추가한 http Request(샘플러)가 추가되었을 것이다.
샘플러에 상세 테스트 정보 입력하기
- Sampler를 추가한 후에는 상세 테스트 정보(예: 프로토콜, 서버 IP, 포트, 경로 등)를 입력해야 한다.
- 프로토콜: http
- 서버 ip: loaclhost
- port: 8080
- Path: /jmeter/test (테스트할때 지정한 get 경로)
5. JMeter 세팅 - 테스트를 결과를 받아볼 리스너 설정
Sampler의 결과를 확인하기 위해 리스너를 설정한다.
- 기본적인 리스너로 'View Result in Table'를 사용할 수 있는데 이 리스너는 결과를 테이블 형태로 보여준다.
추가된 리스너 확인
- 리스너 추가가 완료되면 아래와 같이 Thread Group 하단에 View Result in Table이 표시된다. 리스너는 내가 내부에 추가적으로 설정하는것은 없다.
📌 요약
지금까지 JMeter설치, 샘플러(Http Request), 리스너(View Results in Table) 세팅을 진행했다. 이제 테스트 설정을 하고 직접 테스트를 진행해 보도록 하자.
6. JMeter 테스트 진행
테스트 버튼 누르기
- 좌측의 샘플러(HTTP Request)메뉴에 들어간 다음 상단의 테스트 버튼을 누르자 (이곳에 안들어와도 테스트 실행은 가능하다.)
경고창 등장
- 처음 실행하면 아래와 같은 경고창이 나온다.
경고창 자세히 살펴보기
You should save your test plan before running it. if you are using supporting data files (ie, for CSV Data Set or __StringFromFile), then it is particularly important to first save your test script. Do you want to save your test plan first?
📌 경고창 분석
이 경고 메시지는 테스트 계획을 실행하기 전에 먼저 저장하라는 권고다.
특히 CSV 데이터 세트나 `__StringFromFile` 함수와 같이 외부 데이터 파일을 사용하는 경우에는 테스트 스크립트를 먼저 저장하는 것이 중요한데. 이유는 다음과 같다.
데이터 파일 경로
- JMeter는 테스트 계획을 저장한 위치를 기준으로 외부 데이터 파일의 상대 경로를 찾는다. 테스트 계획을 저장하지 않고 실행하면, JMeter는 이 파일들의 정확한 위치를 찾지 못할 수도 있다.
테스트 재현성
- 테스트 계획을 저장하면 나중에 같은 테스트를 다시 실행하거나, 다른 사람과 테스트 계획을 공유할 때 유용하다. 테스트 결과를 재현하고 비교하는 데 도움이 된다.
작업 보호
- 만약 JMeter나 시스템에 문제가 생겨서 갑자기 종료된다면, 저장하지 않은 테스트 계획은 모두 사라질 수 있다. 그래서 정기적으로 테스트 계획을 저장해서 이런 위험을 줄인다.
📌 결론
이 경고창은 문제가 있어서 보여진게 아니라 원래 모두에게 나온다. 그냥 "Yes"를 누르고 테스트 계획을 저장한 후에 실행하면 된다. 이 경고창은 JMeter에서 표준적으로 나타나는 것으로, 테스트 스크립트와 관련된 데이터를 보호하고, 테스트의 재현성을 확보하기 위한 목적으로 유저에게 보여지는 것이다.
경고창 넘어가기
- 경고창에서 yes를 누르면 다음과 같이 테스트 계획을 저장하라는 팝업창이 나온다.
테스트 실행
- 테스트 계획파일(jmx)을 저장하고 나면 자동으로 테스트가 실행된다. 우측 화면을 보면 몇번을 실행했는지 확인할 수 있다. (아래 이미지를 보면 이전에는 0/0이었던 우측 상단의 테스트 측정수가 0/20으로 되어있었다.)
테스트 결과 확인하러 리스너로 이동
- 테스트 결과를 보기위해 설정해준 view results in table(리스너)로 들어가면 내가 설정한 20번의 테스트가 진행된 것을 확인할 수 있다. (20번은 스레드 개수다.)
혹시나 서버가 터졌나 확인해 봤다.
- 요청을 처리하는 java로 만든 http서버(tomcat사용 x)도 문제없었다.
7. 요청의 상세정보를 보여주는 view results tree 리스너 사용하기
리스너 변경 (요청의 상세정보를 볼 수 있는 "view results tree" 리스너로 변경)
- 리스너중에서는 View Results Tree 라는게 있다. 이 리스너는 이전에 사용했던 View Results in Table가 테이블 형태로 간단한 결과만 보여준 것과는 다르게 각 테스트에 대한 결과를 매우 상세하게 알려준다.
view results tree 리스너의 테스트 결과 확인
- 다시 테스트를 진행하고 view result tree 리스너로 들어가면 테스트 결과에 대한 상세정보를 제공하는것을 알 수 있다.
🤔 근데 만약 보안이 적용되어있다면 어떻게 할까?
인증/인가 정보가 필요한 경우 HTTP Header Manager를 사용해서 정보를 추가할 수 있다. 예를 들어 JWT 토큰을 사용한다면 'Authorization' 헤더에 'Bearer [token]'을 세팅하면 된다.
이제부터는 HTTP Header Manager를 세팅하여 JMeter를 사용하는 방법을 설명할 예정인데 그 전에 인증과 인가가 무엇인지에 대해서 먼저 알아보자
8. 인증(Authentication)과 인가(Authorization) 이해하기
인증(Authentication)과 인가(Authorization)는 밀접하게 연관된 두 과정이다. 이 둘은 사용자가 시스템에 접근하고 상호작용하는 방식을 정의한다.
인증 (Authentication)
- 인증은 사용자가 누구인지 확인하는 과정이다. 예를 들어, 로그인 시 사용자 이름과 비밀번호를 제공하는 것이 인증의 일부다. JWT는 이러한 인증 과정을 통해 생성된다. 생성된 JWT는 사용자의 신원을 나타내며, 암호화된 토큰 형태로 사용자의 신원과 권한을 포함한다.
인가 (Authorization)
- 인가는 인증된 사용자가 특정 자원이나 서비스에 접근할 수 있는 권한이 있는지 확인하는 과정이다. 예를 들어, 서버가 사용자에게 특정 웹 페이지에 대한 접근 권한을 허용하거나 거부할 수 있다.
JWT와 HTTP 요청
- JWT는 주로 인증 과정에서 생성되지만, HTTP 요청을 보낼 때 Authorization 헤더에 포함되어 인가 과정에 사용된다.
- Authorization 헤더에 JWT를 포함시키는 것은 서버에게 해당 요청이 인증된 사용자에 의해 이루어졌음을 나타낸다. 이는 특히 API 요청에서 중요하다.
JMeter에서 JWT 사용하기:
- JMeter에서 HTTP 요청을 보낼 때, JWT를 포함시키기 위해 'HTTP Header Manager'를 사용할 수 있다. 여기에서 JWT를 Authorization 헤더에 추가한다. 추가하는 형식은 Bearer [JWT 토큰]이다. 예를 들어, JWT 토큰이 abcd1234라면, Authorization 헤더는 Bearer abcd1234로 설정된다.
- 이렇게 설정함으로써, JMeter를 통해 보내는 요청은 서버에 의해 인증된 사용자가 보낸 것으로 간주되고, 사용자는 해당 요청에 필요한 권한을 가진 것으로 인식되어 요청이 성공하게 된다.
🎯 결론
결론적으로, JMeter에서 Authorization 헤더에 JWT를 추가하는 것은 HTTP 요청이 인증된 사용자에 의해 이루어졌음을 서버에게 알리는 데 필수적인 단계다. 이 과정을 통해 서버는 JMeter의 요청에 대한 인증 및 인가 상태를 확인할 수 있다.
9. JMeter 헤더 설정하기 (HTTP Header Manager)
HTTP Header Manager 세팅하기
- 등록한 Sampler(Http Request)에 마우스 우클릭을 한 다음 Config Element > HTTP Header Manager를 클릭한다.
Header 추가하기
- http header manager가 추가되었다면 하단의 "add" 버튼을 누른다.
헤더에 값 세팅하기
- key에는 Authorization을 적고 value에는 Bearer로 jwt를 세팅해 준다.
이제 다시 요청을 보내면 된다. (끝)
참조한 블로그 (좋은 지식 공유해주셔서 감사합니다!😊 (혹시나 참조가 문제가 될 시 삭제하도록 하겠습니다.))