1. 부하테스트를 위한 테스트 도구 도입

2025. 1. 14. 12:39Test/Artillery

Artillery란?

  • 성능 테스트와 부하 테스트를 위한 간단하고 강력한 도구
  • HTTP, WebSocket, GraphQL 등 다양한 프로토콜을 지원하는 부하 테스트 도구
  • AWS free tier 만으로 어느정도 트래픽까지 감당 가능할지 알아보기 위하여

프로젝트 배경

  • NestJS와 Socket.IO를 사용해 실시간 채팅 서비스 구축
  • 높은 동시 연결을 처리하고 안정적인 성능을 제공하기 위해 성능 테스트가 필수

목표

  • Artillery를 사용해 성능 테스트를 설정, 실행, 분석하는 과정을 공유
  • 성능 병목을 해결하고 효율적인 실시간 시스템 설계 구축

부하테스트 필요성

  • 성능 검증: 웹사이트나 API가 높은 트래픽에서도 안정적으로 작동하는지 확인
  • 취약점 발견: 높은 요청으로 인해 발생할 수 있는 병목현상과 오류를 미리 확인
  • WebSocket 안정성 테스트: 실시간 애플리케이션에서 WebSocket 연결을 검증
  • 사용자 경험 개선: 응답 시간이 느리거나 오류가 발생하지 않도록 최적화

Artillery 선택 이유

1. Socket.IO에 대한 강력한 지원

  • Artillery는 WebSocket뿐 아니라 Socket.IO를 위한 전용 엔진을 제공
  • 다른 도구들은 Socket.IO 지원이 제한적이거나 추가 스크립팅이 필요하지만, Artillery는 간단한 설정으로 Socket.IO 이벤트를 테스트

2. 간단한 설치 및 사용

  • 간단한 설치
  • YAML 파일로 테스트를 구성하므로 코드 작성이 최소화

3. 경량화 및 자원 친화성

  • 가벼운 자원 사용량으로, AWS Free Tier EC2 인스턴스에서도 실행 가능
  • 기본 설정으로도 활용 용이

4. 유용한 보고서 기능

  • 부하 테스트 결과를 JSON 형식으로 출력하며, 추가 도구(Grafana, Kibana)와 통합해 시각화가능
artillery run --output results.json test.yml

다른 도구와의 비교

도구 사용성 Socket.IO 지원 스케일링 보고서 기능 추천 시나리오

JMeter GUI 기반, 설정이 복잡 직접 지원하지 않음 높은 확장성 상세한 보고서 API, HTTP 부하 테스트
Locust Python 스크립팅 기반, 유연함 커스텀 스크립트 필요 고성능 분산 처리 제한적 대규모 분산 테스트
Gatling Scala 기반, 코드 중심 WebSocket만 지원 JVM 기반 고성능 실시간 대시보드 WebSocket 대규모 테스트
K6 JavaScript 기반, 클라우드 친화적 WebSocket 지원 클라우드 통합 대화형 보고서 CI/CD 파이프라인 통합
Artillery YAML 기반, 간단한 설정 Socket.IO 직접 지원 간단한 스케일링 JSON 및 CLI 보고서 WebSocket, Socket.IO 테스트

결론: 왜 Artillery 인가?

  1. Socket.IO 전용 지원: WebSocket 및 Socket.IO 이벤트를 테스트하기 위한 엔진 제공
  2. 가벼운 자원 사용량: Free Tier EC2에서도 원활하게 작동
  3. 간단한 설정: YAML 기반 구성으로 테스트를 쉽게 작성할 수 있음
  4. 확장 가능성: JSON 출력 및 도구 통합을 통해 유연한 데이터 분석 가능
  • Socket.IO 기반의 채팅서비스 프로젝트 이며 첫 부하테스트인 만큼 가볍고 간단한 테스트 도구가 필요해 Artillery를 선택