[JMeter] JMeter 란? 설치부터 사용까지

JMeter 란?

성능 및 부하를 측정할 수 있는 툴(도구) 이며, 오픈소스 Java 애플리케이션 이다. 서버나 네트워크 또는 개체에 대해 과부하를 시뮬레이션하여 강도를 테스트하거나 다양한 부하 유형에서 전체 성능을 분석하는 데 사용할 수 있다.

비슷한 부하테스트 도구로는 Apache Benchmark, Ngrinder, Pinpoint, Gatling등이 있다. 다음은 Apache JMeter가 가진 특징을 나열한 것이다.

확장성이 좋은 부하 테스트 도구라고 생각하면 된다.

  • JMeter 기본 개념
    • Thread Group : 각종 테스트가 발생하는 루트
    • Sampler : 사용자의 행동을 대신 작동
    • Listener : 처리 상황 및 결과를 데이터나 그래프로 노출

JMeter 의 기능

  • 다양한 애플리케이션, 서버, 프로토콜 유형을 로드하고 성능 테스트를 할 수 있다.
    • 웹 - HTTP, HTTPS(Java, NodeJS, PHP, ASP.NET, …)
    • SOAP/REST 웹 서비스
    • FTP
    • JDBC를 통한 데이터베이스
    • LDAP
    • JMS를 통한 메시지 지향 미들웨어(MOM)
    • 메일 - SMTP(S), POP3(S) 및 IMAP(S)
    • 기본 명령 또는 셸 스크립트
    • TCP
    • 자바객체
  • 빠른 테스트 계획 기록(브라우저 또는 기본 애플리케이션에서), 빌드 및 디버깅 을 허용하는 모든 기능을 갖춘 테스트 IDE .
  • 모든 Java 호환 OS(Linux, Windows, Mac OSX 등)에서 로드 - 테스트를 위한 CLI 모드
  • 완전하고 준비된 동적 HTML 보고서
  • 가장 많이 사용되는 응답 형식, HTML , JSON , XML 또는 모든 텍스트 형식 에서 데이터를 추출하는 기능을 통한 손쉬운 상관관계
  • 완벽한 이식성 및 100% Java 순도 .
  • 완전한 다중 스레딩 프레임워크는 많은 스레드에 의한 동시 샘플링과 별도의 스레드 그룹에 의한 다양한 기능의 동시 샘플링을 허용
  • 테스트 결과의 캐싱 및 오프라인 분석/재생.

  • 확장성이 뛰어난 코어
    • 플러그형 샘플러는 무제한 테스트 기능을 허용
    • 스크립터블 샘플러 ( Groovy 및 BeanShell과 같은 JSR223 호환 언어)
    • 플러그인 가능한 타이머 로 여러 부하 통계를 선택 가능
    • 데이터 분석 및 시각화 플러그인 은 뛰어난 확장성과 개인화를 허용
    • 함수를 사용하여 테스트에 동적 입력을 제공하거나 데이터 조작을 제공
    • Maven, Gradle 및 Jenkins용 타사 오픈 소스 라이브러리를 통한 손쉬운 연속 통합

JMeter 설치하기

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

위 사이트에 접속하여 Binaries 에 있는 파일을 다운받는다. (JMeter 는 순수 자바 애플리케이션 이고, Java 8 문법을 사용하기 때문에 자바 8 버전 이상이 설치 되어 있어야 한다.)

설치 후 압축만 해제하면 바로 사용 가능하다.

JMeter

JMeter 사용하기

압축 해제 한 파일에서 bin 디렉토리 안에 있는 jmeter.bat 를 실행하면 아래와 같은 UI 가 열린다.

JMeter

Test Plan을 우클릭 하여 Thread Group 생성 (몇 개의 쓰레드로 동시에 요청을 보낼 지)

JMeter

Thread Properties 설정

JMeter

  • Number of Threads: 몇 개의 쓰레드(유저 수)로 테스트할 지
  • Ramp-up period: {Number of Thread} 만큼의 쓰레드를 만들 때 소요 할 시간
  • Loop Count: 요청을 몇번을 반복할 지

위와 같이 설정하면 1000명의 사람(Number of Threads)이 100회(Loop Count)를 시도한다는 의미이다.

Thread Group을 우클릭 하여 HTTP Request 생성

JMeter

HTTP Request 설정

JMeter

  • Protocol [http] : http / https 입력
  • Server Name or IP : 테스트 할 서버의 주소 입력
  • Port Number : 포트번호 입력
  • 요청 메소드 입력
  • 요청 Path 입력

Thread Group을 우클릭 하여 View Results Tree 생성

JMeter

Thread Group을 우클릭 하여 Summary Report 생성

JMeter

테스트 시작

JMeter

JMeter 결과보기

View Results Tree

JMeter

Summary Report

JMeter

느낀점

JPA 를 사용해 토이프로젝트를 생성했고, Entity 를 DTO 로 변환 시켜 주면서 어떤 방법이 더 좋을 지 궁금해졌다.

1
2
3
4
5
@Override
public List<StationInformationDto.Response> getAllStations(Pageable pageable) {
	Page<StationInformationEntity> stations = stationRepository.findAll(pageable);
	return stations.stream().map(StationInformationEntity::toStationInformationResponse).collect(toList());
}
1
2
3
4
5
@Override
public List<StationInformationDto.Response> getAllStations(Pageable pageable) {
	Page<StationInformationEntity> stations = stationRepository.findAll(pageable);
	return stations.map(StationInformationEntity::toStationInformationResponse).toList();
}

난 직접 어떤 코드가 더 효율적인지 확인해보기 위해 JMeter 를 이용해 직접 부하를 주며, 두 가지 변환방법에 대해 테스트를 해보게 되었는데 결론적으로 아래 코드가 더 안정성이 있다는 걸 알게 됐다.

사람이 참 간사한게 직접 하기 전에는 몰랐지만, 알고보면 당연하다고 생각된다.
기존에는 stream 의 map 을 이용하여 처리 했었는데, 이렇게 하게 되면 하나하나의 요소에 모두 접근하여 처리가 되기 때문에 당연히 비효율적이다. 위 로직에는 각 요소의 특정 필드의 값을 이용하여 핸들링 하지 않기 때문에..

Tags:

Updated:

Leave a comment