[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 사용하기
압축 해제 한 파일에서 bin 디렉토리 안에 있는
jmeter.bat
를 실행하면 아래와 같은 UI 가 열린다.
Test Plan을 우클릭 하여 Thread Group 생성 (몇 개의 쓰레드로 동시에 요청을 보낼 지)
Thread Properties 설정
- Number of Threads: 몇 개의 쓰레드(유저 수)로 테스트할 지
- Ramp-up period: {Number of Thread} 만큼의 쓰레드를 만들 때 소요 할 시간
- Loop Count: 요청을 몇번을 반복할 지
위와 같이 설정하면 1000명의 사람(Number of Threads)이 100회(Loop Count)를 시도한다는 의미이다.
Thread Group을 우클릭 하여 HTTP Request 생성
HTTP Request 설정
- Protocol [http] : http / https 입력
- Server Name or IP : 테스트 할 서버의 주소 입력
- Port Number : 포트번호 입력
- 요청 메소드 입력
- 요청 Path 입력
Thread Group을 우클릭 하여 View Results Tree 생성
Thread Group을 우클릭 하여 Summary Report 생성
테스트 시작
JMeter 결과보기
View Results Tree
Summary Report
느낀점
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 을 이용하여 처리 했었는데, 이렇게 하게 되면 하나하나의 요소에 모두 접근하여 처리가 되기 때문에 당연히 비효율적이다. 위 로직에는 각 요소의 특정 필드의 값을 이용하여 핸들링 하지 않기 때문에..
Leave a comment