nGrinder로 부하테스트해보기

Jung·2021년 12월 16일
1

TIL

목록 보기
65/77
post-custom-banner

이전에 적었던 글에서는 JMeter를 사용해 부하테스트를 진행해보았는데 요즘에는 nGrinder를 많이 사용한다고 한다.

간단 비교

nGrinder

The Grinder라는 오픈소스 기반으로 네이버에서 개발 한 오픈소스 프로젝트다.
스크립트를 작성함에 있어 JythonGroovy 두 가지 중 선택할 수 있다.
Groovy의 경우 JUnit 기반으로 되어 있어, 테스트 스크립트를 nGrinder 내에서 실행하기 전에, IDE에서 먼저 확인해보고 디버깅할 수 있다. 또한 스크립트를 수정할 수 있으므로 세밀한 성능 테스트가 가능하다.
계정 관리 기능이 존재하여 계정별 테스트 스케줄 및 이력 기능을 제공한다.

참고
https://skasha.tistory.com/62

JMeter

Apache에서 개발한 순수 JAVA로 개발된 성능 테스팅 도구이다.
Web Application을 테스팅하기 위해 디자인 되었지만, 플러그인을 이용하여 다른 기능도 테스트할 수 있도록 확장 할 수 있다.

  • Jenkins와 연동을 지원한다.
  • 플러그인을 이용하여 테스트 케이스를 XML 형식으로 작성 할 수 있다.
  • Load Test, Distributed Test, Functional Test 등을 지원한다.
  • 동시 스레드를 사용하여 다양한 사용자를 시뮬레이션하고 target에 대한 load(부하)를 생성할 수 있다.
  • 웹 응용 프로그램, 데이터베이스, 서버 테스트에서 작동하며 HTTP, JDBC, LDAP, SOAP, JMS 및 FTP와 같은 다양한 프로토콜도 지원한다.
  • Bean Shell & Selenium을 이용하여 자동화 테스트를 수행 할 수 있다.
  • Swing 기반의 Component를 지원하기 때문에 GUI가 이쁘지 않다. (중요)

마지막 이유 때문에 nGrinder를 사용해보게 된 계기이기도 하다.

JMeter 사용법은 이전에 적었던 JMeter 글에 있다.

참고
https://skasha.tistory.com/64

nGrinder

nGrinder Architecture

Controller

  • 부하 테스트를 위한 GUI를 제공한다.
  • 테스트 스크립트를 작성한다.
  • 테스트 프로세스를 체계화한다.
  • 테스트 결과를 수집해서 통계화한다.

Agent

  • Controller의 명령을 받아 부하를 발생시킨다.

Target

  • 부하 테스트를 받는 서버다.

nGrinder 공식 GitHub: https://github.com/naver/ngrinder/wiki/Installation-Guide

nGrinder는 자체 실행 가능한 WAR 파일로 배포되어 WAR 파일을 다운받아 WAR 파일을 구동시킬 수 있다. 또 다른 방법으로는 도커를 이용한 방법이다.

도커를 이용해서 nGrinder를 사용했다.

로컬에서 nGrinder를 사용해보려고 했지만 로컬 PC 환경이 Mac M1이라 도커를 이용하거나 WAR 파일로 실행하려 했을 때 --platform=linux/arm64가 아직 지원이 안 된 건지, 내가 못 한 건지 모르겠지만 정상적으로 되지 않았다.

그래서 컨트롤러용, 에이전트용 EC2(Ubuntu 18.04 LTS)를 새로 생성해서 진행했다.

nGrinder Controller, Agent, 테스트할 서버를 각각 구축하는 것이 좋다. 만약 세 가지 요소들을 하나의 서버로 구동한다면 서버가 온전히 성능 테스트만을 위해 자원을 사용할 수 없게 된다. 따라서 정확한 수치를 산출해내기 어렵다.

참고: https://junghyungil.tistory.com/176

일단 새로 생성한 EC2에 도커를 설치한다.

sudo apt-get update

sudo apt-get -y install \
apt-transport-https \
ca-certificates \
curl \
gnupg2 \
software-properties-common

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"

sudo apt-get update

sudo apt-get install -y docker-ce

sudo usermod -aG docker $USER
  1. Controller용 EC2에 도커를 설치했으면 Controller 이미지를 pull 하고 run한다.
    (태그 생략하면 latest가 자동으로 붙어 최신 버전을 pull 받는다.)
# pull
docker pull ngrinder/controller

# run
docker run -d -v ~/ngrinder-controller:/opt/ngrinder-controller -p 80:80 -p 16001:16001 -p 12000-12009:12000-12009 ngrinder/controller

그리고 EC2 보안그룹 인바운드에 위의 포트들을 추가해야 한다.

  1. Agent용 EC2에 도커를 설치했으면 Agent 이미지를 pull 하고 run한다.
# pull
docker pull ngrinder/agent

# run
docker run -v ~/ngrinder-agent:/opt/ngrinder-agent -d ngrinder/agent {컨트롤러 ip}:{컨트롤러 Host 포트}

컨트롤러 ip에는 EC2 퍼블릭 ip를 넣으면 되고 컨트롤러 포트Controller 이미지를 실행시킬 때 80:80에서 80포트로 설정했기 때문에 80을 넣으면 된다.

두 가지가 실행이 되었으면 웹 브라우저에서 EC2 퍼블릭 ip 주소:80에 접속하면

위 사진이 뜬다.

오늘 기준 latest 버전: nGrinder v3.5.5-p1

기본 아이디와 패스워드는 admin/admin이다.
로그인 하고 비밀번호를 바꿔주자.

에이전트를 확인하기 위해 에이전트 관리로 간다.
위에 있는 admin을 누르면 리스트가 나온다.

위 사진처럼 에이전트가 보이면 성공이다 !

사용방법은 다음에 계속...


직접 사용해보며 사용 방법을 적으려 했으나
agent is about to die due to lack of free memory.라는 오류 메세지와 함께 agent 서버가 죽는다.
agent 서버가 프리티어로 사용하는 EC2 인스턴스 유형이 t2.micro인데 성능이 낮아서 그런가..?

profile
97kim.github.io
post-custom-banner

0개의 댓글