Jmeter 적용하기

junto·2024년 11월 23일
0
post-thumbnail

필요성

  • Apache에서 제공하는 성능 테스트 도구로, 오픈소스 프로젝트다.
  • 어떤 기술을 도입하기 전에 해당 기술이 왜 필요한지, 해당 기술로 인해 어떠한 개선이 있는지 정량적으로 말할 수 있어야 한다.
  • ex) 레디스를 왜 도입하셨나요?
    • 빠르다고 해서요(X)
    • 빨라서요(X) -> 얼마나 빠른가요? (...?)
  • Jmeter를 사용하면 아래처럼 답변할 수 있다.

<Redis 캐시 미적용>

평균 응답 시간: 19ms
처리량(Throughput): 3516.2 요청/초
전송 데이터량(Received KB/sec): 18964.61 KB/sec

<Redis 캐시 적용>

평균 응답 시간: 5ms
처리량(Throughput): 7052.2 요청/초
전송 데이터량(Received KB/sec): 38037.87 KB/sec
  • 특정 쿼리에서 다수 엔티티를 조인할 때 발생하는 비용이 크다고 생각했고, 변경이 빈번히 일어나지 않은 데이터라 캐시 효율성이 높아 레디스를 도입하게 되었습니다.
  • 레디스를 도입한 결과 평균 응답 시간이 약 70% 감소(19ms → 5ms)하여 사용자 경험이 좋아지고, 처리량은 2배(3516.2 요청/초 → 7052.2 요청/초)로 증가하여 성능이 개선되었습니다. 로컬 환경이 아닌, 실제 운영 환경에서 테스트했을 경우 네트워크 통신 비용이 절약되어 더 큰 성능 개선 효과를 볼 수 있습니다.

그럼, Jmeter를 어떻게 사용해야 하는지 알아보자!

Jmeter 주요 구성요소

1. Test Plan

  • JMeter 테스트 최상위 요소로, 성능 테스트 모든 설정을 포함한다.
  • Test Plan은 항상 하나이고, 테스트를 구성하는 모든 데이터가 .jmx 파일로 저장된다.
  • 테스트 환경에서 공통으로 사용할 환경변수를 등록해서 사용할 수 있다.

  • 기본적으로 여러 개의 Thread Group은 병렬로 실행된다. 하지만, Run Thread Groups consecutively선택하면 위에서 나열된 대로 순차적으로 실행할 수 있다. (ex: 로그인 테스트 후에 상품 목록 조회 테스트)

2. Thread Group

  • 실제 요청을 생성하는 가상 사용자(스레드)를 정의한다.
    • 아래 설정은 100개의 스레드가 1초 안에 순차적으로 실행하면서, 각 작업(샘플러)을 10번 반복한다고 이해하면 된다.

  • 요청(Sameplers), 설정(Config Elements), 타이머(Timers), 어설션(Assertions) 등을 추가할 수 있다.

1) setUp Thread Group

  • 테스트 전에 필요한 준비 작업을 수행한다. 인증 토큰 발급이나 테스트에 사용할 데이터를 추가하는 등의 작업을 할 수 있다.
  • 가장 먼저 실행되는 스레드 그룹이다.

2) tearDown Thread Group

  • 테스트가 완료된 후 정리 작업을 수행한다. 토큰 무효화, 테스트 데이터 삭제 등의 작업을 할 수 있다.
  • 모든 스레드 그룹이 실행이 완료된 후 실행되는 스레드 그룹이다.

3) Open Model Thread Group

  • 일반 스레드 그룹에서는 사용자 수, ram-up 기간, loop count 만을 지정할 수 있다.
  • 해당 스레드 그룹을 사용하면 요청 빈도(rate), 무작위 도착 패턴(random arrival), 특정 시간 동안 요청 패턴(pause) 등의 트래픽 설정이 가능하다. 즉, 좀 더 현실적이고 유연한 테스트가 가능하다.

3. Sampler

  • 특정 작업을 수행하거나 요청을 보내는 역할을 담당하는 구성요소다.
  • HTTP뿐만 아니라 아래와 같이 JDBC, FTP 등 다양한 요청을 생성할 수 있다.

  • HTTP 요청을 선택했다면, 해당 프로토콜 내용을 프로젝트 환경에 맞게 구성한다.

4. 로직 컨트롤러

  • 로직 컨트롤러를 통해 특정 시나리오 기반 테스트를 구성할 수 있다. 예를 들어, If Controller는 응답 데이터의 ${status} 필드가 ‘success’라면 특정 작업을 처리할 수 있다.

5. Listener

  • 테스트 결과를 시각적으로 보여주는 역할을 하는 구성요소다.

  • View Results Tree는 각 요청과 응답 데이터를 상세하게 보여준다.

  • Summary Report는 테스트 결과의 요약 데이터를 보여준다.
    • 위에서 100개의 스레드에 게시판 목록 조회 작업을 10번 시킨 결과이다.

  • 1000번의 요청이 실행되었고, 모든 요청의 평균 응답시간은 2ms, 가장 짧은 것은 1ms, 가장 긴 것은 48ms, 실패비율은 0.1%이며 처리량은 초당 약 975개의 요청을 처리한다는 것을 확인할 수 있다.

  • 추가로 Aggreagate Report 는 테스트 집계 결과를 보여주고, Backend Listener는 결과 데이터를 외부 모니터링 시스템으로 전송할 수 있다.

profile
꾸준하게

0개의 댓글