Article
nGrinder로 서버 부하 테스트 시작하기
nGrinder와의 첫 만남
신규 입사 후 3주차에 처음으로 받은 임무가 nGrinder 스크립트 작업이었다. PHP 개발자인 나에게 Groovy 언어는 완전히 생소했다.
“Groovy? 뭔가요?“
nGrinder란 무엇인가?
nGrinder는 Naver에서 만든 국산 오픈소스 부하 테스트 도구다. 아파치의 기본 부하 테스트 도구인 Apache Bench보다 훨씬 강력하다.
핵심 특징
- 시나리오 기반 테스트: 단순 경로 반복이 아닌 복잡한 시나리오 구성 가능
- 지원 언어: Groovy, Jython
- 국산 도구: 한글 커뮤니티 지원
- 공식 사이트: naver.github.io/ngrinder/
로컬 테스트 환경 구성
Docker 이미지 다운로드
$ docker pull ngrinder/controller:latest
$ docker pull ngrinder/agent:latest
Docker Compose 설정
version: "2"
services:
controller:
image: ngrinder/controller
container_name: ngrinder-controller
volumes:
- ./ngrinder-controller:/opt/ngrinder-controller
ports:
- 8080:80
agent:
image: ngrinder/agent
container_name: ngrinder-agent
links:
- controller
실행
$ docker-compose up
nGrinder 스크립트 작성
언어 선택: Groovy
자바 경험이 있으면 Groovy를 선택하는 것이 수월하다. Python 경험이 있으면 Jython도 고려할 수 있다.
주요 어노테이션
nGrinder 스크립트의 라이프사이클은 다음과 같은 어노테이션으로 제어된다:
| 어노테이션 | 설명 |
|---|---|
| @BeforeProcess | 프로세스 생성 시 한 번 실행 (공유 리소스 로드) |
| @AfterProcess | 프로세스 종료 직전 실행 (리소스 정리) |
| @BeforeThread | 각 스레드 시작 시 실행 (쿠키 핸들, 로그인) |
| @AfterThread | 각 스레드 종료 시 실행 (로그아웃) |
| @Before | 모든 @Test 실행 전 (테스트 전 설정) |
| @After | 모든 @Test 실행 후 (성능 측정) |
| @Test | 실제 부하 테스트 로직 |
스크립트 작성 팁
IDE에서 작성하는 것이 효율적이다
nGrinder 제공 에디터는 불편하다. 대신:
- IDE (IntelliJ 등)에서 Groovy 스크립트 작성
- SVN을 통해 nGrinder에 커밋
- JUnit으로 로컬 테스트
- 완성 후 nGrinder에서 실행
이 방식이 훨씬 빠르고 안정적이다.
실전 팁과 주의사항
1. 로컬 테스트의 한계
로컬에서 Docker로 Controller와 Agent를 함께 실행하면 안 된다. 자기 자신에게만 부하를 주게 되어 정확한 테스트가 불가능하다.
해결책:
- 로컬 테스트: vUser 수를 낮게 설정
- 실제 테스트: Controller와 Agent를 다른 서버에 배포
2. 최신 버전 확인
처음에 오래된 버전을 사용했다가 나중에 최신 버전으로 업그레이드했다. 최신 버전에서는 GitHub도 지원한다.
3. 스크립트 관리
SVN을 통한 버전 관리가 기본이지만, 최신 버전에서는 GitHub도 가능하다. 이를 활용하면 팀 협업이 훨씬 수월하다.
nGrinder의 다양한 활용
부하 테스트는 단순히 서버의 성능만 측정하는 것이 아니다:
- 병목 지점 파악: 어느 부분이 병목인지 정확히 식별
- 스케일링 계획: 필요한 리소스 규모 측정
- 배포 전 검증: 새 버전의 성능 회귀 여부 확인
- 실시간 모니터링: 테스트 실행 중 시스템 상태 추적
마무리
nGrinder는 처음에는 낯설었지만, 몇 번 사용하다 보니 매우 강력한 도구임을 깨달았다. 특히 시나리오 기반의 복잡한 부하 테스트가 필요한 경우 필수적인 도구다.
공식 문서와 커뮤니티의 한글 지원이 있다는 점도 큰 장점이다. 대규모 서비스를 운영한다면 nGrinder 도입을 강력히 추천한다.
댓글