- JMeter는 오픈 소스 소프트웨어로, 웹 애플리케이션 등 다양한 서비스의 성능 테스트를 위한 툴
- JMeter 설치
- JMeter 사용하여 테스트 계획 생성
-
테스트 계획 추가
- 메뉴에서 File > New를 선택하여 새 테스트 계획을 생성
- 테스트 계획 저장시 별도의 폴더 생성하여 내용 저장
-
스레드 그룹 추가

- 테스트 계획에 우클릭 > Add > Threads (Users) > Thread Group을 선택하여 스레드 그룹을 추가
- 동시에 요청을 보낼 사용자(스레드)의 수를 설정
-
HTTP 요청 추가

- 스레드 그룹에 우클릭 > Add > Sampler > HTTP Request를 선택하여 HTTP 요청을 추가
- 서버 이름 또는 IP: localhost
- 포트 번호: 8080
- HTTP GET 요청
- HTTP POST 요청
- 해당 HTTP Request에서 우클릭
- Config Element의 HTTP Header Manager추가
- Content-Type에 application/json추가
- Authorization에 토큰 추가
-
리스너 추가
- 테스트 결과를 보기 위해 리스너를 추가
- 스레드 그룹에 우클릭 > Add > Listener > View Results Tree, View Results in Table, Graphe Results 등을 선택
- 주요지표
- Throughput (처리량)
- 시스템이 일정 시간 동안 처리할 수 있는 작업의 양을 의미
- 보통 초당 처리 요청 수로 표현되고 Throughput이 높다는 것은 시스템이 많은 양의 요청을 동시에 처리할 수 있음을 의미
- Latency (지연 시간)
- 요청이 시스템에 도착해서 응답이 돌아올 때까지 걸리는 시간을 의미
- Latency가 낮다는 것은 사용자가 요청한 작업이 빠르게 처리된다는 것을 의미
-
테스트 시나리오
- jmeter에서 200명의 사용자가 동시에 1개씩 차감 update실행
- 상단 툴바에서 시작 버튼(녹색 삼각형)을 클릭하여 테스트를 실행
- 리스너에서 요청의 성공 여부와 응답 시간 등의 결과를 확인
- 재고수량이 빠진것보다 더 많은 주문이 생성되었는지를 확인
- 이는 lost update현상으로 MariaDB심화 내용 참고
- 다만, mariadb 11~12버전대 이후부터 repeatable read 격리수준에서도 동시에 read한 데이터를 다른 트랜잭션이 먼저 update한 이후 재차 update를 시도할 경우 에러 발생처리(Write Conflict Detection 정책 추가)
- SHOW GLOBAL VARIABLES LIKE 'innodb_snapshot_isolation' 로 조회
- SET GLOBAL innodb_snapshot_isolation = OFF 로 둘 경우 동시성 이슈 재현 가능