Basic/코딩기초

[코딩기초] nGrinder를 이용한 부하 테스트

코딩공대 2023. 7. 22. 09:30
728x90


내가 만든 게시판 서비스가 부하를 얼마나 버티는지 확인하고 싶어서 검색해보니 많은 테스트툴이 있었다. 
(nGrinder, Apache JMeter, Locust 등....)

 => 테스트를 진행하기 위해선 3가지 기능을 지원하는게 좋다.
    1. 시나리오 기반의 테스트가 가능해야 한다.
    2. 동시 접속자 수, 요청간격, 최대 Throughput 등 부하를 조정할 수 있어야 한다.
    3. 부하 테스트 서버 스케일 아웃을 지원하는 등 충분한 부하를 줄 수 있어야 한다.

나는 nGrinder를 통해 테스트를 진행하려 한다.

nGrinder를 선탁한 이유는 위의 3가지 기능을 제공하고, 한글을 지원, Groovy문법 지원을 해 사용하기 편리하기 때문이다.

🟡 테스트 종류

: 스트레스 테스트(StressTest), 부하테스트(LoadTest)

 

스트레스 테스트

  • CPU, RAM, DISK 환경이 갖추어지지 않은 어플리케이션에 비정상적으로 높은 부하를 발생시켜 한계점을 테스트해보는 것을 말한다.

  • 실제로 이러한 부하가 발생시키면 VM서비스의 다운, 데이터의 소실 등의 시스템라벨의 오작동을 유발시키는 것이 가능하다.


  • 이러한 결점과 결함점을 찾는 것을 목표로 스트레스 테스트가 진행되어진다.


  • 어디까지나 시스템레벨에서의 결함을 예상하는 수준으로 결과물을 파악하는 것이 중요하며, 실 접속자가 발생시키는 부하량과는 매우 다른 케이스를 가질 수도 있다는 점을 유의한다.



부하 테스트

  • 적절한 부하를 발생시켜서 통계적으로써 의미있는 수치를 측정한다.


  • 장시간의 서비스 진행여부를 확인하는 신뢰성


  • 실체 처리능력을 가능하는 성능테스트


  • '부하'라는 것은 매우 포괄적이므로, 부하테스트에 사용되어지는 부하의 모든 의미를 내포하는 것으로 이해하면 좋다.

👍 nGrinder에 대해 먼저 알아봅시다. 

 

nGrinder란?
  • nGrinder는 네이버에서 제공하는 성능 테스트용 오픈 소스이다.


  • Controller와 Agent로 이루어져 있다.

 

 

Controller
  • 성능 테스트를 위한 웹 인터페이스를 제공


  • 테스트 프로세스를 조정


  • 테스트 통계를 수집하고 표시


  • 사용자가 스크립트를 생성하고 수정할 수 있는 기능 지원


Agent
  • Agent Mode가 실행될 때 Target 서버에 프로세스 및 스레드를 실행 시켜 부하 발생


  • Moniter 모드에서 실행 시 대상 시스템 성능 ( 예 : CPU / 메모리 ) 모니터링

🖥️ Docker에 nGrinder 설치하기

1.일단 Controller를 설치한다.

 -> docker pull ngrinder/controller

 -> docker run -d -p 80:80 -p 16001:16001 -p 12000-12009:12000-12009 ngrinder/controller

 -> Docker 실행화면

  • 80 : 80 -> Controller 웹 UI를 위한 포트 매핑, nGrinder의 웹 인터페이스에 접근하기 위해 호스트의 80번 포트를 컨테이너의 80번 포트로 매핑하고 웹 브라우저에서 'http:localhost'를 통해 접속할 수 있다.

  • 16001 : 16001 -> Agent를 Controller에 연결되기 위한 연결 포트, Agent는 테스트를 수행하는데 사용되는 원격 머신이다.

  • 12000 - 12009 : 12000 - 12009 -> Controller가 스트레스 테스트를 위해 사용하는 포트 범위이다. nGrinder가 테스트를 수행할 때 컨트롤러가 호스트의 12000에서 12009사이의 포트를 사용하여 테스트를 할당한다.

 

 

2. Agent를 설치한다.

 

 -> docker pull ngrinder/agent

-> docker run -d --name agent --link controller:controller ngrinder/agent