코딩과 결혼합니다

[Game_Crew] 성능 테스트 : 저장된 더미데이터 활용하기 본문

코딩과 매일매일♥/Game_Crew

[Game_Crew] 성능 테스트 : 저장된 더미데이터 활용하기

코딩러버 2024. 1. 10. 15:24
728x90
기존에는
1. A 유저가 B유저 평가
2. B유저가 이전에 받은 평가 기록이 있는지
    없으면 - record of rating 과 total rating에 받은 점수를 그대로 각각 저장
    있으면 - record of rating에 평가기록 저장
                  + 이전의 최신 기록들을 최대 10개까지 합산, 평균을 낸 다음 total rating 업데이트

이러한 과정을 거쳤었다.

하지만 성능 테스트를 하면서는 record of rating에만 더미데이터를 넣어놨기 때문에
total rating 테이블을 비어있는 상태이다.
이 저장되어있는 데이터들을 하나씩 읽어 계산한 뒤에 total rating에 저장 및 업데이트를 하도록 할것이다.

 

 public void registrationOfRatings(UserRatingRequestDto userRatingRequestDto, User evaluator, Long evaluated_user) {
    int manner = userRatingRequestDto.getManner();
    //생략
    Long evaluatorId =evaluator.getUserId();

    Optional<TotalRating> checkRating = totalRatingRepository.findByUserId(evaluated_user);
    LocalDateTime now = LocalDateTime.now();

    if (checkRating.isEmpty()){
        //평가 받은 내용을 각각의 테이블에 그대로 저장

    } else if (checkRating.isPresent()) {
       //record of rating에 평가기록 저장
         + 이전의 최신 기록들을 최대 10개까지 합산, 평균을 낸 다음 total rating 업데이트
    }
}


이 메서드를 어플리케이션이 실행될때마다 record of rating의 테이블을 하나씩 읽어서 동작하도록 한다.
@PostConstruct 가 이를 가능하게 해준다.

@PostConstruct
@Scheduled(fixedRate = 3600000) // 1시간마다 실행
public void populateTotalRatingWithRecordOfRatings() {
    List<RecordOfRatings> allRatings = recordOfRatingsRepository.findAll();

    for (RecordOfRatings rating : allRatings) {
        UserRatingRequestDto requestDto = new UserRatingRequestDto(rating.getManner(), rating.getParticipation(), rating.getGamingSkill(), rating.getEnjoyable(), rating.getSociability());
        User evaluator = userRepository.findById(rating.getEvaluator()).orElseThrow(() -> new IllegalArgumentException("Evaluator Not Found")); // 평가자 정보를 가져옵니다.
        Long evaluated_user = rating.getUserId();
        registrationOfRatings(requestDto, evaluator, evaluated_user);
    }
}

 

더하여 스케쥴러를 사용하여 어플리케이션이 실행되는 동안에 1시간 마다 새로운 데이터를 확인하고 처리하는 과정을 자동으로 실행한다.


 

 

어플리케이션을 실행하고 터미널을 확인해보니 열심히 메서드를 수행중이다.

 

 

그리고 이렇게 모든 user의 총 평점이 자동으로 계산되어 완전히 업데이트 되었다.


API 성능 테스트를 할 준비가 끝났다! 다음 글에서는 본격적으로 성능테스트 툴을 사용하여 현재의 서비스 성능을 확인해보고 목표를 정하여 더 나은 서비스를 위하여 개선해보고자 한다.