부하테스트에는 여러가지 툴들이 있다.
그중 유명한 JMeter와 nGrinder가 있지만 비교적 자료 소스가 많고 설치 법과 사용법이 간단해서 JMeter를 고르게 되었다.
맥 OS인 나는 늘 그렇듯 brew로 설치를 하였다.
윈도우를 사용하다가 맥 OS로 갈아타니 자질구레한 설정까지 신경을 안써도 되서 너무 좋을 것 같다. brew짱
우선 대부분의 부하테스트 툴을 사용하기 위해서는 JAVA를 먼저 설치를 해야한다.
하지만 brew를 사용하여 설치하면 이미 내부에서 java를 먼저 설치하고 이후 jmeter를 설치한다
JMeter란 ?
Apache에서 만든 자바로 만들어진 웹 어플리케이션 성능 테스트 오픈 소스이다.
- 웹 - 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
JMeter를 이용해서 위와 같은 테스트를 할 수 있으며 필자는 웹 HTTP 통신을 테스트 할것이다.
brew를 이용한 설치법
brew install jmeter
jmeter를 실행법
open /usr/local/bin/jmeter // 대부분 이 루트로 가능
하지만 저 루트에 jmeter가 없어 명령어가 실행이 안될 결우 which 를 사용하여 jmeter의 경로를 확인 한 후
그 경로로 가서 open을 하면 된다.
> which jmeter
/opt/homebrew/bin/jmeter
> open /opt/homebrew/bin/jmeter


실행 성공 !
JMeter 테스트 용어
테스트 들어가기 전 JMeter 테스트 용어부터 알아보자.
- Thread Group : 테스트에 사용될 쓰레드 개수, 쓰레드 1개당 사용자 1명
- Sampler : 사용자의 액션 (예: 로그인, 게시물 작성, 게시물 조회 등)
- Listener : 응답을 받아 리포팅, 검증, 그래프 등 다양한 처리
- Configuration : Sampler 또는 Listener가 사용할 설정 값 (쿠키, JDBC 커넥션 등)
- Assertion : 응답 확인 방법 (응답 코드, 본문 내용 비교 등)
1. Thread Group. 테스트할 가상의 유저수를 설정
가상의 5명의 사용자가 1초만에 3번 반복 요청
2. Sampler 그 가상의 사용자들이할 것들을 정의
서버 ip, api url , 포트그리고 http 메소드를 명시한다.
3. listener
view Results Tree, Summary Report, View Results in Table 를 차례대로 생성해 준다.
그리고 상단 왼쪽에 초록색 실행 버튼을 누르면 아래와 같이 해당 테스트 정보를 파일로 저장할 것이냐는 알림이 뜬 후 실행이 된다.
View Results in Table 로 가보면 이상없이 한번에 5명이 3번의 요청 총 15 번이 잘 실행 됬음을 알 수 있다.


응답 body와 headers 등등 도 잘 나온다.
Summary Report
또한 시간도 평군 40ms로 큰 지연이 없다.
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 : 서버로부터 받은 데이터 평균
등등 여러 기능이 있는 거 같다.
더 많은 기능은 공식문서를 보며 필요한 기능을 찾아서 쓰면 잘 활용할 수 있을 것 같다.
우선 get 요청에서는 1초에 15번의 요청을 보내도 아무런 문제가 없는 것을 알 수 있다.
[Post] request body 사용하기
이전 GET 테스트를 하는것과 비슷하지만 request body에 json값을 보내기 위해서느 한가지 세팅이 더 필요하다.
HTTP Request 샘플러 아래에 HTTP Header Manager를 추가하여 Content-Type 헤더를 설정해야한다.
Content-Type에 application/json 이라는 Value를 설정.
최종적으로 위와 같은 세팅이 구조를 가지게 된다.
'외부활동 > immersion' 카테고리의 다른 글
주문 재고 요청시 동시성 제어 [REDIS 분산락(Distribution Lock)] (0) | 2024.05.28 |
---|---|
주문 재고 요청시 동시성 제어테스트 [트랜잭션/격리수준/LOCK/REDIS] (0) | 2024.05.28 |
포트원 결제 연동 플로우 정리 [노마드코더] (1) | 2024.04.27 |
AWS와 Slack 간단 연동하고 에러로그 알람 받기 [Cloudwatch, chatbot,Simple Notification Service ] (0) | 2024.04.19 |
Redis와 분산 락(Distributed Lock) (0) | 2024.03.18 |