Right now do !

Gatling - 또 하나의 성능 테스트 도구 - 1탄 일단 해보자

by 지금당장해

프롤로그

 성능 테스트는 사용자에게 전달될 시스템을 완성해가는 마자막 단계에서 성능 요구사항을 충족했는지 목표했던 평균 응답시간이 나오는지 해당 시스템이 몇 명의 동접자와 부하에서 오류를 내는 시점(임계점)에 도달하는지를 증명해 보여야 할 때 주로 사용된다. 개발자들은 보통 H/W나 OS, WAS 같은 인프라 요소 탓을 하는데 필자가 경험 해보면 문제는 대부분 비즈니스 로직에 있었고 때때로 DB 혹은 DB 연결객체 pooling 설정 부족으로 인해 쉽게 임계점에 도달하는 경우를 많이 봤다. 

 필자는 비즈니스 로직이 포함된 웹 어플리케이션의 테스트 보다는 현재 만들고 있는 Web, WAS 시스템의 성능적인 문제를 검증할 목적으로 성능 테스트를 바라보고 있다. 이유야 어찌 했던 웹 어플리케이션을 하나 정해놓고 테스트 시나리오를 구성하고 이를 동시접속자를 부여하여 여러번 혹은 정해진 시간동안 테스트하며 시스템을 모니터링 한다. 갑자기 그런 생각이 들었다. 아~ JMeter 밖에 없나?

잠깐 검색을 해봤는데 Gatling 이라는 도구가 툭!!! 하고 보인다.

 

https://gatling.io/

 

Gatling - Professional Load Testing Tool

Gatling is a load testing tool for web applications, designed for DevOps and Continuous Integration. Try Gatling now!

gatling.io

 

요즘에는 뭐 찾으면 유튜브에서 자료를 먼저 찾는다. 어떻게 쓰나, 테스트를 돌리고 나면 어떤 자료를 보게되나?  상당히 긴 동영상을 필요한 목차만 눌러서 본결과 .... 오호!!!

https://www.youtube.com/watch?v=CPBWawzVeTo&list=WL&index=67 

사용 해보기로 했다.

개념

현재 까지 필자가 파악한 이솔루션 구조는 다음과 같다. 더 자세히 알게되면 이 그림이 바뀔지도 모르겠다. 필자도 학습하고 있는중이니 좀 잘못 이해한 부분이 있다면 독자 여러분들의  댓글 부탁 드린다.

 

Gatlering 동작 구조

 

어떤 방식을 사용하던 simulation java 파일을 직접 코딩할 것이 아니라면 브라우저를 통해 이루어진 동작을 기록해야 하는데 이 역할을 하는 모듈이 recoder다. recoder를 통해 수집된 테스트 시나리오를 java code로 변환 한다. Gatling은 이 java file을 실행하여 부하 테스트를 수행하며 결과를 기록한다. 

환경설정

패키지 다운로드 및 사용법

gatling 사이트에서 Open source 버전을 다운로드 받는다. (Enterprise는 공짜가 아니다.) 압축 파일이 하나 다운로드 되는데 톰켓처럼 압축 파일을 풀어 bin 디렉터리에 있는 쉘을 실행하는 방식이다. 

 

Gatling Open-Source 버전 다운로드

/bin 디렉터리를 열어보면 여러 쉘 혹은 윈도우즈 배치 파일이 보이는데 필자는 현재 recoder.sh, gatling.sh 만 사용했다. 또한 이 글에서 두가지 만 다룬다.

 

플러그인 프로젝트 다운로드 및 사용법

준비된 테스트 시나리오 대로 레코드(기록)을 하고 생성된 java file을 gatling.sh를 통해 테스트 실행 할 수도 있지만 IDE 프로젝트로 만들어 활용할 수도 있는데 이는 git hub에 게시된 프로젝트를 받아 시작 할 수 있다. 언어는 java, scala, kotlin 셋 중에 하나 선택 할 수 있고 의존성 도구는 Maven 혹은 Gradle 을 선택해서 사용 할 수 있는데 필자는 가장 익숙한 java - Gadle 조합을 선택해서 다운 받았다.

https://github.com/gatling/gatling-maven-plugin-demo-java

 

GitHub - gatling/gatling-maven-plugin-demo-java

Contribute to gatling/gatling-maven-plugin-demo-java development by creating an account on GitHub.

github.com

이 프로젝트는 데모 프로젝트다 벤더 측에서 벤더사 시스템을 대상으로 부하 테스트를 하게끔 예제를 구성 해놨는데 이를 지우던지 무시하고 사용자가 레코드한 결과물(필자는 java 파일)을 포함시켜 테스트를 실행 할 수 있게 했다. 이렇게 개발 환경에서 테스트를 진행하면 좋은 점이 조건이나 시나리오를 추가해서 사용하기 용이하고 필요에 따라 트레이스 디버그도 가능하다는 점이다. 

