1. JMeter 소개
JMeter란?
Apache JMeter는 서버의 성능 및 부하를 측정할 수 있는 100% 순수 Java 기반의 오픈소스 테스트 도구이다. JMeter는 서버나 네트워크에게 과부하 시뮬레이션하여 강도를 테스트하거나 다양한 부하 유형에서 전체 성능을 분석할 수 있다. 특히 웹 서버 테스트에 특화되어 있어 정적 및 동적 자원, 웹 동적 애플리케이션 모두에서 테스트가 가능하다.
JMeter 의 주요 특징
- 다양한 프로토콜 지원 : HTTP, HTTPS, SOAP, REST, FTP, JDBC, LDAP, JMS 등 다양한 프로토콜 지
- 크로스 플랫폼 : 100% 순수 Java 애플리케이션으로 모든 플랫폼에서 실행 가능
- 멀티 스레딩 : 동시에 여러 스레드를 사용하여 동시 사용자 시뮬레이션 가능
- 확장성 : 플러그인을 통한 기능 확장 가능
- 시각화 도구 : 다양한 리스너를 통해 테스트 결과를 그래프, 차트 등으로 시각화
- 분산 테스트 : 여러 시스템에서 분산 테스트 지원
- 스크립트 지원 : BeanShell, JSR223, JDBC 등 다양한 스크립트 언어 지원
JMeter의 작동 원리
JMeter는 브라우저가 아니라 프로토콜 수준에서 작동한다. 테스트 진행 시, 웹 서비스와 원격 서비스에 대해 브라우저처럼 보이지만, 실제 브라우제에서 지원하는 모든 작업을 수행하지 않는다.
JMeter는 대상 서버에 요청을 보내는 사용자 그룹을 시뮬레이션하고, 테이블, 그래프 등을 통하여 대상 서버의 성능을 설명하는 통계 정보를 반환한다. 즉, JMeter 는 JavaScript를 수행하지 않으며, HTML 페이지를 랜더링 하지 않는다.
JMeter 주요 구성 요소
- Test Plan: 테스트 전체 구성
- Thread Group: 동시에 요청을 보내는 사용자 수를 정의
- Controller: Test Plan 구조에 중요하며, Sampler와 Logical Controller 로 구성
- Sampler: 서버에 요청을 보내는 역할 (HTTP, FTP, JDBC 등)
- Logical Controller: 요청을 조절할 수 있는 로직 제공
- Listener: 테스트 결과를 수집하고 시각화하는 역할
- Configuration Element: Sampler가 사용할 설정 값 제공 (쿠기, JDBC 연결)
- Assertion: 응답 결과의 성공 여부를 판단하는 조건 설정
JMeter 사용 모드
JMeter 는 두 가지 모드로 사용할 수 있다.
- GUI 모드: 테스트 계획 생성 및 디버깅에 사용
- CLI 모드: 실제 부하 테스트 실행에 사용 (리소스 효율성)
중요: 부하 테스트르 실행할 때는 CLI 모드를 사용하는 것이 권장된다. GUI 모드는 테스트 계획 생성과 디버깅에만 사용하고, 실제 테스트는 CLI 모드에서 실행하는게 효율적이다.
2. JMeter 설치
JMeter는 Java 기반 애플리케이션으로 설치 전에 Java가 시스템에 설치되어 있어야 한다.
https://jmeter.apache.org/download_jmeter.cgi
또는 brew 를 사용해서 설치가 가능하다 (mac 유저)
// 터미널에서 jmeter 설치
brew install jmeter
// 터미널에서 Jmeter 실행
open /opt/homebrew/bin/Jmeter
JMeter GUI 인터페이스

- 메뉴 바: 파일 관리, 편집, 실행, 옵션 등의 메뉴
- 툴바: 자주 사용하는 기능에 대한 바로가기 버튼
- 왼쪽 패널: 테스트 계획의 구조를 트리 형태로 표시
- 오른쪽 패널: 선택한 요소의 설정을 구성하는 패널
테스트 계획 생성
jmx 파일로 테스트 생성
JMeter를 실행하면 기본적으로 빈 Test Plan 이 생성되지만, 나는 XML 로 이뤄진 .jmx 파일로도 생성이 가능하다.

- GUI 로 만들 수 있지만, 반복되는 설정이 너무 많고 번거로워서 gpt로도 생성이 가능한 jmx 파일로 JMeter 테스트를 준비했다.
테스트

- 간단한 회원가입 테스트를 해봤다.
- 회원가입을 위한 데이터를 30개 정도만 사용해서 테스트를 진행했는데 데이터가 적어서 그냥 오류가 발생하더라도 요청을 해봤다.

- 초반 30개의 회원가입이 발생했을 때는 중복이 없기 때문에 성공했지만, 이후에 회원가입 로직은 모두 실패했다.

- 초반에 요청을 처리하면서 요청 시간이 갑자기 증가했다.
- 17:49:00에서 17:50:00 사이에 응답 시간이 급격하게 상승한 부분이 보인다.
- 혹은 특정 요청에 대한 처리 지연이 발생했다고 볼 수 있겠다.
- 하지만 정상적인 데이터를 넣은게 아니라 실패하는 데이터도 모두 넣었기 때문에 정확하게 분석하기는 어렵다.
3. Next
JMeter를 설치해보고, 직접 내 애플리케이션에 부하를 보내 보았다. 현재는 데이터가 부족하고 아직 애플리케이션의 부하를 테스트 할 정도로 기반을 다져놓지 않았기 때문에 이를 개선하고 JMeter로 부하를 테스트 해봐야겠다. 또한 어디에서 병목이 발생하는지 확인하기 위해 APM(애플리케이션 성능 모니터링)도 공부 해봐야겠다.