서버 성능 테스트 플랫폼인 nGrinder를 공부했던 내용을 정리한다.
진행을 하면서 공부했던 nGrinder란 어떤 것이고 성능 테스트 오픈 소스 플랫폼은 어떤 것이 있고 nGrinder 설치 과정에 대해서 정리한다.
nGrinder는 네이버에서 기존 오픈소스인 Grinder를 커스텀해서 개발했다.
nGrinder의 공식 Github 사이트는 다음과 같다.
목차
- 성능 테스트란?
- nGrinder VS Apache jmeter VS Gatling
- nGrinder
- nGrinder 설치 과정
성능 테스트란?
성능 테스트의 목표는 Load, Stress, Soak 테스트와 같은 여러 유형의 성능 테스트를 사용하여 정의된 워크로드 하에서의 시스템 성능을 판별하는 것이다.
성능 테스트와 부하 테스트는 혼동되어 사용되곤 하는데 부하 테스트는 스트레스 테스트와 함께 성능 테스트의 하위 요소에 속한다.
- 부하 테스트(Load Test)
- 부하 테스트는 실제 부하 조건에서 시스템, 소프트웨어 제품 또는 소프트웨어 응용 프로그램의 성능을 결정하는 성능 테스트 유형
- 스트레스 테스트(Stress Test)
- 스트레스 테스트는 시스템의 안정성과 신뢰성을 검증하는 일종의 소프트웨어 테스트
- 부하 테스트와 스트레스 테스트의 차이점
- 부하 테스트는 극한의 부하에서 시스템이 어떻게 작동하는지 확인 / 프로그램 성능 / 병목현상 확인 테스트
- 스트레스 테스트는 극한의 부하에서 시스템 용량의 상한 이해 / 시스템 견고성을 테스트
nGrinder VS Apache Jmeter VS Gatling
성능 테스트를 위한 유명한 오픈소스 플랫폼은 다양하지만 여기서는 nGrinder, Apache Jmeter, Gatling에 대해서만 간략 소개한다.
성능 테스트 플랫폼 | 설명 | GUI 지원 | 도커 이미지 |
사용 언어 |
nGrinder (https://naver.github.io/ngrinder/) |
스크립트 작성, 테스트 실행, 모니터링 및 결과 보고서 생성을 동시에 실행할 수 있는 스트레스 테스트용 플랫폼이다. |
O | O | Jython Groovy |
Apache Jmeter (https://jmeter.apache.org/) |
기능 동작을 테스트하고 성능을 측정하도록 설계된 100% 순수 Java 애플리케이션 오픈 소스 소프트웨어이다. | O | X | Java |
Gatling (https://gatling.io/) |
Load-Test-As-Code: DevOps 및 CI/CD용으로 설계된 애플리케이션을 로드 테스트하는 플랫폼이다. | O | X | Scala |
필자는 해당 3가지 테스트 플랫폼 중에서 nGrinder를 선택했다.
선택한 이유는 다음과 같다.
- 도커 이미지 지원으로 간편한 설치
- Groovy 언어로 Java와 비슷하게 사용 가능
- 모니터링 GUI 지원
nGrinder
- nGrinder는 스크립트 작성, 테스트 실행, 모니터링 및 결과 보고서 생성을 동시에 실행할 수 있는 스트레스 테스트용 플랫폼이다.
- 오픈 소스 nGrinder는 불편함을 없애고 통합 환경을 제공하여 스트레스 테스트를 쉽게 수행할 수 있는 방법을 제공한다.
- 오픈소스 Grinder를 네이버에서 커스텀해서 개발
nGrinder의 주요 구성 요소 두 가지는 Controller, Agent이다.
- Controller
- 웹 기반의 GUI 시스템
- 유저 관리
- 에이전트 관리
- 부하 테스트 실시 & 모니터링
- Agent
- Controller의 지휘를 받는 대상
- 부하를 발생시키는 대상
- 복수의 머신에 설치해서 Controller 신호에 따라서 일시에 부하 발생
Controller와 Agent는 각기 다른 서버에 설치해서 사용하는 것을 권장한다.
부하 테스트를 하면 서버에 CPU / Memory를 많이 사용하기에 다른 서버에 설치하는 것을 권장한다.
해당 포스팅에서는 로컬에서 Docker를 이용해서 Controller와 Agent를 한 곳에 설치해서 사용한다.
nGrinder 설치 과정
nGrinder를 설치하는 방법은 war로 설치하는 방법과 Docker를 통해 설치하는 방법 두 가지로 나뉜다.
여기서는 도커로 설치를 진행하고 도커는 설치되어 있다고 가정하고 진행한다.
도커 버전 확인
현재 도커 버전은 20.10.22를 사용했다.
docker -v
Docker Hub에 있는 ngrinder 설치 코드 따라 하기
Docker Hub에서 nGrinder 설치 코드가 있는 주소는 다음과 같다.
nGrinder에서 두 가지 핵심 컴포넌트인 Controller와 Agent를 설치한다.
현재 최신 버전은 latest와 3.8.8이 있지만 최신 버전으로 진행을 했을때는 스크립트 검증이 에러가 나서 Controller, Agent 버전은 3.5.5로 설치했다.
Controller 설치
docker run 명령어를 통해서 Controller를 설치한다.
docker run을 사용하면 docker image가 로컬에 없으면 Docker Hub에 접근해서 도커 이미지를 가져오고 컨테이너로 실행한다.
- -d : 백그라운드로 실행
- -v : 호스트와 컨테이너가 볼륨을 공유하기 위한 폴더 설정
- {host_path}:{container_path}
- host_path를 자신의 로컬에 원하는 경로 설정(Ex, ~/ngrinder-controller)
- /c/Users/jaedeok/study/ngrinder-controller:/opt/ngrinder-controller
- --name : 컨테이너 이름 설정
- -p : 호스트와 공유할 포트 설정
- 80 : 컨트롤러 WEB UI port
- 16001 : 에이전트와 컨트롤러 테스트 가능 확인 포트
- 12000-12009 : 컨트롤러는 스트레스 테스트를 해당 포트로 할당
docker run -d -v /c/Users/jaedeok/study/ngrinder-controller:/opt/ngrinder-controller --name controller -p 80:80 -p 16001:16001 -p 12000-12009:12000-12009 ngrinder/controller:3.5.5
nGrinder에서 Agent와 Controller간의 연결 포트에 대한 상세정보는 하단에 링크에 있다.
Agent 설치
Controller의 요청을 받고 부하를 발생시키는 Agent도 설치를 진행한다.
- -d : 백그라운드 실행
- --name : 컨테이너 이름
- --link : 네트워크 설정
docker run -d --name agent --link controller:controller ngrinder/agent:3.5.5
nGrinder Controller, Agent 설치 확인
nGrinder Controller만 설치하면 localhost 80 포트로 UI 웹 브라우저로 접근이 가능하다.
웹 브라우저를 켜고 localhost를 입력한다.
성공적으로 nGrinder 페이지가 열리는 것을 확인 가능하다.
기본 ID / PW는 admin / admin이기에 입력을 하고 로그인한다.
nGrinder 메인 페이지
로그인을 하면 메인 페이지가 나온다.
에이전트가 설치되었는지 확인하기 위해서는 헤더 우측 admin > Agent Management를 클릭하고 들어간다.
Agent 설치 확인
하단에 ip가 172.17.0.3로 하나의 Agent가 State에 초록색 불이 들어와 있고 정상적으로 설치가 된 것을 확인 가능하다.
정리
해당 포스팅에서 성능 테스트란 무엇이고, 오픈 소스 성능 테스트 플랫폼에는 어떤 것이 있고, nGrinder란 어떤 것이고, nGrinder를 설치하는 과정을 진행했다.
nGrinder는 Docker 이미지를 제공해서 Controller / Agnet만 간단하게 설치를 진행했다.
다음 포스팅에서는 로컬에서 스프링 부트 어플레케이션을 띄우고 헬스체크 API를 nGrinder에서 성능 테스트를 위한 스크립트를 생성하고 부하 테스트를 진행한다.
'Spring' 카테고리의 다른 글
Spring Boot jsp 사용 (0) | 2024.03.17 |
---|---|
nGrinder & Spring Boot API 성능 테스트 (0) | 2023.03.05 |
[Spring][Mybatis][Logger] Spring Log4j를 이용해서 인터셉터로 로그 남기기 & MyBatis 쿼리 로그 출력 및 정렬 (0) | 2020.09.21 |
[spring] Lombok 이란? (0) | 2020.09.10 |
[jsp][servlet] Forward VS Redirect(차이점) (0) | 2020.09.03 |