Jmeter란?

3 minute read

target

→ 개발한 예측 모형 검증을 위하여 부하테스트를 통해 테스트 데이터 셋을 생성한다.

다양한 부하 테스트 툴이 많지만 Jmeter부터 해보기로 결정! cpu, memory 등 자원을 예측하는 모델을 만들고 테스트 하는 것은 데이터 셋에서 떼어내온 것들이다. 실제 다른 데이터들이 들어가도 해당 모델이 잘 예측을 할 수 있는지 의문이다. 그런 신뢰성을 위해 생각해낸 것이 부하테스트를 통해 원하는 데이터셋을 만들고 평가 해보는 것이다.

예를 들어, 근무하는 사람이나 학생들이 평일보다는 주말에 쇼핑을 많이 할 것이다. 물론 아닐 수도 있지만… 그런 패턴들도 잘 예측을 할 수 있을까? 평일에는 자원 사용이 없다가 주말에 급격하게 늘어난다면? 1주일을 가지고 다음 평일 하루를 예측할 때? 그냥 0 값을 내뱉을 것 같다. 오버피팅 문제도 있겠지만..학습 데이터가 일정하고 많이 있다면 문제가 없을 수 있지만 그런 예측은 사람도 할 수 있으니까!!

부하 테스트

→ 적절한 부하를 발생시켜 의미 있는 수치를 측정하는 테스트

→ 임계치의 한계에 도달할 때까지 시스템에 부하를 꾸준히 증가시키며 진행

→ 실 데이터 이외에 급변하는 데이터에 대한 예측 모형의 검증을 위해 진행

bitbrain_dataset

→ 위 사진은 bitbrian cpu_usage 데이터이다. 이 데이터가 다른 패턴의 데이터를 예측 할 수 있을까?



Jmeter란?

→ 클라이언트-서버 구조로 된 소프트웨어의 성능 테스트를 위해 만들어진 자바 기반 응용 프로그램

→ 가상 사용자들을 만들어서 과부하를 주는 프로그램

→ 성능 테스트 목적으로 주로 사용

https://jmeter.apache.org/

Jmeter 구성

  • 구성 요소 : 스크립트, 컨트롤러와 부하 발생기, 모니터링

  • Controllers는 Sampler와 Logical Controller로 구성되는데 Sampler는 서버로 전달되는 프로토콜을 정의한다.

    Logical Controller는 JMeter가 요청을 전달할 때 사용할 로직을 정의한다. 예를 들어 HTTP Request를 보낼 때 Cookie 정보를 같이 전송할 필요가 있다면 Logical Controller에 관련 내용을 정의할 수 있다.

  • Sampler는 서버로 전달되는 프로토콜을 정의

  • Listeners는 JMeter가 테스트를 수행하면서 수집하는 정보에 접근할 수 있는 수단을 제공한다. 테스트 요약 정보를 보거나 테스트 결과를 그래프로 표현한다.

  • 여러 쓰레드 구성이 가능

Ex. Thread1 : google, Thread2 : naver 반응 속도를 비교할 수 있다.

아키텍처

Jmeter 특징

  • 기능 : 웹 사이트 접속 가능 테스트 기능, 부하 테스트 기능 등
  • 다양한 플러그인, 프로토콜 제공
  • Jenkins와 연동되어 자동화가 가능
  • 라이선스 수량에 제한이 없음(접속 사용자 수를 무제한으로 둘 수 있음) → 사용자 수를 조절함에 따라 원하는 부하 모양으로 생성 가능
  • 성능지표 모니터링(75가지 성능지표가 존재) → 여러가지 변수를 모니터링 함으로써 분석에 용이

Jmeter Load Test(부하 테스트)

→ 적절한 부하를 발생시켜 의미 있는 수치를 측정하는 테스트

부하 : 실제 시스템에 적용될 예상 트래픽

1. 트랜잭션을 처리하기 위한 스크립트 작성

→ 반복적으로 실행할 트랜잭션은 하나의 업무만 적용하는 것이 합리적이다. (업무 패턴 재현 - 데이터 조회, 삽입 등)

  • 웹 페이지 스크립트 작성 - 작성한 db 정보를 통해 접속 후 데이터 조회
  • 리소스 자원 저장 스크립트 작성 - 날짜, CPU 점유율 등 vm 자체의 리소스 사용량 저장

2. 컨트롤러에 의한 부하 발생기

→ 동시 접속자 수를 설정하고 서버에 연결

→ 동시에 접속자들이 접속함으로 유저 수만큼의 트랜잭션 처리량에 의해 부하가 발생하는 원리 사용

1) Thread Group

→ 프로젝트를 수행할 하나의 그룹을 표현

Thread Group

2) Stepping Thread Group

→ 플러그인을 사용하여 설정

Stepping Thread Group

this group will start : 총 몇개의 Thread를 발생할것인가

Next, add : 몇개씩 더해질것인가

threads every : 몇초후에 더해질것인가

using ramp-up : Next add되는 데 걸리는 시간

Then hold load for : 몇초동안 최대 Thread를 유지할것인가

Finally, stop : 몇개씩 Thread를 줄일것인가

threads every : 몇초간격으로줄일것인가

3) HTTP Request

→ Http 요청을 서버에 전송하여 결과를 받아오는 부분

HTTP Request

Name : Http Request의 이름

Server Name or IP : 서버의 이름 or IP 주소 입력

Port Number : 접속 시 사용할 포트 번호 입력

Protocol : 사용할 프로토콜 입력

Method : 전송 방식 선택

Content encoding : 인코딩 방식 선택

Path : 접속할 경로 입력

4) Listener

→ 테스트 결과를 출력해주는 Listener 추가

→ 주로 사용하는 것이 View Result Tree, Summary Report이다.

View Result Tree

view Result Tree : 데이터 하나하나 전송되는 것을 볼 수 있는 기능 → 상세한 결과를 볼 수 있고, 검색 기능을 제공한다.

View Result Tree

Summary Report : 결과 레포트

→ 요약된 결과를 보여준다.

5) Agent Server

→ Agent를 통한 서버 모니터링 방식

→ 서버에 Agent를 설치하고 Jmeter에서 실행

→ 각 평가지표를 실시간으로 모니터링이 가능

Agent Server

Leave a comment