0.
본 게시글에서는 성능 테스트 도구인 nGrinder에 대해서 알아보고 직접 사용해보겠습니다.
1. nGrinder란
https://github.com/naver/ngrinder
nGrinder는 스크립트 작성, 테스트 실행, 모니터링, 보고서 생성까지 해주는 스트레스 테스트를 위한 플랫폼입니다.
테스트 스크립트를 생성하고 테스트 실행을 수행하는 웹 애플리케이션인 nGrinder controller와 부하를 생성하는 가상 유저 생성기인 nGrinder agent 2가지 요소로 구성되어 있습니다.
2. 설치
Docker를 이용하여 설치를 진행해보겠습니다.
$ docker pull ngrinder/controller
$ docker run -d -v ~/ngrinder-controller:/opt/ngrinder-controller
--name controller -p 80:80 -p 16001:16001 -p 12000-12009:12000-12009 ngrinder/controller
controller image를 내려받은 후 실행시켜줍니다.
$ docker pull ngrinder/agent
$ docker run -d --name agent --link controller:controller ngrinder/agent
동일하게 agent image를 내려받은 후 실행시켜줍니다.
3. 실행
80번 포트를 이용하여 접속시 위와 같은 화면을 볼 수 있습니다. 초기 아이디와 패스워드는 admin / admin 로 설정되어있습니다.
접속 후엔 위와 같은 화면을 볼 수 있습니다. 저는 제 개인 프로젝트를 대상으로 테스트를 진행해보겠습니다.
테스트를 위한 url을 입력한 뒤 테스트 시작 버튼을 누르시면 위와 같이 테스트를 위한 설정 화면이 나타납니다.
- 가상사용자
- 에이전트, 프로세스, 쓰레드를 곱한 값입니다.
- 스크립트
- 테스트에 사용하는 스크립트를 지정하는 항목입니다.
- nGrinder가 자동으로 생성한 스크립트를 사용하거나, 직접 작성하여 사용하실 수 있습니다.
- R HEAD 버튼을 눌러 작성된 스크립트를 확인가능합니다.
에이전트 값만 1로 변경한 뒤 바로 테스트를 진행해보겠습니다.
테스트를 위해서는 우측 상단에 저장 후 시작 버튼을 클릭하면 시작합니다.
초당 평균 21.5회의 요청을 처리하였고 최고 27.5 회의 요청을 처리하였습니다. 총 1247번의 테스트 중 1247번이 성공하였고, 에러는 한 번도 발생하지 않은 것을 확인할 수 있습니다.
상세 보고서를 클릭하시면 좀 더 정확한 정보를 확인할 수 있습니다.
이번엔 백엔드 API로 직접 요청을 보내보겠습니다.
nGrinder 화면 상단의 스크립트 버튼을 클릭하면 위와 같은 스크립트 관리 화면을 보실 수 있습니다.
만들기 → 스크립트 만들기 를 클릭하시면 위와 같이 스크립트를 생성하기 위한 창이 나타납니다. 헤더를 application/json으로 변경하신 뒤 스크립트 이름, 테스트할 URL, 요청 Body를 작성하시면 스크립트가 만들어집니다.
저는 로그인 테스트를 위해 로그인 요청을 위한 URL과 요청 바디에는 아이디, 패스워드를 지정하겠습니다.
만들기 버튼을 클릭하시면 작성된 스크립트를 확인할 수 있습니다.
작성된 스크립트를 저장한 후 성능 테스트 탭에서 테스트를 생성해줍니다.
이전에 작성해준 스크립트를 지정해줍니다.
이번에는 가상사용자 수를 50으로 늘려 테스트를 진행해보겠습니다.
테스트가 정상적으로 수행되었습니다. 이번에는 28초쯤부터 TPS가 줄어든 것을 확인할 수 있습니다.
평균 테스트 시간도 30초부터 증가하는 것을 확인할 수 있었습니다.
지금까지 성능 테스트를 위한 도구인 nGrinder의 간단한 사용 방법에 대해서 알아보았습니다. 다음 게시글에서는 이번에 진행한 테스트를 바탕으로 성능 개선을 진행해보도록 하겠습니다.
'백엔드' 카테고리의 다른 글
Parameter와 Argument (0) | 2023.06.20 |
---|---|
[디자인 패턴] 옵저버 패턴 (0) | 2023.06.19 |
[디자인 패턴] 싱글턴 패턴 (0) | 2023.06.11 |
단위 테스트를 위한 Mockito 사용법 (0) | 2023.06.06 |
Gradle에 대한 짧은 정리 (1) | 2023.06.04 |