DevKim

[Webtooniverse] 서버 부하를 줄이기 위한 캐싱 적용 본문

Spring Project/Webtooniverse

[Webtooniverse] 서버 부하를 줄이기 위한 캐싱 적용

on_doing 2021. 8. 20. 16:59
728x90

0. 개요 

- 자주 호출되고 하루동안 업데이트가 발생하지 않는 데이터를 반복해서 DB에 요청을 하는 과정을 캐시 서버를 도입하여 개선해보려고합니다.

 

1. 캐싱을 적용할 대상 탐색

  • Webtooniverse 랭킹
  • Naver 랭킹
  • Kakao 랭킹
  • 베스트 리뷰어 추천 웹툰
  • 베스트 리뷰

 

2. 스케쥴러를 사용하여 매일 자정 Cache를 초기화

@EnableScheduling
@Configuration
@RequiredArgsConstructor
public class Scheduler {

    private final RedisTemplate redisTemplate;
    private final WebtoonService webtoonService;

    @Scheduled(cron = "0 0 0 * * *")
    public void redisConnectionTest() {
        //redis cache 삭제
        redisTemplate.delete("bestReviewerWebtoon");
        redisTemplate.delete("WeeklyTotalRankV2");
        redisTemplate.delete("naverRank");
        redisTemplate.delete("kakaoRank");

        //caching
        BestReviewerWebtoonResponseDto bestReviewerWebtoon = webtoonService
            .getBestReviewerWebtoon();
        Set<RankTotalResponseDto> monthTotalRank = webtoonService.getWeeklyTotalRank();
        List<PlatformRankResponseDto> monthNaverRank = webtoonService.getNaverRank();
        List<PlatformRankResponseDto> monthKakaoRank = webtoonService.getKakaoRank();
    }
}

서버간 캐시 데이터를 통합하여 사용하기 위해 Global Cache 전략을 사용했다.

 

3. 캐싱 전후 비교

- 결과 TPS약 1.5배 상승, 총 응답 시간은 약 1.6배 감소

 

4. RDS CPU 사용량 절반 이상 감소

 

 

 

 

 

 

728x90
Comments