부하 테스트를 위해 nGrinder를 사용해 보자
📌 서론
열심히 레시피아를 만들어서 원스토어에 배포했지만 아직 유저가 별로 없다. (거의 없다... 또륵)
사용하는 유저는 별로 없지만 AWS에서 Cloud Native로 구축한 레시피아 서버가 어느 정도의 부하를 버틸 수 있는지 궁금했다.
다른 프로젝트를 JMeter로 테스트 해본적이 있는데 편하긴 했지만 뭔가 부족한 느낌이었다.
그래서 이번에는 팀원인 평양냉면님과 회의를 통해 nGrinder 사용해서 부하 테스트를 진행하기로 결정했다.
지금부터 설명할 nGrinder는 "nGrinder 설치, groovy 스크립트 작성, 테스트 진행" 총 3가지 내용으로 포스팅이 나눠질 예정이다.
만약 nGrinder를 직접 사용해보고자 한다면 3개의 포스팅을 천천히 따라가면서 진행해 보는 것을 추천한다.
NGrinder를 세팅하는데 큰 도움을 받은 고군분투님의 블로그를 소개합니다! (문제가 된다면 글은 지우도록 하겠습니다.)
1. nGrinder 다운로드
기본세팅
- 나는 m2 max 맥북을 사용중이다. 즉, apple silicon의 arm 아키텍처를 사용 중이라는 의미다.
- 이번 포스트에서의 nGrinder 세팅은 apple의 m1칩에 최적화된 설치방법이라는 것을 알아줬으면 한다.
nGrinder 다운로드 링크로 이동한다. (네이버 Github)
ReadMe에서 하단으로 스크롤해서 Download항목으로 간다.
- 아래와 같이 다운로드 링크가 적혀있다. 독자들의 편의성을 위해 내가 그 링크를 가지고 왔다! (하단의 링크를 누르면 된다.)
링크를 클릭하면 아래의 페이지로 이동된다.
- 여기서 맨 위의 war파일을 다운로드 받는다. (2024.02.13 기준 최신버전: 3.5.8)
2. nGrinder 실행
다운로드 받은 nGrinder의 war 파일을 원하는 경로로 이동시킨다.
- 나 같은 경우는 "레시피아" 프로젝트 테스트를 위한 사용이기에 프로젝트를 모아둔 RECIPIA 폴더로 이동시켰다.
- 이동이 완료되었다면 Iterm(터미널)을 통해 그 경로에 들어가 준다.
- 만약 자바17을 사용중이라면 환경변수에서 자바11로 변경하고 실행하는것을 권장한다. (다음 포스트에서 그 이유를 설명한다.)
이제 nGrinder를 실행하는 명령어를 입력하자
- ReadME에는 아래와 같이 실행 명령어가 상세하게 적혀있다.
- 이대로 적어도 괜찮지만 나는 "고군분투"님이 입력하신 방법을 그대로 사용했다. (사용에 편의성을 주는 명령어가 추가됨)
작성한 명령어 소개
기존 Quick Start 명령어에 3개의 명령어를 추가했다. 이렇게 작성한 이유는 다음과 같다.
- 백그라운드 실행
- "&" 를 사용하면 명령어가 백그라운드에서 실행된다. 이렇게 하면 터미널을 계속 사용할 수 있고, 다른 작업을 할 수 있다. 프로세스가 백그라운드에서 돌아가니까, 직접적으로 터미널에 묶여 있지 않게 된다.
- 세션 종료 후에도 실행 유지
- "nohup"을 사용하면 로그아웃하거나 터미널 세션이 종료되어도 프로세스가 계속 실행되게 할 수 있다. 서버에서 작업할 때 특히 유용한데, 서버에 직접 연결되어 있지 않아도 애플리케이션이 계속 돌아가게 할 수 있기 때문이다.
- 로그 기록
- ">> log_ngrinder.nohup" 부분은 애플리케이션의 표준 출력(보통 로그 메시지를 포함)을 파일로 리다이렉션 한다. 이렇게 하면 나중에 문제가 발생했을 때 로그 파일을 통해 문제를 진단하고 해결할 수 있다.
- 아래의 명령어가 완성본이다. (Docker를 사용하면 이렇게 안 해도 괜찮지만 지금 나는 war로 실행했기에 명령어로 편의성을 더했다.)
nohup java -jar ngrinder-controller-3.5.8.war --port=8300 >> log_ngrinder.nohup &
이 명령어를 war파일이 존재하는 경로에서 입력한다.
- 바로 실행되었다면 정말 행복했겠지만 오류가 발생했다. 오류 내용만 봤을 때는 대체 무슨 오류인지 알 수 없었다.
이때를 위해 log_ngrinder.nohup 명령어를 작성했지 않았는가?
- 역시 선배님들이 알려준 방식에는 다 이유가 있는 것 같다. 나는 이 명령어 덕분에 순식간에 문제를 해결할 수 있었다.
- 아래의 명령어를 입력하여 저장된 로그파일을 열어봤다.
cat log_ngrinder.nohup
- 에러 로그를 확인해 보니 tmpdir관련 오류가 발생했다.
문제를 분석했다.
- java.io.tmpdir 시스템 속성을 설정하라는 오류 메시지가 남겨져있었다. ngrinder가 특정 임시 디렉토리를 사용하도록 요구하는 것인데 이건 OS 기본 임시 디렉토리가 아닌, 다른 경로를 임시 디렉토리로 지정해 줘야 한다는 것이다.
- 내가 뭔가를 놓친 건가 싶어서 다시 Readme의 내용을 확인해 봤는데 아래와 같이 Quick Start에 tmpdir을 설정해줘야 한다고 아주 상세하게 적혀있었다. (제발 설명을 잘 읽자 ㅠㅠㅠ)
아래와 같이 nGrinder 실행 명령어를 수정했다. (tmpdir 추가)
java -Djava.io.tmpdir=/Users/jinan/RECIPIA/ngrinder/lib -jar ngrinder-controller-3.5.8.war --port=8300
- 위의 명령어에 적어준 폴더 경로와 똑같이 만들기 위해 ngrinder 폴더에 lib 폴더를 생성했다.
새로운 명령어를 입력했다.
- 아래와 같이 문제없이 실행되었다. (NGrinder는 SpringBoot 기반이라 매우 익숙한 화면이었다.)
3. 웹에서 nGrinder 접속
이제 크롬으로 들어가서 url에 다음과 같이 입력해 준다.
localhost:8300
아래와 같이 ngrinder 웹페이지가 성공적으로 나오는 것을 볼 수 있다.
초기 id, pw는 둘 다 admin이다. 이대로 입력해서 로그인해 준다.
로그인에 성공하면 메인 페이지로 이동된다.
- 질문과 답변이 있었던 것이 매우 흥미로웠다.
4. nGrinder 에이전트 설치 및 실행
테스트를 하기 위해서는 에이전트를 설치하고 실행해야 한다.
- 에이전트 설치를 위해 우측 상단의 계정정보를 클릭한다. 드롭다운 메뉴가 나올 텐데 "에이전트 다운로드"를 클릭한다.
- 그럼 에이전트가 다운로드가 된다. 나는 다운로드된 agent 폴더를 war를 실행시킨 ngrinder 폴더 내부로 이동시켰다.
명령어를 통해 nGrinder 에이전트를 실행한다.
- agent폴더가 존재하는 경로로 이동한 후 명령어를 입력한다.
- 명령어를 입력할 때./를 꼭 입력해 주자 (현재 폴더 위치라는 의미다.)
./run_agent.sh
에이전트 실행여부 확인하기
- 에이전트를 실행하고 nGrinder 홈페이지로 돌아와서 에이전트 연결 여부를 확인한다.
- nGrinder 홈페이지 우측 상단의 드롭다운 메뉴를 누르고 "에이전트 관리" 메뉴를 클릭한다.
다음과 같이 에이전트 관리 화면이 나온다.
- 여기서 맨 우측의 "승인됨" 영역을 자세히 보면 "승인됨" 부분이 진하게 칠해져 있다는 것을 알 수 있다.
이렇게 nGrinder의 기본적인 세팅을 완료했다. 이제 다음 포스트에서 테스트를 위한 스크립트를 작성해 보자
같은 팀원인 "평양냉면"님의 블로그도 방문해 주세요! 좋은 글이 많이 있습니다.
'DevOps > nGrinder' 카테고리의 다른 글
[nGrinder] ECS로 기동중인 SpringBoot 부하 테스트 (7) | 2024.02.15 |
---|---|
[nGrinder] 서버 부하 테스트 진행 (SpringBoot) (21) | 2024.02.14 |
[nGrinder] 스크립트 작성하기 (5) | 2024.02.14 |