JMeter는 오픈 소스 소프트웨어로, 웹 애플리케이션을 포함한 다양한 서비스의 성능 테스트를 위한 툴이다.
요청을 동시에 여러 개 발생시키고, 응답 시간/처리량/성공 여부 같은 지표를 통해 시스템이 버티는 한계를 확인할 수 있다.
Apache JMeter 공식 웹사이트에서 JMeter를 다운로드한다.
https://jmeter.apache.org/download_jmeter.cgi
“Binaries” 섹션에서 .zip 파일을 선택해 다운로드한다.
다운로드한 .zip 파일을 압축 해제한다.
압축 해제된 폴더로 이동해서 bin 디렉토리를 찾는다.
jmeter.bat 파일을 실행해서 JMeter를 시작한다.
(Mac/Linux라면 jmeter 실행 파일을 사용한다)
File > New를 선택해서 새 테스트 계획을 만든다.동시에 요청을 보내는 “가상의 사용자 수”를 스레드로 설정한다.
Add > Threads (Users) > Thread Group 스레드 그룹 안에 실제 요청을 추가한다.
Add > Sampler > HTTP Request localhost8080GET/api/products/1)POST/api/orders)JSON 요청/인증 토큰이 필요한 경우가 많아서 헤더를 반드시 설정한다.
Add > Config Element > HTTP Header Manager추가할 항목 예시
Content-Type: application/jsonAuthorization: Bearer {토큰}테스트 결과를 확인하기 위해 리스너를 추가한다.
Add > ListenerView Results Tree: 요청/응답 상세 확인(디버깅용)View Results in Table: 결과 표로 확인Graph Results: 그래프 기반 확인주의할 점이 있다.
리스너를 많이 달면 JMeter 자체가 무거워져서 테스트가 왜곡될 수 있다.
실제 부하 테스트에서는 필요한 최소 리스너만 두고, 결과는 파일로 저장해서 분석하는 방식이 흔하다.
일정 시간 동안 시스템이 처리할 수 있는 작업의 양이다.
보통 초당 처리 요청 수로 해석하고, Throughput이 높다는 것은 많은 요청을 더 잘 처리한다는 의미다.
요청이 시스템에 도착해서 응답이 돌아올 때까지 걸리는 시간이다.
Latency가 낮으면 사용자 요청이 더 빠르게 처리된다고 볼 수 있다.
이번 목표는 “동시에 100명이 주문해서 재고가 정확히 100만큼 차감되는가”를 보는 것이다.
여기서 핵심은 “동시성 문제가 없으면” 결과가 정확히 떨어져야 한다는 것이다.
만약 재고가 900이 아니라 901~905처럼 애매하게 남거나, 주문 수가 100이 아닌 값이 나오면 동시성 제어(락/트랜잭션/격리수준/원자적 업데이트)가 제대로 되지 않았을 가능성이 높다.
update ... set stock = stock - 1 where stock > 0 같은 원자적 업데이트 방식이나, 비관 락/낙관 락 등을 고려해야 한다.