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 제공 에디터는 불편하다. 대신:

  1. IDE (IntelliJ 등)에서 Groovy 스크립트 작성
  2. SVN을 통해 nGrinder에 커밋
  3. JUnit으로 로컬 테스트
  4. 완성 후 nGrinder에서 실행

이 방식이 훨씬 빠르고 안정적이다.

실전 팁과 주의사항

1. 로컬 테스트의 한계

로컬에서 Docker로 Controller와 Agent를 함께 실행하면 안 된다. 자기 자신에게만 부하를 주게 되어 정확한 테스트가 불가능하다.

해결책:

  • 로컬 테스트: vUser 수를 낮게 설정
  • 실제 테스트: Controller와 Agent를 다른 서버에 배포

2. 최신 버전 확인

처음에 오래된 버전을 사용했다가 나중에 최신 버전으로 업그레이드했다. 최신 버전에서는 GitHub도 지원한다.

3. 스크립트 관리

SVN을 통한 버전 관리가 기본이지만, 최신 버전에서는 GitHub도 가능하다. 이를 활용하면 팀 협업이 훨씬 수월하다.

nGrinder의 다양한 활용

부하 테스트는 단순히 서버의 성능만 측정하는 것이 아니다:

  • 병목 지점 파악: 어느 부분이 병목인지 정확히 식별
  • 스케일링 계획: 필요한 리소스 규모 측정
  • 배포 전 검증: 새 버전의 성능 회귀 여부 확인
  • 실시간 모니터링: 테스트 실행 중 시스템 상태 추적

마무리

nGrinder는 처음에는 낯설었지만, 몇 번 사용하다 보니 매우 강력한 도구임을 깨달았다. 특히 시나리오 기반의 복잡한 부하 테스트가 필요한 경우 필수적인 도구다.

공식 문서와 커뮤니티의 한글 지원이 있다는 점도 큰 장점이다. 대규모 서비스를 운영한다면 nGrinder 도입을 강력히 추천한다.

댓글