본문 바로가기

Open Source

자바 어플리케이션 성능 테스트 사전 조사 및 테스트 계획

반응형

성능 테스트에는 여러 종류가 있으며, 각각 다음과 같은 목적을 가지고 있다.

  1. 부하 테스트 (Load Testing) : 시스템이 예상 사용자 부하를 처리할 수 있는지 확인, 성능 병목 지점을 찾는 목적. TPS 확인
  2. 스트레스 테스트 (Stress Testing) : 극도의 높은 트래픽 조건에서 부하를 처리할 수 있는지 확인
  3. 내구성 테스트 (Endurance Testing) : 시스템이 지속적인 작업 부하를 오랜 시간 동안 처리할 수 있는지 확인. cpu, memory 등의 리소스 문제를 발견하는데 도움이 된다.
  4. 볼륨 테스트 (Volume Testing) : 대량의 데이터를 처리할 수 있는지 확인. DB 또는 파일의 많은 양을 처리하는 등의 작업 확인
  5. 공격성 테스트 (Spike Testing) : 갑자기 높은 부하를 발생 시켰을 때 시스템이 어떻게 반응하는지 확인

테스트 계획

  1. 테스트 툴 선정 및 설정
  2. 테스트 시나리오 설계
    1. 테스트 시나리오를 설계하고 이를 구현한다.
  3. 스모크 테스트
    1. 성능 테스트 이전에 최소 부하로 시나리오 검증, 문제 없이 시스템이 실행 되는지 확인
  4. 부하 테스트
    1. 임계치의 한계에 도달할 때까지 부하를 꾸준히 증가 시키며 테스트 진행
    2. 응답시간, 처리량, 병목현상 등 확인한다.
  5. 스트레스 테스트
    1. 시스템이 과부하 상태에서 어떻게 작동하는지 테스트
    2. 리소스 사용 파악, 안정성 등 확인한다.
  6. 결과 분석
    1. 응답시간, 처리량, 리소스 사용률, 에러율 등의 지표 분석
  7. 성능 최적화 및 테스트 반복
    1. 성능 문제를 해결을 위한 조치를 취하여 테스트를 반복한다.
    2. 필요에 따라 타겟서버 스펙 업다운그레이드 하여 테스트를 반복 한다.

성능 테스트 툴 선정을 위한 고려해 볼 사항

  1. 러닝커브
    1. 러닝커브가 높지 않았으면 좋겠다.
  2. 다양한 통신 프로토콜이 필요한가?
    1. 주로 HTTP 프로토콜을 필요로 생각하기 때문에 다양한 프로토콜은 굳이?
  3. 테스트 시나리오
    1. GUI를 통해 시나리오를 구성 또는 특정 언어를 작성하여 시나리오 구성
    2. 특정 언어를 작성한 테스트 시나리오가 좀 더 세밀하고 구체적일 것 같다.
  4. 결과 분석(리포트)
    1. 성능 결과 또는 모니터링 인터페이스를 제공

성능 테스트 툴 비교

JMeter

  1. 러닝커브
    1. 광범위한 기능을 제공
    2. 따라서 복잡하게 느껴질 수 있다.
    3. 하지만, 기본 기능은 GUI를 기반으로 하여 쉽게 익힐 수 있다.
    4. 고급 기능은 더 깊은 이해가 필요하다.
  2. 프로토콜
    1. HTTP, JDBC, SOAP 등 다양한 프로토콜을 제공
  3. 테스트 시나리오
    1. GUI로 조작하여 테스트 시나리오 구성
  4. 결과 분석
    1. 리스너를 추가하여 테스트 리포트가 가능하며 차트 종류도 몇 가지가 존재한다.
  5. 기타
    1. Java Swing UI (UI가 구리다는 후기가 많다)
nGrinder
  1. 러닝커브
    1. JMeter에 비해 사용하기 쉽다.
    2. Java와 Groovy에 익숙한 개발자에게는 더 쉽다.
    3. 스크립트를 통해 세밀한 설정과 커스텀 테스트 케이스를 만드는데 유연성을 가진다.
  2. 프로토콜
    1. HTTP/HTTPS
  3. 테스트 시나리오
    1. Jython, Groovy 테스트 시나리오 코드 작성
  4. 결과 분석
    1. 웹 기반 테스트 리포트 가능, 모니터링 가능
  5. 기타
    1. 테스트 할 Target서버에 직접적으로 스트레스를 주는 Agent 설치가 필요하다.
    2. 다양한 환경에 Agent를 설치하여 테스트 해볼 수 있다.
    3. Agent를 제어하는 Controller의 클라이언트(웹) 설치 필요

Locust

  1. 러닝커브
    1. Python에 익숙한 개발자에게는 쉽다.
    2. Locust 또한 스크립트를 통해 유연성을 가진다.
  2. 프로토콜
    1. HTTP/HTTPS
    2. Python 라이브러리를 사용하여 다른 프로토콜도 가능하다.
  3. 테스트 시나리오
    1. Python 테스트 시나리오 코드 작성
  4. 결과 분석
    1. 웹 UI 제공
    2. 테스트 결과를 보여주는 데 중점을 두고 있다.

Gatling

  1. 러닝커브
    1. Scala는 기반으로 하는.. 테스트 시나리오도 Scala.. 그래서 Scala는 생략한다..
반응형