글 작성자: beaniejoy

 

  • Overview
  • Ngrinder dockerfile 구성
  • Ngrinder Controller에서 테스트 설정하기
  • 결론

 

📌 1. Overview

  • Spring Boot(Scale-out)
  • Docker
  • MySQL
  • Nginx(Load Balancer)
  • Redis

진행하고 있는 프로젝트의 대략적인 환경입니다. 여기에서 간단한 성능 테스트를 해보고자 Naver에서 Open Source로 제공하고 있는 Ngrinder 성능테스트 툴을 적용해보려고 합니다.

Ngrinder와 성능테스트에 대한 세세한 내용은 생략하고 단순히 Ngrinder 적용 방법에 대한 간단한 글을 적어둘까해요.
(사실 제가 나중에 보려고 적어두는 글입니다. ㅎㅎ)

 

📌 2. Ngrinder dockerfile 구성

Ngrinder war 파일을 직접 다운 받아서 하는 방법이 있습니다. 아래 링크를 통해 받으시면 됩니다.
https://github.com/naver/ngrinder/releases

 

Releases · naver/ngrinder

enterprise level performance testing solution. Contribute to naver/ngrinder development by creating an account on GitHub.

github.com

$ java -jar ngrinder-controller-3.5.5-p1.war --port=8300

releases 페이지에서 최신버전의 war 파일을 다운 받으시고 java 실행을 통해 war파일을 작동해주시면 됩니다.

하지만 저는 이렇게 다운받아서 하는 방법보다 docker 환경에서 이를 적용하는 것이 깔끔하다고 생각이 되어 docker 환경으로 적용하게 되었습니다.
https://hub.docker.com/r/ngrinder/controller/

 

Docker Hub

 

hub.docker.com

위 링크 가시면 친절하게 docker로 ngrinder 실행하는 방법에 대해 내용 확인할 수 있습니다.

# ngrinder-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

# ngrinder-agent
$ docker pull ngrinder/agent
$ docker run -d --name agent --link controller:controller ngrinder/agent
  • 80: ngrinder controller를 다룰 수 있는 Web UI 포트 (Default controller web UI port)
  • 9010-9019: agent가 controller에 붙게끔 해주는 연결다리 포트
  • 12000-12029: controller가 스트레스 테스트를 할당하는 포트

자세한 내용은 해당 링크에 다 설명되어 있습니다.

 

🔖 2-1. docker-compose.yml 로 구성

version: '3.8'
services:
  controller:
    image: ngrinder/controller
    restart: always
    ports: 
      - "9000:80"
      - "16001:16001"
      - "12000-12009:12000-12009"
    volumes:
      - ./ngrinder-controller:/opt/ngrinder-controller
  agent:
    image: ngrinder/agent
    restart: always
    links:    
      - controller

구글링해서 쉽게 확인할 수 있는 docker-compose.yml 구성으로 저는 ngrinder 실행하였습니다.

$ docker-compose up

해당 디렉토리에서 docker 실행해줍니다.

 

📌 3. Ngrinder Controller에서 테스트 설정하기

localhost:9000 에 접속하면 로그인 창이 나오는데 ID, PW 둘다 admin 으로 접속하면 됩니다.

메인 UI 창에서 오른쪽 위에 admin > Agent Management로 들어가서 agent 서버가 제대로 동작해서 controller에 잘 적용이 되어있는지 확인합니다. 여기에 아무것도 안나오거나 하면 문제가 있는겁니다.

그다음에 맨 위 tab에 Script 버튼을 클릭하면 위와 같은 창이 나옵니다. 거기에서 Create a script를 통해 script를 만들어야 합니다.

  • Script Name: 사용자 임의 지정 script 이름
  • 테스트하려는 API 주소와 경로
    GET http://[본인_local_ip_address]:[테스트 어플리케이션 port]/[테스트 하려는 경로]
    ex) http://본인_ip_주소:8080/mainCategory
    본인_ip_주소는 Mac 기준으로 시스템 환경설정 > 네트워크 에서 확인할 수 있습니다.
  • localhost, 127.0.0.1 이런 주소는 적용 안됩니다.

 

만들고 나면 Validate를 통해 해당 script가 이상 없는지 체크합니다. 여기서도 error가 발생하면 안됩니다.

script 생성을 완료하면 다음으로 Performance Test를 생성해야 합니다.
위에 tab에서 Performance Test > Create Test 로 생성하면 됩니다.

  • Agent: 방금 생성한 한 개의 script가 있기 때문에 1 입력
  • Vuser per agent: 테스트할 사용자 수 입력하시면 됩니다.
    (맥북에서 3000명으로 진행하다 agent is about to die due to lack of free memory 로 에러가 발생했습니다. 실행하는 controller 서버 사양에 따라 잘 조절하며 진행해야 될 듯 싶습니다.)
  • Duration: 테스트할 시간을 지정합니다.
  • Save and Start: 오른쪽 위 파란 버튼 클릭 후 바로 실행하면 됩니다.

간단하게 5명으로 테스트 해봤는데 위와 같은 결과가 나왔습니다. 이로써 테스트 환경설정부터 테스트 작업 진행까지 완료할 수 있었습니다.

 

📌 결론

  • Ngrinder는 성능 테스트 툴 중에 하나로 실제 기업에서 많이 사용하고 있는 툴이라 하네요.
  • 이를 이용해서 이번 프로젝트의 scale-out 과정에서의 성능 테스트를 해볼 계획입니다.
    진행하고 테스트에 대한 내용도 한번 작성해볼 생각입니다.

'Monitoring' 카테고리의 다른 글

Docker로 Elastic APM 구성하기 (Spring Boot 환경)  (2) 2021.08.09