-
[nGrinder] 서버 성능을 테스트하는 방법ETC 2022. 12. 20. 01:20
사내 서비스의 GS인증을 받기 위한 준비를 하고 있다.
인증 절차는 어떤식으로 진행이 되는지 알아야할 필요성을 느껴 조사를 좀 해보다가, 성능적합성 부문이 있다는 것을 발견했다. 실제 소프트웨어가 명시된 성능 목표를 만족하는지 테스트하는 절차였다.
이제까진 로컬이나 테스트 서버에서 포스트맨으로 요청을 보내 응답이 잘 오는지 체크해보는 정도가 다였는데, 이런 서버성능은 어떻게 테스트할 수 있나 궁금해졌다.
그래서 찾아보다 발견한 것이 nGrinder이다.
앞에 n이 붙은 것으로 알 수 있듯, 네이버에서 개발한 오픈소스이다. The Grinder라는 오픈소스를 기반으로 만들어졌다.
서버의 부하 테스트(stress test)를 제공하는 플랫폼으로, 직접 스크립트를 작성해 가상의 시나리오를 작성할 수 있고, 다양한 커스터마이징을 제공한다.
해당 사이트에 들어가면 다양한 언어의 유저 포럼도 있어서 정보를 공유하기 좋은 것 같다. 당연히 한국어도 있다.
https://naver.github.io/ngrinder/
직접 다운로드하여 사용할 수도 있지만, dockerhub에 이미지로도 제공되어 간편하게 사용할 수 있다.
nGrinder는 크게 두가지만 알아두면 된다.
Controller와 Agent이다.
Controller: 스크립트를 생성하고 부하 테스트를 실행시키는 웹 어플리케이션, 즉 부하를 발생하는 주체.
Agent: 요청을 생성하는 가상의 유저.
nGrinder 설치
docker가 설치되어있다는 전제에서, 다음 명령어를 실행해 이미지를 pull받는다.
nGrinder Controller
$ docker run -d -v ~/ngrinder-controller:/opt/ngrinder-controller -p 8080:80 -p 16001:16001 -p 12000-12009:12000-12009 ngrinder/controller:3.4
다음으로는 agent를 생성한다.
nGrinder Agent
$ docker run -v ~/ngrinder-agent:/opt/ngrinder-agent -d ngrinder/agent:3.4 <controller_ip>:<controller_port>
<controller_ip>:<controller_port> 이 부분에 컨트롤러의 ip주소와 port번호를 입력하면 된다.
만약 로컬에서 컨트롤러를 구성 후 80번 포트를 열었다면, <내 로컬ip 주소>:80 이렇게 입력하면 된다.
(* 이 때 localhost가 아닌, ipv4 주소를 정확히 입력해야한다.)
그 후 브라우저 주소창에 열어둔 ip주소와 포트번호를 입력하여 nGrinder 사이트에 접속, 로그인한다.
초기 id와 비밀번호는 admin, admin이다. 보안이 필요할 경우 최초 로그인 후 유저관리에서 다른 사용자는 삭제하고, admin의 패스워드를 변경해서 사용하면 된다.
http://localhost:80 // 로컬 접속시 id: admin password: admin
로그인하면 다음과 같은 창이 뜨는데, 프로필 - Agent Management에 내가 생성한 agent가 있는지 먼저 확인한다.
이렇게 agent가 뜨면 정상이다.
nGrinder 사용법
다시 메인으로 돌아와서, quick start에 테스트할 서버의 url 입력 후 start test 버튼을 누르면 테스트할 수 있는 페이지로 넘어간다.
여기서 테스트 환경 설정을 할 수 있다.
Agent: agent 수(내가 생성한 agent의 수만큼 max값으로 설정할 수 있다.)
vuser per agent: agent당 가상 유저 수
script: 테스트가 시작되면 보낼 요청 스크립트, 편집으로 원하는 유저 시나리오를 작성할 수 있다.
Target Host: 테스트할 서버의 url
Duration: 기간설정(Default: 1분)
Run Count: 스레드당 수행될 테스트 단위Script 오른쪽 R Head 버튼을 클릭하여 스크립트를 수정할 수 있다.
기본적으로 단위테스트와 비슷한 코드방식으로 작성되어 있는데, 알맞게 편집하여 원하는 api를 테스트할 수있다.
이를 이용하면 단순히 요청 하나씩만 보내는 것을 넘어 가상의 시나리오를 작성할 수 있다.
(ex. 로그인 -> 페이지 조회 -> 결제 요청)
테스트가 완료되면 다음과 같은 결과를 확인할 수 있다.
Detailed Report에서 더 상세한 결과와, csv 파일도 제공된다.
TPS를 눈여겨봐야하는데, Test Per Seconds의 약자로, 초당 몇 번의 테스트가 수행되었는지 나타내는 단위다.
pinpoint를 함께 사용해서 어디에서 요청이 지체되는지 등을 확인할 수도 있다.
nGrinder를 이용하면 다양한 환경에 맞는 테스트를 간편하게 할 수 있어 서버 문제점 파악과 성능 개선에 많은 도움이 될 것 같다.
'ETC' 카테고리의 다른 글
java.lang.NoClassDefFoundError 원인 및 해결방법 (0) 2022.12.19 Callback 함수란 무엇인가? 재귀함수와의 차이는? (0) 2022.10.03 [HTML/CSS] 입력폼 유효성 검사에 필요한 input태그 pattern 속성 (0) 2022.07.07 패스워드 암호화(해시, 솔트, 키스트레칭) (0) 2022.06.28