본문 바로가기

Tools

[JMeter] JMeter 개념, 사용 방법

JMeter란?

  • 서버가 제공하는 성능 및 부하를 측정할 수 있는 테스트 도구
  • 순수 Java 애플리케이션 오픈소스 이며, 서버나 네트워크 또는 개체에 대해 과부하를 시뮬레이션하여 강도를 테스트하거나 다양한 부하 유형에서 전체 성능을 분석하는 데 사용
  • 비슷한 성능 테스트 도구
    •  Apache Benchmark
    • Ngrinder
    • Pinpoint
    • Gatling

주요 기능

 

  1. 성능 테스트 (Performance Testing):
    • JMeter는 시스템의 성능을 측정하는 데 사용
    • 예를 들어, 웹 애플리케이션이 다수의 동시 접속자 수를 얼마나 처리할 수 있는지, 응답 시간이 얼마나 되는지 등을 확인 가능
    • 성능 테스트는 시스템이 특정 조건에서 얼마나 잘 작동하는지, 병목 현상은 없는지를 파악하는 데 도움을 줌
  2. 로드 테스트 (Load Testing):
    • JMeter를 사용하면 시스템에 점진적으로 부하를 가해, 성능이 어떻게 변화하는지 평가 가능
    • 예를 들어, 100명, 1000명, 10,000명의 사용자가 동시에 접속할 때 시스템이 어떻게 반응하는지 시뮬레이션 가능
    • 이를 통해 시스템의 한계점과 안정성을 미리 파악 가능
  3. 스트레스 테스트 (Stress Testing):
    • 시스템에 최대 부하 또는 그 이상의 부하를 가해 시스템이 언제, 어떻게 실패하는지 테스트 가능
    • 이를 통해 시스템의 안정성과 회복 능력을 평가할 수 있습니다.
  4. 기능 테스트 (Functional Testing):
    • JMeter는 웹 애플리케이션의 기능을 테스트하는 데에도 사용 가능
    • 예를 들어, 특정 API가 예상대로 작동하는지, 웹 페이지가 올바른 데이터를 반환하는지 등을 확인 가능
  5. 분산 테스트 (Distributed Testing):
    • JMeter는 여러 대의 컴퓨터를 사용하여 대규모 부하 테스트를 수행 가능
    • 이는 분산 모드에서 실행되며, 수천 명의 동시 사용자 시뮬레이션이 가능
  6. 보고서 및 분석:
    • JMeter는 테스트 결과를 시각적으로 분석할 수 있는 다양한 보고서와 그래프를 제공
    • 이를 통해 성능 문제를 쉽게 파악 가능

 

주요 개념
  • Thread Group
    • 몇 개의 쓰레드가 동시에 요청을 보내는지
  • Sampler
    • 어떤 유저가 해야 하는 액션
  • Listener
    • 응답을 받았을 때 어떤 동작을 취하는 지  (검증, 리포트, 그래프 그리기 등)
  • Configuration
    • Sampler 또는 Listener가 사용할 설정 값 (쿠키, JDBC 커넥션 등)
  • Assertion
    • 응답 결과의 성공 여부를 판단하는 조건 (응답 코드, 본문 내용 등)

설치 및 실행

https://jmeter.apache.org/download_jmeter.cgi

 

Apache JMeter - Download Apache JMeter

Download Apache JMeter We recommend you use a mirror to download our release builds, but you must verify the integrity of the downloaded files using signatures downloaded from our main distribution directories. Recent releases (48 hours) may not yet be ava

jmeter.apache.org

  • 앞서 설명한 것 처럼 순수 자바 애플리케이션 오픈 소스이기 때문에 자바 8 버전이상 설치가 되어있어야 함
  1. 위 링크의 Binaries에서 zip 파일을 다운 후 압축 해제
  2. bin 폴더 안에 있는 jmeter.bat 파일 실행


Test Plan 이름 설정


Thread Group
  • 좌측 테스트 플랜 → 마우스 우 클릭 → Add → Thread(Users) → Thread Group

  • 1000명의 사람(Number of Threads)이 5회(Loop Count) 시도
  • Action to be taken after a Sample error
    • 에러가 처리 됐을 때 취할 액션
    • 이는 Assertion의 결과로 판단
  • Number of Threads
    • 몇 개의 쓰레드(유저 수)로 테스트할 지
  • Ramp-up period
    • {Number of Thread} 만큼의 쓰레드를 만들 때 소요할 시간
  • Loop Count
    • 요청을 몇번을 반복할 지

Sampler
  • 각각의 유저가 해야할 일을 Sampler에 정의
  • Thread Group → 마우스 우 클릭 → Add → Sampler → HTTP  Request

  • Name
    • 좌측의 이름 설정
  • Server Name or IP
    • 서버의 도메인 이름이나 IP 주소
  • Port Number
    • 포트 번호
  • HTTP Request
    • HTTP Method 방식
  • Path
    • API의 경로(Path) 설정

Listener
  • 결과를 받고 행동을 취하는 것
  • 다음과 같이 3개의 리스너 추가


실행

 

