로그 유무에 따른 성능 측정

Apache JMeter를 통해 성능 측정하기

JMeter

JMeter 는 성능 측정을 위해 사용하는 오픈소스이다. 오픈소스 중에서는 항상 TOP7에 랭크될 정도로 많이 사용한다. 순수 자바 어플리케이션이며 정적, 동적, 웹 동적 어플리케이션 테스팅 모두 가능하다. Apache JMeter 공식 문서 에 따르면,

  • Web - HTTP, HTTPS (Java, NodeJS, PHP, ASP.NET, …)
  • SOAP / REST Webservices
  • FTP
  • Database via JDBC
  • LDAP
  • Message-oriented middleware (MOM) via JMS
  • Mail - SMTP(S), POP3(S) and IMAP(S)
  • Native commands or shell scripts
  • TCP
  • Java Objects

위와 같이 다양한 어플리케이션, 서버, 프로토콜에서 사용할 수 있다.

대규모 테스트에는 좀 불리하다고 한다🤔 그래도 여러 플러그인을 지원한다는 장점도 있다.

(참고1, 참고2)

JMeter 설치

아래 설치 방법은 Mac OS 기준이다.

$ brew install jmeter

JMeter 실행

$ open /opt/homebrew/Cellar/jmeter/5.4.1/bin/jmeter

# 찾아보면 보통 아래처럼 하라는데 나는 brew 위치가 달라서 알아서 찾아서 했다.
$ open /usr/local/bin/jmeter

plugin 설치

Options → Plugin Manager

Available Plugin 탭에서

  • 3 Basic Graphs
  • Custom Thread Groups

두 개를 설치한다.

ThreadGroup 생성 및 측정

jmeter01

여러 개의 스레드 그룹을 만들어서 실행해 볼 수 있다. JMeter 의 실행 단위가 이 스레드 그룹이다.

하나의 스레드 그룹에 여러 개의 HTTP Request 를 만들 수 있지만, 나는 같은 요청을 여러 형태로 보존하고 싶었기 때문에 따로 만들었다.

jmeter02

결과를 여러 형태의 리스너로 볼 수 있다.

나는 그 중에서 요청을 하나씩 볼 수 있는 View Results Tree 와 TPS 등을 요약해서 보여주는 Summary Report , 같은 정보를 그래프로 표현하는 Graph Results 세 개만 볼 것이다.

jmeter03

Thread Group 은 아래와 같이 스레드 수만 변경한다.

Numbers of Threads (users) 가 말 그대로 스레드 수, 요청하는 사용자의 수를 나타낸다. 아래는 어느정도 시간 간격으로 할거냐, 반복할거냐 이런건데 옵션을 바꿔가며 주면 좋을 것 같다.

jmeter04

그리고 HTTP Request 에 다음과 같이 요청 보낼 곳 정보를 입력한다.

jmeter05

지금은 단순 조회 테스트라 내용이 많지 않은데, POST 요청 등에서 body 값을 넣어주면 된다.

그리고 Start 를 누르면 끝~!🕺

성능 측정

성능 측정 대상

우리 어플리케이션은 크게 두 가지 로그를 출력한다.

  • Logback 을 사용한 로그
  • P6spy 를 사용한 SQL 쿼리 로그

Logback 을 사용한 로그의 경우, 개발 서버는 INFO 레벨, 운영 서버는 WARN 레벨로 출력하고 있다. 여기에 더해 LogAOP 라는 별도 설정을 통해 다양한 형태의 로그 포맷을 만들었다.

  1. 500 대 에러의 경우 StackTrace를 출력한다.
  2. 컨트롤러단부터 모든 레이어의 모든 메서드에 대한 로그를 출력한다. 이 로그란 파라미터, 메서드가 수행되는 시그니처(클래스와 메서드명), 반환값을 말한다.
  3. 어노테이션을 사용해 특정 메서드 수행에 소요되는 시간을 출력할 수 있다.

그리고 Logback 설정 파일에서는 시간, 스레드 등을 표시하며 HTTP Request&Response 설정도 별도로 해 둔 상태이다.

LogAOP X, P6spy O (개발 서버)

jmeter06

jmeter07

LogAOP X, P6spy O

jmeter08

jmeter09

LogAOP O, P6spy X

jmeter10

jmeter11

LogAOP X, P6spy X (운영 서버)

jmeter12

jmeter13

결론

콘솔 출력이 꽤 많은 시간을 잡아먹는다는 것을 알게 되었다. 성능 향상을 위해 운영 버전에는 에러 출력 이외의 모든 로그를 제외했다.


© 2017. All rights reserved.

Powered by Hydejack v7.5.2