ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [nGrinder] 서버 성능을 테스트하는 방법
    ETC 2022. 12. 20. 01:20

     

     

    사내 서비스의 GS인증을 받기 위한 준비를 하고 있다. 

    인증 절차는 어떤식으로 진행이 되는지 알아야할 필요성을 느껴 조사를 좀 해보다가, 성능적합성 부문이 있다는 것을 발견했다. 실제 소프트웨어가 명시된 성능 목표를 만족하는지 테스트하는 절차였다.

     

    이제까진 로컬이나 테스트 서버에서 포스트맨으로 요청을 보내 응답이 잘 오는지 체크해보는 정도가 다였는데, 이런 서버성능은 어떻게 테스트할 수 있나 궁금해졌다.

     

    그래서 찾아보다 발견한 것이 nGrinder이다.

    앞에 n이 붙은 것으로 알 수 있듯, 네이버에서 개발한 오픈소스이다. The Grinder라는 오픈소스를 기반으로 만들어졌다.

    서버의 부하 테스트(stress test)를 제공하는 플랫폼으로, 직접 스크립트를 작성해 가상의 시나리오를 작성할 수 있고, 다양한 커스터마이징을 제공한다.

     

    해당 사이트에 들어가면 다양한 언어의 유저 포럼도 있어서 정보를 공유하기 좋은 것 같다. 당연히 한국어도 있다.

    https://naver.github.io/ngrinder/

     

    nGrinder

    Please post questions in Discussions not Issues. nGrinder 3.5.5-p1 version is now available. Check the changes at here. nGrinder is a platform for stress tests that enables you to execute script creation, test execution, monitoring, and result report gener

    naver.github.io

     

    직접 다운로드하여 사용할 수도 있지만, dockerhub에 이미지로도 제공되어 간편하게 사용할 수 있다.

     

    nGrinder는 크게 두가지만 알아두면 된다.

    ControllerAgent이다.

     

    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를 이용하면 다양한 환경에 맞는 테스트를 간편하게 할 수 있어 서버 문제점 파악과 성능 개선에 많은 도움이 될 것 같다.

    댓글

Designed by Tistory.