본문 바로가기
TIP ::

JMeter 성능테스트/부하테스트 결과보고서

by 히로:: 2024. 7. 15.

JMeter는 아파치 소프트웨어 재단(Apache Software Foundation)에서 개발한 오픈 소스 성능 테스트 도구입니다.

주로 웹 애플리케이션의 성능을 측정하고 부하 테스트를 수행하는 데 사용되지만, 다양한 프로토콜을 지원하여 여러 종류의 테스트에 활용될 수 있습니다. 

 

프로젝트 막판에 성능테스트 및 부하테스트의 결과보고서로 Jmeter를 많이들 사용하는데요. 

Jmeter의 설정 및 테스트 시나리오 작성에 대해서 간단하게 알아보겠습니다. 

 

1. 부하테스트/성능테스트의 목적

부하테스트는 시스템이 실제 운영 환경에서 예상되는 사용자의 부하를 견딜 수 있는지 평가하는 중요한 방법입니다.

JMeter를 사용하면 다양한 부하 조건에서 시스템의 성능을 측정할 수 있습니다. 

 

- 응답시간 측정 : 요청에 대한 응답 시간이 얼마나 빠른지 측정

- 처리량 측정 : 초당 초리할 수 있는 요청 수를 측정 

- 에러율 : 요청 처리 중 발생하는 에러 비율을 측정

 

2. JMeter 설치

먼저 JMeter를 사용하기 위해선 설치를 해야겠죠? 설치는 상당히 간단합니다. 아파치 소프트웨어 재단의 프로그램이라 그런지 Tomcat처럼 설치와 사용이 간단합니다.

 

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

 

JMeter 홈페이지의 다운로드 페이지에서 다운로드 받고, 압축을 풀면 끝입니다. 

cd /apache-jmeter-5.6/bin
sh jmeter

================================================================================
Don't use GUI mode for load testing !, only for Test creation and Test debugging.
For load testing, use CLI Mode (was NON GUI):
   jmeter -n -t [jmx file] -l [results file] -e -o [Path to web report folder]
& increase Java Heap to meet your test requirements:
   Modify current env variable HEAP="-Xms1g -Xmx1g -XX:MaxMetaspaceSize=256m" in the jmeter batch file
Check : https://jmeter.apache.org/usermanual/best-practices.html
================================================================================
Warning: the fonts "Times" and "Times" are not available for the Java logical font "Serif", which may have unexpected appearance or behavior. Re-enable the "Times" font to remove this warning.

 

JMeter 실행 첫 화면

 

 

3. JMeter Plugin 설치

기본 JMeter를 사용해도 되지만, 괜찮은 플러그인이 있어서 하나 추천해 드립니다.

 

https://jmeter-plugins.org/?search=jpgc-graphs-basic

 

JMeter Plugins :: JMeter-Plugins.org

 

jmeter-plugins.org

 

'Basic Graphs' 플러그인은 Apache JMeter의 성능 테스트 결과를 시각적으로 표현할 수 있습니다. 

이 플러그인을 같이 설치하면 JMeter 성능/부하 테스트 중 수집된 데이터를 다양한 그래프로 표현하여, 테스트 결과를 쉽게 이해하고 분석할 수 있도록 도와줄 수 있습니다. 

 

플러그인 파일을 다운로드 받아서 압축을 풀면 lib 폴더가 보이실 겁니다.

해당 lib 안의 ext 폴더와 jar들을 설치된 JMeter > lib 폴더 안에 넣어주시면 됩니다.

4. 테스트 시나리오 작성

JMeter 설치&실행이 완료 됐다면 이제 테스트 시나리오를 작성하고, 테스트 시나리오대로 수행해 보면서 부하테스트 및 성능테스트를 진행하면 됩니다. 부하테스트 및 성능테스트는 운영서버에 직접 실행하는 것이 가장 좋지만, 이미 오픈한 운영서버에 테스트하기에는 위험부담이 있습니다. 

그러므로 운영서버 환경과 동일한 개발서버에서 진행하는 것이 좋고, 오픈 전이라면 운영서버가 제일 좋겠죠?

 

그럼 성능/부하 테스트의 간단한 시나리오를 작성해 보겠습니다. 

 

 ※ 기준

  1. 응답시간 : 1초 이내 ( 메인 페이지 및 주요 페이지 ) / 요청 한계 3초 이하
  2. 처리량 : 200 tps 
  3. 동시접속 : 500명(최소)
  4. 오류율 : 1% 이내

 ※ 테스트 시나리오

  1. 부하 테스트
    1.  동접 500명, 2시간 동안 지속 부하, 응답시간 및 처리량 측정 
    2.  1초 이내 응답, 200tps
  2. 스트레스 테스트
    1. 10분 동안 동시접속자 1500명 점진적으로 증가
    2. 3초 내 응답, 오류율 1% 이내
  3. 스파이크 테스트
    1. 3초 동안 동시접속자 1000명 즉시 증가
    2. 3초 내 응답, 오류율 1% 이내

저는 이렇게 테스트 시나리오를 작성했습니다. 테스트 시나리오는 서비스 환경에 맞춰서 조절해 주시면 됩니다. 

 