아래 그림에서 붉은 색으로 표시한 파일이 필자가 추가한 Simulation java 파일이다.

Gatling gradle - java demo project

추후 제세히 설명하겠지만 Engine 이라는 클래스가 gatling.sh를 실행하는 것과 유사한, load test를 진행시키는 클래스다. 이를 실행하면 다음과 같이 IDE terminal에서 어떤 시나리오를 실행 할 지 선택하는 창이 나타나고 이를 통해 부하 테스트가 진행 된다.

Java demo project 실행

기록하기

recorder 를 사용한 기록

말 그대로 기록을 하는 역할을 한다. 부하 테스트 ... 하면 되지 하는 사람들은 않해본 사람들이다. 상당히 성가신 일이다. 성가신 일의 대부분은 시나리오를 만들어 그에 따른 요청을 만드는(기록하는) 일인데 이 솔루션은 2가지 방식을 제공한다. 

HAR covert mode로 기록하기

하나는 크롬 DevTools를 켜서(F12: 개발자 분들은 다 알죠.) 요청 수행한 결과를 HAR(HTTP archive) 파일로 저장한다. 크롬에서 이를 만드는 과정에 대한 설명은 아래 그림으로 갈음한다.

크롬에서 HAR 파일 만들기

 이렇게 만들어진 HAR 파일을 recoder에게 주고 만들어 줘 ... 하면 JAVA코드가 떨어진다. 이 자바 코드에는 HAR에 기록된 요청에 대한 정보가 모두 담겨있어 이를 실행하면 브라우저에서 기록한 동작 그대로 테스트 대상 서버로 다시 요청이 진행 된다.

 

HTTP proxy mode로 기록하기

다음 방법은 사용자의 브라우저 사용과정을 그대로 기록할 수 있는 방법이다. 기록이 편한 만큼 설정이 다속 복잡했다. 그도 그럴것이 그야말로 proxy 방식을 사용하기 때문이다.

 

step 1.

테스트 하려는 시스템은 localhost:8080 이런 개발자 용 host정보로는 불가능 하니 도메인 설정이 불가능 하다면 hosts 파일이라도 편집하여 대상 시스템(Web 혹은 WAS)에 적당한 host 명을 지정한다. 

 

step 2.

OS 네트워크 설정에서 다음과 같이 Web Proxy를 설정한다. 그림은 mac 환경인데 windows도 비슷한 설정이 있다.

step 3. gatling 패키지 bin/recoder.sh 를 실행하고 다음과 같이 설정한다.

gatling-charts-highcharts-bundle-3.7.6/bin

Gatling recoder - HTTP Proxy mode

화명 우 상단에 Recorder mode를 HTTP Proxy로 설정한다. 사실 특별하게 설정할 것도 없다. 그냥 기본 값들이다. 그리고 우 하단에 Start ! 버튼을 클릭한다. 그러면 아래와 같은 화면이 나타나는데 그러면 Proxy 방식으로 요청이 기록된다.

Gatling recoder - running...

이 후 브라우저로 해당 시스템에 접속하여 시나리오 대로 사용을 하면 기록이 된다. 시나리오 전개가 다 끝나고 나면 위 화면에서 Stop & Save를 클릭하면 java 소스코드가 생성된다.

 

Gatling recoder - 기록 중

로드 테스트 하기

recoder를 이용하여 기록을 하고나면 (Stop & Save) Simulations folder 에 Java 파일이 생성되었을 것이다. 변경할 수 도 있지만 일단 기본 값을 그냥 뒀다. 그리고 나서 gatling.sh를 실행하면 로드 테스트가 실행 된다. gatling은 소위 따발총, 기관총 이라고 불리는 총의 종류란다. 총을 막 쏘아대듯이 테스트 요청을 날린다 뭐 그런 의미로 만들어진 이름 일것으로 추정한다. 암튼 gatling.sh를 쉘에서 실행한 모습이다.

gatling.sh 실행

필자가 만든것이 0, 2 번이고 나머지는 예제인듯 하다. 필자가 만든 0 번을 선택해봤다. 0 입력하고 엔터하면 된다. 그리고 "Select run description (optional)이라는 문구가 보이면 대충 메시지 쓰고 엔터 뭔가 막 실행한다. 사용자가 만든 시나리오를 순차적으로 실행하고 마지막에 다음과 같은 결과를 리포트 한다. 부족하다 생각하면 브라우저로 이쁘게 보라고 안내도 한다.

gatling report
gatling report web

애필로그

이번글은 gatling이라는 솔루션을 사용하기 위한 간단한 용법 위주로 휘리릭 지나갔다. 동접자나 테스트 지속시간 설정등 진정한 의미의 로드 테스트가 이루어지기 위해 많은 추가 설정이 필요하다. 이런 내용을 포함한 좀더 심화한 학습 내용르 예고하며 이번글은 여기서 마친다. 

블로그의 정보

지금 당장 해!!!

지금당장해

활동하기