N+1문제를 @Query 와 Fetch join을 통해 해결했다. 근데 이것이 실제로 성능이 개선되었는지 검증을 해야 한다고 생각이 들었고, Jmeter를 활용해서 테스트를 진행해보겠다.
1. Jmeter 설치
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. 결론
결론적으로, 쿼리를 작성할 때에도 성능 최적화를 고려하여 신중하게 작성하는 것이 중요합니다.!
'프로젝트 > WMS' 카테고리의 다른 글
[CI/CD] EC2+도커+젠킨스+NIGNX 배포하기 (end) (1) | 2024.11.13 |
---|---|
[CI/CD] EC2+도커+젠킨스+NIGNX 배포하기 (9) (0) | 2024.11.13 |
[CI/CD] EC2+도커+젠킨스+NIGNX 배포하기 (8) (0) | 2024.11.12 |
[CI/CD] EC2+도커+젠킨스+NIGNX 배포하기 (7) (0) | 2024.11.08 |
[CI/CD] EC2+도커+젠킨스+NIGNX 배포하기 (6) (0) | 2024.11.07 |