5. JMeter 성능테스트/부하테스트 기본 설정

테스트 시나리오까지 완성했으니 이제 JMeter를 이용해서 부하테스트를 실행해 봐야겠지요?

이전에 플러그인을 설치했으니, JMeter를 재시작해주시고 이제 세팅을 해보겠습니다. 

 

'Test Plan' 메뉴에서 좌측 마우스 클릭하여 Add > Threads(Users) > Thread Group을 클릭하여 메뉴를 추가해 줍니다.

 

JMeter에서 'Thread Group' 성능 테스트 계획의 핵심 요소 중 하나라고 할 수 있습니다. 

가상 사용자의 동작을 정의하는 데 사용합니다. Thread Group 메뉴를 이용해서 테스트할 사용자 수, 요청 빈도, 지속 시간 등을 설정할 수 있습니다. 

 

 

위에서부터 하나씩 항목을 살펴보겠습니다. 

 

'Action to be taken after a Sampler error' 샘플에서 에러가 발생했을 때의 동작을 설정할 수 있습니다. 

  • Continue : 에러가 발생해도 테스트를 계속 진행
  • Start Next Thread  Loop : 현재 스레드의 루프를 종료하고 다음 루프를 시작
  • Stop Thread : 에러가 발생한 스레드만 종료 
  • Stop Test : 전체 테스트를 종료
  • Stop Test Now : 현재 실행 중인 모든 샘플러를 강제로 중지하고 테스트를 즉시 종료

'Thread Properties' 

Thread Group의 가장 기본적인 설정으로, 테스트에 참여할 가상 사용자(스레드)의 수, Ramp-up기간, 반복 횟수등을 설정할 수 있습니다.

  • Number of Threads(users) : 가상 사용자의 수를 설정/각 스레드는 독립적으로 행동하는 가상의 사용자 하나를 의미
  • Ramp-Up Period(seconds) : 모든 스레드를 시작하는 데 걸리는 시간을 설정/ 예를 들어, 100명의 스레드를 10초의 램프업 기간에 걸쳐 시작하면, 매 초마다 10명의 스레드(사용자)가 시작
  • Loop Count : 각 스레드가 실행할 요청 시퀀스를 반복할 횟수를 설정/ 특정 횟수만큼 반복을 원하면 수치를 입력하고, 무한 반복을 원하면 'Forever' 옵션을 선택

 

테스트 시나리오에서 작성한 '부하테스트' 시나리오를 작성해 보면 아래와 같다.

 

그다음으로 성능측정을 할 서버 정보를 입력해 봅시다.

 

Thread Group > Add > Sampler > HTTP Reqeust 클릭

여기에 성능테스트를 할 서버의 정보(아이피, 포트, 페이지 주소등 )를 작성해 주면 됩니다.

 

요청을 많이 보내서 서버의 과부하가 왔을 때 응답을 무한 대기하고 있을 수 있기 때문에, 두 번째 탭인 'Advanced'에서 타임아웃 설정을 해주는 것이 좋습니다.

  • Connect Timeout : 서버와의 연결을 시도할 때까지 기다리는 최대 시간(밀리세컨드)
  • Response Timeout : 서버로부터 응답을 받을 때까지 기다리는 최대 시간 (밀리세컨드)

 

이제 응답결과를 확인할 수 있는 메뉴들을 추가해 보겠습니다. 다 왔습니다.

HTTP Request > Add > Listener에서 아래 이미지와 같이 6개 항목을 추가해 줍니다. 

'jp@gc'로 시작하는 항목이 보이지 않는다면, 그래프 플러그인이 설치되지 않은 것입니다. 

 

6. 추가 설정 팁

여기까지 설정해서 실행시켜도 충분히 괜찮은 성능테스트가 될 것입니다. 

하지만, 한 가지 팁이 있습니다. 여러분이 특정 사이트에 들어가 본다고 가정해 봅시다. 네이버라고 해볼까요?

도메인을 입력해서 네이버 메인에 접속했습니다. 그다음 네이버 메인에 뜬 아무것도 보지 않고 바로 다음 행동을 하시나요?

아니죠? 인간은 잠깐 해당 페이지에 머무르죠? 

 

JMeter에서 페이지에 머무는 시간을 설정할 수 있습니다. 이 설정은 현실적인 사용자 시나리오는 시뮬레이션하는데 도움이 될 수 있습니다. 

 

'Add > Timer > Constant Timer'를 추가하시면 가능합니다.

 

위와 같이 설정하게 되면, 각 샘플 사이에 2초의 지연 시간이 발생하게 됩니다. 

 

 


 

이제 모든 설정이 끝났습니다. 각 시나리오에 맞게 스레드 그룹값을 변경하면서 성능 테스트를 진행해 보시면 됩니다. 

성능테스트를 하신다는 건 프로젝트 마무리단계를 진행하고 계실 거 같은데요, 프로젝트 마무리 잘하시고 고생하셨습니다.

 

다음 프로젝트가 여러분을 기다리고 있습니다.

 

반응형

댓글