nGrinder 부하테스트

김성훈·2022년 1월 29일

개념

목록 보기
7/8

부하테스트

  • 부하 테스트는 성능 테스트와 성능튜닝이이 어느 정도 완성되면 해당 소프트웨어 혹은 서비스를 대표할 수 있는 기능을 선정하여 해당 하드웨어 및 네트워크 환경에서 얼마나 많은 사용자가 동시에 사용할 수 있는지 테스트하는 것을 말한다.
  • 서비스가 로직적으로 테스트가 잘 진행돼어도, 실제 상황에 대해서 다량의 인원이 여러 요청을 하는 경우에 대한 부하의 한계를 파악하기가 힘들다.
  • 실제로 그러한 장애 상황이 오는 것을 대비하기 위해서라도 서비스의 부하 테스트를 해보는 작업이 필요하다.

    1.실제 내가 만든 게시글 작성 기능이 최대 몇명의 인원까지 버틸 수 있는지

    2.현재 디비가 버틸 수 있는 트랜잭션의 양이 어느정도 인지

    3.현재 프레임워크에서 처리속도를 유지 할 수 있는 요청양은 어디까지인지 등

nGrinder

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

nGrinder 구조

Controller: (테스팅을 위한 인터페이스를 제공하는 서버)
부하 테스트를 위해 웹 인터페이스 제공.
테스트 프로세스를 체계화.
테스트 결과를 수집해서 통계화.
WAS 기반으로 동작.

Agent: (Controller가 명령을 받아 실제 부하를 발생시키는 서버)
Controller의 명령을 받아 실행.
agent 모드가 실행될 때, target이 된 머신에 프로세스와 스레드를 실행시켜 부하를 발생.
monitor 모드가 실행되면 대상 시스템의 CPU와 Memory를 모니터링.

Target: (부하테스트의 대상이 될 서버)
부하 테스트를 받는 머신.

nGrinder 실행방법

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

처음에 로컬에서 nGrinder를 돌려보려고 했지만 정상적으로 테스트가 진행되지 않았다 이유를 찾아보니 내 로컬서버에 스팩이 구려서 그랬다.
어쩔 수 없이 새로 AWS EC2를 생성해서 진행했다.

기본적으로 nGrinder와 같은 오픈소스를 이용한 성능테스트를 할때는 높은 성능의 서버를 이용하는 것이 좋다고 한다. 그래야 성능 테스트의 결과를 비교적 정확히 파악할 수 있다고 함.

또한 Controller , Agent 그리고 테스트할 서버를 모두 각각 구축하는 것이 좋다. 만약 세 가지 요소들을 하나의 서버로 구동한다면 서버가 온전히 성능 테스트만을 위해 자원을 사용할 수 없게 되기 때문에 정확한 수치를 산출해내기 어렵다.
EC2 2개 파기

처음에 새로 생성한 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

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 보안그룹 인바운드에 위의 포트들을 추가해야 한다.

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에 접속하면

이렇게 뜨는 기본 아이디와 패스워드는 admin/admin이다

<출처>

카샤의 만개시기 nGrinder
리눅스 서버에 ngrinder 설치하기
nGrinder로 부하테스트해보기

profile
화이팅

0개의 댓글