[Goal]
API 성능 측정을 위해 nGrinder를 설치 및 사용해본다.
[Reference]
Docker Installation
Test Configuration Guide
nGrinder는 Naver에서 만든 성능 측정 도구입니다. 기본적인 아키텍쳐는 아래와 같습니다.
nGrinder를 사용하기 위해서는 Contoller와 Agent를 실행시켜야 합니다. 저는 Docker로 실행해보았습니다.
Controller
$ 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
컨트롤러는 전반적인 동작을 관리하는 요소인데, web UI를 통해 조작이 가능합니다. Docker로 nGrinder를 실행하게 되면,
- 80: controller web UI 포트
- 9010-9019: controller cluster에 agent가 연결되는 포트
- 12000-12029: stress test를 위해 controller가 사용하는 포트
이렇게 포트가 바인딩됩니다. 만약 포트를 바꾸고 싶으면 docker 실행 시 포트 포워딩 정보를 변경하면 됩니다.
Agent
$ docker pull ngrinder/agent
$ docker run -d --name agent --link controller:controller ngrinder/agent
에이전트는 이렇게 띄울 수 있습니다. 위 4가지 커맨드로 무려 1분만에 nGrinder 컨트롤러와 에이전트를 실행했네요. web UI를 80포트로 띄웠으니 브라우저에서 http://localhost 페이지를 호출하면 nGrinder UI를 확인하실 수 있습니다. 기본 id/pw는 admin입니다.
우측 상단의 Agent Management 메뉴로 들어가시면, 위에서 실행했던 agent가 정상적으로 등록되어있는 것을 확인하실 수 있습니다.
테스트할 API를 하나 만드시고, Script 메뉴로 들어가면 테스트할 스크립트를 작성할 수 있습니다.
Groovy 스크립트이지만 UI 메뉴를 통해 쉽게 스크립트를 작성할 수 있으므로 걱정하지 않으셔도 됩니다. :)
스크립트 이름을 입력하고, 테스트할 API의 정보를 입력합니다. GET/POST 방식을 지원하며 'Show Advanced Configuration' 부분을 클릭하시면 헤더, 쿠키, 파라미터 값을 추가적으로 설정할 수 있습니다. 여기서 주의하실 점은, URL에 'localhost, 127.0.0.1'로는 테스트가 불가하다는 점입니다. 저는 이 부분 때문에 시간을 좀 지체했네요. IP(ex. 11.11.11.11)부분에 본인 PC 혹은 테스트할 서버의 IP를 등록해주시면 됩니다.
스크립트 생성 후, 우측 상단의 'Validate' 버튼을 누르면 스크립트가 정상적으로 동작하는 지 검증하실 수 있습니다.
이제 상단의 Performance Test를 눌러서 실제 성능테스트를 진행합니다.
설정값은 본인의 필요에 따라 설정하시면 되고, Script 부분에는 위에서 만들었던 Script를 선택하시면 됩니다. Git에서 가져오는 방법도 있네요. 다 설정한 후에 우측 상단에 'Save and Start' 버튼을 누르시면 성능 테스트를 진행하게 됩니다.
마무리
여기까지 nGrinder를 설치해보고 간략하게 사용해보았습니다. Docker를 사용하니 훨씬 설치가 수월했고, 빠르게 성능테스트를 진행해볼 수 있었습니다. 다음에는 성능지표들에 대해 정리해보도록 하겠습니다.
'#BASIC' 카테고리의 다른 글
[Algorithm] Binary Search (이진검색) (0) | 2022.03.01 |
---|---|
[Gradle] Java Platform plugin (0) | 2022.02.08 |
[Kotlin] Functional (SAM) Interface (0) | 2022.02.07 |
[Gradle] Custom Plugin 만들어보기 (0) | 2022.02.06 |
[Kotlin] fun interface (0) | 2022.02.05 |