1.실제 내가 만든 게시글 작성 기능이 최대 몇명의 인원까지 버틸 수 있는지
2.현재 디비가 버틸 수 있는 트랜잭션의 양이 어느정도 인지
3.현재 프레임워크에서 처리속도를 유지 할 수 있는 요청양은 어디까지인지 등
네이버에서 성능 측정 목적으로 개발된 오픈소스 프로젝트이며, The Grinder라는 오픈소스 기반으로 개발되었다.
nGrinder는 서버에 대한 부하 테스트를 하는 것으로 서버의 성능을 측정할 수 있다.
스크립트를 작성함에 있어 Jython과 Groovy 두가지 중 선택 할 수 있다.
Groovy의 경우 JUnit 기반으로 되어 있어, 테스트 스크립트를 nGrinder 내에서 실행하기 전에, IDE에서 먼저 확인해보고 디버깅할수 있다는 점이 큰 장점이다.
또한 스크립트를 수정할 수 있으므로 세밀한 성능 테스트가 가능하다.
계정 관리 기능이 존재하여 계정별 테스트 스케줄 및 이력 기능을 제공한다.

Controller: (테스팅을 위한 인터페이스를 제공하는 서버)
부하 테스트를 위해 웹 인터페이스 제공.
테스트 프로세스를 체계화.
테스트 결과를 수집해서 통계화.
WAS 기반으로 동작.Agent: (Controller가 명령을 받아 실제 부하를 발생시키는 서버)
Controller의 명령을 받아 실행.
agent 모드가 실행될 때, target이 된 머신에 프로세스와 스레드를 실행시켜 부하를 발생.
monitor 모드가 실행되면 대상 시스템의 CPU와 Memory를 모니터링.Target: (부하테스트의 대상이 될 서버)
부하 테스트를 받는 머신.
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이다