Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feat: RedisCache를 통한 캐싱 적용 (#44) #45

Merged
merged 3 commits into from
Oct 31, 2023

Conversation

win-luck
Copy link
Contributor

@win-luck win-luck commented Oct 31, 2023

  • 캐싱 권한을 위해 ${DB_ENDPOINT} 값 수정 (기존 값 뒤에 &allowPublicKeyRetrieval=true 추가)
  • RedisCacheConfig 도입 (DB 접근횟수 최소화를 통한 성능 개선 기대)
  • UserService 주요 ResponseDto 캐싱
  • FoodService 주요 ResponseDto 캐싱

예시 설명

  • Cacheable을 통해 서버가 클라로 반환하는 객체를 메모리 영역에 key값 기반으로 캐싱
  • CacheEvict를 통해 메모리에 캐싱되어 있던 객체 제거
  • 수정에 대응하는 CachePut 등이 존재하나, 우리의 Repository에는 수정에 대한 응답은 200 OK Void이기에 배제
    // 회원 기준섭취량 조회
    @Cacheable(value = "ResponseUserNutritionDto", key = "#userId", cacheManager = "diareatCacheManager")
    @Transactional(readOnly = true)
    public ResponseUserNutritionDto getUserNutrition(Long userId) {
        User user = getUserById(userId);
        List<Integer> standard = UserTypeUtil.getStanardByUserType(user.getType()); // 유저 타입에 따른 기본 기준섭취량 조회
        return ResponseUserNutritionDto.from(user, standard.get(0), standard.get(2), user.getWeight(), standard.get(1)); // 단백질은 자신 체중 기준으로 계산
    }

    // 회원 기준섭취량 직접 수정
    @CacheEvict(value = "ResponseUserNutritionDto", key = "#updateUserNutritionDto.userId", cacheManager = "diareatCacheManager")
    @Transactional
    public void updateBaseNutrition(UpdateUserNutritionDto updateUserNutritionDto) {
        User user = getUserById(updateUserNutritionDto.getUserId());
        BaseNutrition baseNutrition = BaseNutrition.createNutrition(updateUserNutritionDto.getCalorie(), updateUserNutritionDto.getCarbohydrate(), updateUserNutritionDto.getProtein(), updateUserNutritionDto.getFat());
        user.updateBaseNutrition(baseNutrition);
        userRepository.save(user);
    }

HotFix

image
  • FoodService 음식 및 즐겨찾는 음식의 수정/삭제 요청 dto에 Key에 해당하는 userId/date 등이 누락된 것이 확인되어, 관련 dto 및 메서드 수정 필요
  • 현재 비즈니스 로직에 의해 한 번, 캐싱 작업에 의해 한 번 더 DB에 접근하고 있는 상황

@win-luck win-luck added the feat 기능 구현 label Oct 31, 2023
@win-luck win-luck requested a review from synoti21 October 31, 2023 15:33
@win-luck win-luck self-assigned this Oct 31, 2023
@win-luck win-luck linked an issue Oct 31, 2023 that may be closed by this pull request
@win-luck win-luck changed the title Feat: Feat: ResponseDto RedisCache를 통한 캐싱 적용 (#44) Oct 31, 2023
@win-luck win-luck changed the title Feat: ResponseDto RedisCache를 통한 캐싱 적용 (#44) Feat: RedisCache를 통한 캐싱 적용 (#44) Oct 31, 2023
@synoti21
Copy link
Contributor

Redis를 이용해 User들의 각종 Dto를 캐싱하셨군요! 클라이언트와 서버 간 통신이 더욱 최적화될 것 같습니다!

@synoti21 synoti21 merged commit 6eb8c06 into master Oct 31, 2023
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
feat 기능 구현
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Feat: RedisCache를 통한 캐싱 적용 (#44)
2 participants