forked from boostcampwm-2024/web17-juchumjuchum
-
Notifications
You must be signed in to change notification settings - Fork 1
부하 테스트 툴 비교 및 정리
KWAKMANBO edited this page Jan 13, 2025
·
3 revisions
- 부하 테스트를 수행할 테스트 도구 몇가지를 알아보자 각 툴의 장단점을 알아보고 어떤 툴이 프로젝트 부하 테스트에 적합한지 판단해볼 예정이다.
- 대표적으로 사용되는 부하테스트툴인 k6, nGrinder, JMeter 3가지를 다뤄볼 예정이다.
- JMeter는 오픈 소스 소프트웨어로 부하 테스트 툴이다.
- JAVA로 작성된 소프트웨어이고
- JMeter은 GUI를 지원하기 떄문에 비교적 쉽게 배우고 사용할 수 있음
- 지원하는 프로토콜에 대한 정보를 얻고싶다면 더보기를 통해 알 수 있음
- 웬만한 정보가 커뮤니티에 다있어 정보를 찾기가 쉬움
- 분산 부하 테스트 기능일 무료료 지원해줌
- 컨트롤러 노드를 지정하고 작업자 노드를 설정해 분산 부하 테스팅 기능을 지원해줌
- 부하테스트 결과를 HTML로 만들어줌
-
오픈 소스 소프트웨어로 Load Impact에서 2017년 발표
-
Go 언어로 작성되어 있으며, 테스트에 사용되는 스크립트는 JavaScript를 사용
-
코드 기반 스크립팅과 개발자 경험을 중요시함
-
GUI를 지원하지 않지만, k6 Test Builder를 사용하면 GUI를 통해 사용할 수 있음 but, JMeter만큼 의 GUI기능을 지원하진 않음
-
k6가 지원하는 프로토콜은 아래와 같음
-
기본적으로 지원하는 프로토콜은 적지만, plugin을 사용해서 지원하는 프로토콜을 추가할 수 있음
- 위에서 JMeter에서도 언급했던 장점이지만, k6도 배우기 쉽고 테스트 수행하기가 쉽다는 장점이 있음
- k6는 간편하게 설치할 수 있음
- 위에서 언급했듯이 k6는 plugin을 지원함
- 플러그인을 필수적으로 사용해야하는 것은 아니지만, 플러그인을 사용해서 k6를 좀더 효율적으로 사용할 수 있음
- JMeter도 플러그인을 사용하지만 JMeter는 플러그인 관리자까지도 플러그인 인것을 생각하면 모든 것이 플러그인으로 관리되는 JMeter보다 k6가 더 효율적으로 보일 수 있음
- k6에서 스크립트는 JavaScript를 사용하는데 이를 통해 작성하기 쉽고 실행하기 쉽다는 장점이 있음
- 실행기만 있으면 테스트를 진행할 수 있다느 장점이 있음
- k6는 Go로 작성되어 있음 -> Go는 컴파일된 언어 이므로 Java나 Python처럼 Interprter를 사용할 필요 x
- Go로 작성되어 있어 복잡성이 줄어들었고, 외부 종속성이 없음 -> 병목현상의 잠재적 원인이 적음
기능 | JMeter | k6 |
---|---|---|
개발 언어 | Java | Go |
스크립트 언어 | 제한적: 일부 Java (Groovy, BeanShell 등) | JavaScript |
지원 프로토콜 | 대부분의 프로토콜 지원 (HTTP/1.1, SOAP, FTP, JDBC, LDAP, JMS, SMTP, POP3, IMAP, TCP 등) | 현대적인 프로토콜 지원 (HTTP/1.1, HTTP/2, WebSockets, gRPC) |
브라우저 자동화 | Selenium/WebDriver를 통해 지원 | xk6-browser를 통해 지원 |
외부 종속성 | Java 필요 | 없음 |
리소스 활용도 | 낮음; 하나의 로드 생성기가 수천 개의 가상 사용자를 시뮬레이션 가능 | 매우 우수함; 하나의 로드 생성기가 수만 개의 가상 사용자를 시뮬레이션 가능 |
메모리 관리 | JVM 힙 메모리 설정 필요 | 로드 생성기 메모리를 네이티브하게 사용 |
스레드 모델 | 1 스레드당 1 가상 사용자; 성능이 느리고 리소스 비용이 높음 | 1 고루틴당 1 가상 사용자; 성능이 빠르고 리소스 비용이 낮음 |
스크립트 작성 용이성 | GUI 기반, 코드 블록 포함 | 코드 기반; VS Code 플러그인 지원 |
테스트 수준 임계값 | 없음; 개별 요청에만 적용 | 지원 |
스크립트 형식 | XML | JavaScript |
협업 | 동시 작업 어려움; 테스터 친화적; GUI 앱 필요 | 개발자 친화적, 버전 관리 용이; JavaScript 형식으로 협업 촉진 |
유지 관리 | 스크립트가 장황함; XML 형식은 가독성이 떨어짐 | 스크립트가 간결함; JavaScript는 가독성이 높음 |
커뮤니티 | 1998년부터 활동; 다양한 서드파티 튜토리얼; 방대한 문서; 중앙 커뮤니티는 없음 | 2017년부터 활동; 방대한 문서; 서드파티 튜토리얼은 적음; 공식 커뮤니티 존재 |
플러그인 지원 | 많은 기능이 플러그인 필요하지만, 다양한 플러그인 사용 가능 | 대부분의 기능이 네이티브로 지원되지만, 플러그인 지원은 새롭고 가용성은 적음 |
분산 로드 생성 | 지원 | k6 Operator를 통해 지원 |
사전 생성된 보고서 | 기본 및 사용자 정의 HTML 보고서; 리스너를 통한 로깅 지원 | 내장된 사전 생성 보고서는 없지만, 분석 도구와의 통합을 통해 대시보드 제공 |
웹사이트 | jmeter.apache.org | k6.io |
소스 코드 | GitHub 링크 | GitHub 링크 |
- Naver에서 게발한 Enterprise 레벨 Java 기반 성능 테스트 도구
- Agent와 Controller로 구성됨
- Controller는 성능 테스트를 계획하고 모니터링하며, 테스트 프로세스를 조정하고 결과를 수집 및 표시하는 역할을 수행
- Controller는 단일머신에 설치
- Agent는 Controller의 지시에 따라 실제로 부하를 발생시키는 프로세스와 스레드를 실행하여 대상 시스템에 부하를 주는 역할을 수행
- 각 Agent는 분산된 머신 또는 가상 머신에 설치됨
- Agent가 테스트에 필요한 부하를 생성하고, 데이터를 수집하여 Controller에 전송
- 테스트를 위해서 Agent는 반드시 필요하며, Controller는 이를 조종하는 역할을 수행
- nGrinder는 분산 테스트/ Web UI/Multi Tenancy등을 지원하고 Groovy/Jython으로 테스트 스크립트를 작성할 수 있음
- 성능 측정을 위한 웹 인터페이스를 제공하며, Web Application으로 Tomcat과 같은 웹서버 엔진을 이용하여 구동할 수 있음
- 사용자와의 인터페이스를 담당하여 테스트 프로세스 정의, 스크립트 작성 등을 지원
- 스크립트 수정 기능을 제공, Agent에 스크립트를 전달하여 테스트를 일임
- 테스트 프로세스 조정
- 테스트 통계를 수집하고 표시하는 기능 제공
- Controller의 명령을 받아 실행, target에 프로세스와 스레드를 실행시켜 부하를 발생시킴
- Agent 모드에서 실행할 때 대상 시스템에 부하를 주는 프로세스 및 스레드를 실행
- 모니터 모드에서 실행 시 대상 시스템 성능 모니터링
- 테스트하려는 target 애플리케이션, 머신을 의미
- 사용자 친화적인 웹 UI를 통해 테스트 설정, 실행, 모니터링, 결과 분석 등을 손쉽게 수행
- 여러 에이전트를 활용하여 대규모 분산 부하 테스트를 효율적으로 수행할 수 있음
- Groovy와 Jython 스크립트를 지원하여 복잡한 테스트 시나리오를 유연하게 작성할 수 있음
- 테스트 진행 상황을 실시간으로 모니터링하고, 상세한 성능 지표와 보고서를 제공해줌
- 네이버에서 개발해서 한국어를 지원해주는 장점이 있음
Comparing k6 and JMeter for load testing
nGrinder를 활용한 부하테스트
- [1주 2일차 합동 개발 일지](marketCap 데이터 null 이슈 해결)
- 인터셉터를 이용한 로거 개발기
- 배포 환경에서 웹 소캣 연결 실패 문제 해결
- Github Actions를 이용한 CI CD 구축
- nGrinder 테스트 시나리오
- nGrinder TPS가 측정되지 않는 문제
- 메트릭 수집에 필요한 툴들 설치하기
- Node Exporter 연결 안되는 문제
- StockService에서 Repository 계층 분리하기
- Server와 Grafana연동하기
- Guest 로그인 중복 문제 해결
- 뉴스요약 AI 프롬프팅
- 주식 학습 도우미 AI 프롬프팅
- 뉴스 요약 클로바 API 연동하기
- 샘플 뉴스 데이터를 활용한 Clova 요약 성능 확인
- 공동 개발 일지 - 뉴스 요약 AI 기능 도입 시도
- [AI 뉴스 요약]네이버 뉴스 크롤링 기능을 구현해보자
- AI 요약결과 db 저장
- 크롤링시 뉴스 카테고리 필터링 기능 추가하기
- 클로바 API 응답 형식 오류 해결
- 클로바 API 응답 형식 검증하기
- 주식 상세 페이지 차트 버그 해결하기
- NewsSummaryService를 위한 커스텀 에러 구현
- 실시간 주식 데이터 스로틀링 구현
- AI 기반 주식 뉴스 처리 시스템의 안정성 개선
- 크롤링에 날짜 필터링을 적용하기
- 뉴스 요약 코사인 유사도 도입