• JMeter는 오픈 소스 소프트웨어로, 웹 애플리케이션 등 다양한 서비스의 성능 테스트를 위한 툴
  • JMeter 설치
    • 바이너리 설치
      • Apache JMeter의 공식 웹사이트(https://jmeter.apache.org/download_jmeter.cgi)에서 JMeter를 다운로드
      • "Binaries" 섹션에서 .zip 파일을 선택후 다운로드
      • 다운로드한 .zip 파일을 압축 해제
      • 압축 해제된 폴더로 이동하여 bin 디렉토리를 찾고, jmeter.bat 파일을 실행하여 JMeter를 시작
  • JMeter 사용하여 테스트 계획 생성
    • 테스트 계획 추가

      • 메뉴에서 File > New를 선택하여 새 테스트 계획을 생성
      • 테스트 계획 저장시 별도의 폴더 생성하여 내용 저장
    • 스레드 그룹 추가

      image.png

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

      image.png

      • 스레드 그룹에 우클릭 > 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 로 둘 경우 동시성 이슈 재현 가능