Summary Report

  • Label
    • 테스트한 샘플의 이름 또는 경로를 나타냄
  • #Sample
    • 수행된 샘플(요청)의 총 횟수
    • 1000명의 유저(스레드)로 5회(Loop Count)반복 했기 때문에 5,000번
  • Average
    • 요청의 평균 응답 시간(ms)
  • Min
    • 요청에 대한 최소 응답 시간(ms)
  • Max
    • 요청에 대한 최대 응답 시간(ms)
  • Std Dev(Standard Deviation)
    • 응답 시간의 표준 편차
    • 데이터가 평균으로부터 얼마나 분산되어 있는지를 나타내며, 값이 클수록 응답 시간의 일관성이 떨어짐을 의미
  • Error %
    • 요청 중 오류가 발생한 비율
  • Throughput
    • 초당 처리량을 나타내며, 초당 처리된 요청 수를 의미
    • 459.3/sec는 초당 459.3개의 요청이 처리됨을 의미
  • Received KB/sec
    • 초당 수신된 데이터 양을 킬로바이트(KB) 단위로 표시
  • Sent KB/sec
    • 초당 전송된 데이터 양을 킬로바이트(KB) 단위로 표시
  • Avg. Bytes
    • 요청당 평균으로 전송된 바이트 수

View Results in Table

  • Sample#
    • 각 샘플의 순서 번호
    • 테스트 실행 순서에 따라 샘플 번호가 부여
  • Start Time
    • 각 샘플이 시작된 시간
    • 테스트가 실행된 정확한 시점을 밀리초 단위로 기록
  • Thread Name
    • 요청을 보낸 스레드의 이름을 표시
    • 예를 들어, "Thread Group 1-1"은 "Thread Group 1"에서 첫 번째로 실행된 스레드를 의미
  • Label
    • 요청의 라벨을 표시
    • 요청이 어떤 작업을 수행했는지 식별할 수 있는 이름
  • Sample Time(ms)
    • 요청의 응답 시간을 밀리초(ms) 단위로 표시
    • 요청이 시작되어 응답을 받기까지 걸린 전체 시간을 나타냄
  • Status
    • 요청의 성공 또는 실패 여부를 나타냄
  • Bytes
    • 응답으로 수신된 총 바이트 수를 표시
  • Sent Bytes
    • 요청을 보낼 때 전송된 바이트 수를 표시
  • Latency
    • 요청이 서버에 도달하여 최초로 응답을 받기까지 걸린 시간을 밀리초(ms) 단위로 표시
    • 이 시간은 서버가 요청을 처리하기 시작하는 시점을 기준으로 하며, 네트워크 대기 시간 등이 포함
  • Connect Time(ms)
    • 서버에 연결되는 데 걸린 시간을 밀리초(ms) 단위로 표시
    • 즉, 클라이언트와 서버 간의 TCP 연결이 이루어지는 데 걸린 시간

Aggregate Report

 

 

  • Label
    • 테스트된 샘플(요청)의 이름을 표시
    • 각 요청의 유형이나 경로를 식별 가능
  • # Samples
    • 해당 요청에 대해 수행된 샘플(요청)의 총 횟수
  • Average
    • 요청의 평균 응답 시간을 밀리초(ms) 단위로 표시
    • 모든 요청에 대해 응답 시간의 평균값을 계산하여 나타냄
  • Median
    • 중앙값 응답 시간을 밀리초(ms) 단위로 표시
    • 전체 요청 중 절반이 이 시간보다 빠르게 응답되었고, 나머지 절반이 이 시간보다 느리게 응답되었음을 의미
    • Ex) Median 23은 모든 요청 응답 시간 중 절반이 23ms 이하, 나머지 절반이 23ms 이상
  • 90% Line
    • 상위 90%의 요청이 이 시간보다 빠르게 응답되었음을 나타냄
    • 나머지 10%는 이보다 더 오래 걸림
    • 성능 테스트에서 일반적으로 응답 시간의 최악의 경우를 평가하는 지표로 사용
  • 95% Line
    • 상위 95%의 요청이 이 시간보다 빠르게 응답되었음을 나타냄
    • 나머지 5%의 요청이 이보다 더 오래 걸림
    • 최악의 시나리오를 조금 더 구체적으로 평가할 수 있는 지표
  • 99% Line
    • 상위 99%의 요청이 이 시간보다 빠르게 응답되었음을 나타냄
    • 최악의 1%의 요청에 대한 응답 시간을 분석할 수 있는 지표로, 성능 테스트의 가장 엄격한 평가 기준 중 하나
  • Min
    • 요청에 대한 최소 응답 시간을 밀리초(ms) 단위로 표시
  • Max
    • 요청에 대한 최대 응답 시간을 밀리초(ms) 단위로 표시
  • Error %
    • 요청 중 오류가 발생한 비율을 백분율(%)로 표시
    • 이 값이 낮을수록 시스템이 안정적으로 동작했음을 의미
  • Throughput
    • 초당 처리된 요청 수를
    • 시스템의 처리 성능을 나타내며, 초당 몇 개의 요청이 처리되었는지 보여줌
  • Received KB/sec
    • 초당 수신된 데이터 양을 킬로바이트(KB) 단위로 표시
    • 서버가 클라이언트로부터 수신한 데이터의 양을 나타냄