JMeter 간단 개념 & 회고

Uno·2022년 12월 12일
0

JMeter

목록 보기
3/3

Apache JMeter 란?

  • Java 로 구성된, 부하 테스트 툴 입니다.
  • 테스트 가능한 Application 및 Network 는 다음과 같습니다.
    - Web - HTTP, HTTPS,
    - SOAP / REST WebServices
    - FTP
    - Datbase via JDBC
    - LDAP
    - Message-Oriented Middleware(MOM) via JMS
    - Mail - SMTP(S), POP3(S) and IMAP(S)
    - TCP
    - Java Objects

성능 테스트

"성능 테스트" 란, 서비스의 성능을 확인하기 위해 실제 운영환경과 비슷한 환경에서 테스트를 진행하는 것을 의미합니다. 이 테스트를 통해서 '응답 시간(Response Time)', 처리량(Throughput), 병목구간 등을 확인할 수 있습니다. 이 정보를 통해서 다음 의사결정에 도움을 받을 수 있겠죠.

성능 테스트는 크게 4 개로 나눌 수 있습니다.

Load 테스트

  • 시스템의 CPU 와 Memoery 등을 기준 값을 정하여, 특정 임계점을 찾아서(비정상 상태 도달 시점) 성능상 이슈를 테스트하는 테스트를 의미합니다.

Stress 테스트

  • 상당히 많은 수의 요청(임계값 이상의 요청) 이나 비정상적인 요청을 보내면서, 비정상 상황이 언제 나타나는지 확인하는 테스트 입니다.

Spike 테스트

  • 비상상황을 가정하고, 언제 이것이 정상상태로 돌아오는지 테스트하는 테스트 입니다.
  • 즉, 사용자가 갑자기 늘어날 때 이를 어떤식으로 반응하는지 확인하는 테스트 입니다.

Stability / Soak 테스트

  • 다른 테스트에 비해, 긴 시간동안 테스트를 하면서, 시스템의 메모리 증가나 상태를 확인하는 테스트 입니다.

Element 사용법

Timer

Test Plan 이름 차제가, 사용자가 서비스를 이용하는 패턴을 표현한다는 것을 의미합니다. 그러므로, 실제 사용자는 테스트 처럼 바로바로 동작하지 않고, 가만히 있는 시간이 있습니다. 이 시간을 "Think Time" 이라고 칭합니다. JMeter 에서도, 이 부분을 Timer 를 추가하여 표현합니다.

Timer 에는 랜덤하게 생성하는 타이머도 있고, 정해진 상수 만큼만 동작하는 타이머도 있습니다.

Synchronizing Timer

앞에서의 타이머는 각 동작마다 기다리는 시간을 표현하기 위해서 사용한 타이머 입니다. 이번 타이머는 여러 개의 Thread 가 일시에 접속할 수 있도록, 먼저 시작한 타이머에 실행 지연시간을 부여하는 타이머 입니다. 결과적으로는 타이머가 끝나는 시간이 호출된 순서대로 많을 것이고, 마지막은 가장 적게 부여됩니다. 하지만, 타이머가 종료되는 시간을 동일합니다. 이를 통해 실제 호출되는 API 가 일시에 호출되는 효과를 얻을 수 있습니다.

적용

300 개의 Thread 를 15초에 도달하도록 설정했습니다.
(Number of Threads = 300, Ramp-up period = 15)

(Thread Group 에서 설정할 수 있습니다.)

아래 그래프는 JMeter 플러그인을 통해서 추가한 "Active Threads Over Time" 그래프 입니다.
(플러그인 설치 방법)

추가로 플러그인에 TPC 관련 그래프도 있습니다.

마지막으로 종합 보고서는 개인 작업물이 아니라 공개가 어렵습니다.
만약 작업하신 것이 있다면 "ThroughPut" 을 위주로 보면 됩니다.

회고

  • BlazeMeter 를 통해서 Web 에서 호출하는 API 를 녹화해서 한 번에 구성할 수 있었습니다
    - 이거 없었으면, 진짜 시나리오 구성이랑 확인하는데 한 세월 걸릴 뻔..
  • Mac 의 경우 File Descriptor 가 25x 개로 제한이 있는데, 그것보다 많은 쓰레드 생성 시, 네트워킹이 안되서 고생을 좀 했었습니다.
  • AWS RDP 를 통해 부하를 생성하다보니, CSV 넣는 작업이라든지, 회사에 구축된 내외부망이 처음에는 어색했습니다.
    - RDP 를 이용하는 이유 중 하나로, 부하 발생에 필요한 충분한 성능을 확보해야하는 것이 있습니다.
    - 관련 링크
    - 관련링크2
    - 관련링크3
  • 시나리오 구성 시, API 마다 필요한 값들 그리고 꼭 확인해야하는 API 들에 대한 이해도가 있어야 구성할 수 있었습니다.
    - 시나리오 구성 시, 더미데이터를 쓸 부분과 반드시 변수를 통해 다음 API 에 전달해야할 부분을 정확히 구분해야 작업이 편할 것 같습니다.
  • JMeter 가 한글을 제대로 전송 못하는 문제가 있어서 JMeter Properties 문서를 UTF-8 로 수정했습니다.
    - 링크

제대로 해보겠다고, 여러가지 개념을 검색하면서 했던 것 같습니다.

  • RMI
  • RDP
  • HTTP Header 에서 ContentType vs AccetpType (디버깅하면서 조사)
  • RMI
  • 분산 컴퓨팅
  • RPC
  • 네트워크 대역폭으로 인한 JMeter 부하 발생 안되는지 확인
    ...

그래도 직접 하면서 배워서 정말 짧은 시간에 여러 개념을 경험할 수 있어서 좋았네요.
다시 처음으로 돌아가서, 이 고통을 알고 하겠냐고 묻는다면.
저는 하..

참고 자료

profile
iOS & Flutter

0개의 댓글