코딩과 결혼합니다

[Game_Crew] 성능 테스트 : JMeter 사용법과 테스트 본문

코딩과 매일매일♥/Game_Crew

[Game_Crew] 성능 테스트 : JMeter 사용법과 테스트

코딩러버 2024. 1. 12. 15:11
728x90

JMeter 용어

  • Thread Group : 테스트에 사용될 쓰레드의 개수. (쓰레드 = 사용자)
  • Sampler : 사용자가 취할 행동 (로그인, 게시물 작성, 조회 등)
  • Listener : 응답을 받아 리포팅, 검증, 그래프 등 다양한 처리
  • Configuration : Sampler 또는 Listener가 사용할 설정 값 (쿠키, JDBC 커넥션 등)
  • Assertion : 응답 확인 방법 (응답 코드, 본문 내용 비교 등)

현재의 내 서비스는 어느 정도의 성능을 가지고 있을까?

나는 소소하게 1분에 1000명의 유저가 동시에 API요청을 했을 때에 어느정도의 성능이 나오는지 확인해 보았다.
    //유저의 평가들을 가져오는 API
    @GetMapping("/user/rating/{evaluated_user}")
    public UserRatingsResponseDto getUserRatings(
            @PathVariable Long evaluated_user,
            @RequestParam int page,
            @RequestParam int size
            ){
        return ratingService.getUserRatings(evaluated_user, page-1, size);
    }
}

 

 

1000명의 유저 1분(60초)동안 동시에 실행

 

 

임의의 (Id 10번) 유저의 점수를 조회하도록 API 요청을 설정

 

 

HTTP Request에 대한 Listener를 추가하여 응답을 확인하고 테스트 결과를 분석

 

✔️결과

 

Average(평균) 141,
Min(최소값) 0,
Max(최대값) 200,
std.Dev.(표준 편차) 8.20,
Error %(에러 비율) 0.00%,
Througghput(처리량) 16.7/sec,
Received KB/sec(수신 데이터 전송 속도) 16.50, 
Sent KB/sec(전송 데이터 전송 속도) 2.34,
Avg.Bytes(평균 바이트) 1015.0

 

 

다음으로 하나의 데이터를 처리하는 시간은 0.2 초 안으로 내 기준 만족스러운 수치이다.


더 많은 유저가 1분동안 동시에 API를 요청하였을 때에는 어떤 결과가 나올까?

 

1만명의 유저가 1분동안 동시에 요청하도록 하였고,

왜 인지 모르겠으나 1분동안은 에러가 0.00% 였다가 1분을 넘겨버리며 계속해서 에러가 뜨기 시작했다.

 

알아보니 서버의 처리량이 초과되어 에러가 발생할 수 있다고 한다. (CPU, 메모리 등)

 

(더하여 다른 api까지 함께 실행하고 있었다.. 11000으로 돌리고 있었던 것이다. - 안쓰는 API는 disable을 해두었다.)

 

📌5000명

 

Average 37459,
Min 0,
Max 77118,
std.Dev. 21974.84,
Error % 0.00%,
Througghput 36.6/sec,
Received KB/sec 36.30, 
Sent KB/sec 5.15,
Avg.Bytes 1015.0

user 1000명 5000명
처리량 초당 16.7개 초당 36.6개
수신 데이터 전송 속도 초당 16.50KB 데이터 수신 초당 36.30KB
전송 데이터 전송 속도 초당 2.34KB 데이터 전송 초당 5.15KB
에러  0.00%

 

사용자의 수가 늘어남에 따라 더 많은 요청을 처리함을 볼 수 있었다.

그러나 처리 시간이 엄청나게 늘어남을 확인하였고 성능을 개선할 필요가 느껴졌다.

 

 

(처리 시간이 249ms - 38923ms - 76462ms 로 아주 크게 늘어남)


성능 테스트 목표

1분동안 5000명의 유저가 동시에 API 요청을 하였을때 평균 1000ms 이하로 처리할 수 있게 성능을 올려볼 것이다.
이를 만족하면 다른 API 테스트도 진행하면서 전체적인 성능을 높여보고자 한다.   

서버를 확장하거나 로드 밸런서를 사용하는 것은 이 규모에는 쓰지 않아도 될 것같아 최대한 미루고,알고리즘을 개선하거나 캐싱을 사용하는 등으로 시간을 단축시켜보는 방법을 사용할 것이다.