개발일지/Spring

캐시 사용해보기 @Cacheable, @CacheEvict (Spring-boot)

E-room 2023. 1. 13. 12:48
728x90

캐시 사용

  • 서버의 부담을 줄이고 성능을 높이기 위해 사용되는 기술
  • DB에서 조회하는 게 오래 걸리는 작업에 적용하여 해당 결과값을 저장해 두고 가져옴으로써 빠르게 처리가 가능해짐
  • 동일한 결과값이 매번 자주 호출되는 작업에 적용하면 유리하다 -> 결과값이 매번 다른 작업에 적용한다면 캐시를 확인하는 작업으로 인한 부하가 생겨 성능이 오히려 떨어질 수 있으니 주의하여 사용한다

 

Spring Cache (@Cacheable) 간단 사용법

1. gradle 종속성 추가

implementation 'org.springframework.boot:spring-boot-starter-cache'

 

2. @EnableCaching 설정

캐시 기능을 사용할 애플리케이션에 @EnableCaching 어노테이션을 붙여준다

@SpringBootApplication
@EnableCaching // <-- 어노테이션 추가
public class FarmApplication {

    public static void main(String[] args) {
        SpringApplication.run(FarmApplication.class, args);
    }

}

 

3. 캐시 저장하기 @Cacheable

해당 메서드에 캐시를 적용했으므로 캐시가 저장되어 있을 때는 메서드 안의 로직이 실행되지 않고 저장되어 있던 결과값만 호출된다.

-> 최초로 getTest() 메서드가 호출되면 sout 부분이 실행되고 리턴값을 주지만, 이후에 캐시가 삭제되기 전까지는 리턴값만 가져온다.

@GetMapping("/cacheTest")
@Cacheable(value = "cacheTest") // value, key 등으로 다양한 설정 가능
public ResponseEntity getTest() {

    System.out.println("캐시가 저장되어있지 않을때만 이 메세지가 보입니다");

    return new ResponseEntity("캐시 메세지가 호출되었나요 ?", HttpStatus.OK);
}

 

4. 저장된 캐시 삭제하기 @CacheEvict

해당 메서드가 호출되면 "cacheTest"라는 벨류값을 가진 캐시가 삭제된다.

-> clearCache() 메서드가 호출된 이후에 getTest() 메서드를 호출하면, sout 부분이 실행된다.

@GetMapping("/cacheClear")
@CacheEvict(value = "cacheTest")
public ResponseEntity clearCache() {
    return new ResponseEntity<>("저장된 캐시를 삭제합니다", HttpStatus.OK);
}

 

결과 확인해 보기

  • 최초 호출 시에는 저장된 캐시가 없으므로 메서드 안의 sout가 실행된다

 

  • 이후에는 실제로 메서드를 실행하지 않고 캐시에 저장된 결과값만 리턴해준다

 

  • 캐시를 삭제하는 메서드를 호출

 

  • 다시 getTest() 메서드를 실행하면 메서드가 실제로 실행된다

 

 

 

 

Spring Cache, 제대로 사용하기

Spring Cache 사용법, Annotation 등을 알아보고 설정 방식을 알아보는 것이 해당 포스팅의 목표입니다. 📌 Spring Cache Series ✔ Spring Cache, 제대로 사용하기 ✔ Caffeine Cache, 제대로 사용하기 1 ✔ Caffeine Cac

gngsn.tistory.com

 

728x90