응애개발자
article thumbnail
728x90

N+1문제를 @Query 와 Fetch join을 통해 해결했다. 근데 이것이 실제로 성능이 개선되었는지 검증을 해야 한다고 생각이 들었고, Jmeter를 활용해서 테스트를 진행해보겠다.

 

1. Jmeter 설치 

 

Apache JMeter - Download Apache JMeter

Download Apache JMeter We recommend you use a mirror to download our release builds, but you must verify the integrity of the downloaded files using signatures downloaded from our main distribution directories. Recent releases (48 hours) may not yet be ava

jmeter.apache.org

Jmeter 홈페이지에서 .zip파일을 다운로드 후 압축을 풀어주자.

 

2. Jmeter 실행

압축을 해제한 폴더의 bin폴더에서 jmeter.bat을 실행하자.

실행하고 나면

 

 

이렇게 Jmeter가 켜질 것이다.

3. Thread Group 생성

Test Plan → add threads → thread Group 순으로 클릭하여 스레드 그룹을 만들어준다. Thread Group은 특정 시나리오에 대한 세부사항을 정의할 수 있다.

 

  • Number of Threads : 동시에 실행되는 가상 사용자의 수를 지정한다. 이 수치가 높을수록 시스템에 높은 부하를 가할 수 있다.
  • Ramp-up Period : 가상 사용자가 전체 시간 동안 동시에 시작되지 않고, 일정한 시간 동안 차례로 시작되는 기간을 지정한다. 예를들어 10개의 스레드와 10초의 Ramp-up Period으로 설정하면 1초마다 1개의 스레드가 실행되며 , 10초 후에는 모든 쓰레드가 실행된다.
  • Loop Count : 각 사용자가 요청을 초당 몇번씩 할건지 설정한다.

필자는 여기서 사용자 총 1000명중 50명(1000/50)이 1초에 100번씩 20초동안 클릭 총 10만건에 대해 요청을 한다고 가정해보면 밑처럼 표현할 수 있다.

4. Http Cookie 설정

또한 프로젝트에서 토큰을 사용하므로 토큰도 넣어주겠다.

 

add -> config element -> cookie manager -> 요청보낼 쿠키가 생성 됌

  • Add를 클릭하여 쿠키값을 입력할 공간을 생성
  • Name : 쿠키 이름
  • Value :  쿠키 값
  • Domain : 서버 주소
  • Path : 주소를 뺀 나머지 경로(모든 경로에 쿠키가 사용된다면 비워두고 특정 경로에만 쿠키 사용된다면 넣어주자)

localhost를 이용할 것이므로 secure는 체크 x

이렇게 설정한뒤 HttpRequest를 통해 요청을 보내보자.

 

4. HttpRequest 설정

Thread Group 우클릭 -> add -> sampler -> Http Request 클릭

프로토콜, IP, 포트번호, 그리고 요청보낼 주소를 설정해주고 초록색 재생버튼을 통해 실행할수 있다.

 

5. Summary Repory, View Results Tree 추가

Add -> Listener -> Summary Report를 통해 처리량, 에러율 등을 확인할 수 있다.

Add -> Listener -> View Results Tree를 통해 상세한 정보를 확인할 수 있다. 

 

그럼 이제 준비 됐으니 한번 테스트 해보자.

 

6. 테스트 결과

쿼리 성능 개선 전

  • Average: 2831ms
  • Throughput: 308.0 requests/sec

평균 한 쿼리에 대해서 2.831초가 걸리고 서버 처리율은 초당 308개의 요청을 처리한다는 것을 볼 수있다. 아 뭔가 느린것 같은데... 그럼 쿼리를 개선하고 다시 테스트를 돌려보자.

 

쿼리 성능 개선 후

 

  • Average: 1054ms
  • Throughput: 528.1 requests/sec

 

보이는가 한 쿼리에 대해 초당 1.054초가 걸리고 서버 처리율은 초당 528개의 요청을 처리할 수 있다. 

 

Average(응답 시간) 개선 전과 후 성능 비율 

응답시간 약 2.7배 빨라짐

 

Throughput(처리량) 개선 전과 후 처리량 증가 비율 

 

처리량 약 1.71배 빨라짐

 

7. 결론

결론적으로, 쿼리를 작성할 때에도 성능 최적화를 고려하여 신중하게 작성하는 것이 중요합니다.!

profile

응애개발자

@Eungae-D

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!