본문 바로가기
Spring

Spring Day 34 : @Cacheable, @CachePut, @CacheEvict

by 우 석 2024. 3. 20.

캐싱의 중요성

캐싱에는 자주 액세스하는 데이터를 임시 저장 영역에 저장하여 해당 데이터에 대한 후속 요청이 더 빠르게 처리될 수 있도록 하는 작업이 포함됩니다. 애플리케이션의 다양한 수준에서 데이터를 캐싱하면 비용이 많이 드는 계산이나 데이터베이스 쿼리를 반복적으로 수행할 필요성이 줄어들어 응답 시간이 향상되고 서버 로드가 줄어듭니다.

Spring 백엔드에서는 캐싱을 사용하여 메서드 호출, 데이터베이스 쿼리 또는 전체 웹 페이지의 결과를 저장할 수 있습니다. 그러나 성공적인 캐싱 전략을 위해서는 데이터 변동성, 캐시 제거 정책, 캐시 일관성과 같은 요소를 신중하게 고려해야 합니다.

 

캐싱 @

@Cacheable

  • 메서드 호출 결과를 캐시해야 함을 나타내는 데 사용됩니다.
  • 동일한 인수를 사용하여 이후에 메서드를 호출하면 메서드를 다시 실행하지 않고도 캐시에서 제공될 수 있습니다. 'value' 속성은 캐시 이름을 지정하고, 'key' 속성은 캐시 키를 지정합니다.
  • 해당 결과가 userId를 캐시 키로 사용하여 캐시 이름 "users"로 캐시 되어야 함을 나타냅니다.
 @Cacheable(value = "users", key = "#userId")
    public UserDetails getUserDetails(Long userId) {
        return userRepository.findById(userId)
                             .orElseThrow(() -> new UserNotFoundException(userId));
    }

 

 

@CachePut

  • 메서드 호출 결과로 캐시를 업데이트하는 데 사용됩니다.
  • 항상 메서드를 실행한 다음 결과로 캐시를 업데이트합니다. 이는 캐시가 최신 데이터로 업데이트되도록 하려는 시나리오에 유용합니다.
  • 메서드 실행 후 캐시가 최신 사용자 세부정보로 업데이트되도록 합니다.
    @CachePut(value = "users", key = "#user.id")
    public UserDetails updateUser(UserDetails user) {
        // Update user details in the database
        UserDetails updatedUser = userRepository.save(user);
        return updatedUser;
    }

 

 

@CacheEvict

  • 캐시에서 항목을 제거하는 데 사용됩니다.
  • 메서드 실행 전후 등 캐시 항목을 제거해야 하는 시기를 지정할 수 있습니다. 'value' 속성은 캐시 이름을 지정하고, 'key' 속성은 캐시 키를 지정합니다.
  • 메서드 실행 후 캐시에서 사용자 세부정보가 제거됩니다.
    @CacheEvict(value = "users", key = "#userId")
    public void deleteUser(Long userId) {
        // Delete user from the database
        userRepository.deleteById(userId);
    }