지구용사 2024. 4. 9. 14:47

스프링에서 AOP 기반으로 캐시가 작동하며 어노테이션으로 설정할 수 있도록 간편하게 제공한다.

그중 하나가 @Cacheable 어노테이션이다.

 

🔎 캐시

자주 사용하는 데이터를 저장하는 공간을 의미한다. 요청이 있을 때마다 생성 및 응답하기 보다는 미리 생성된 데이터를 저장해놓고 요청올 때마다 로직을 거치지않고 반환해주는 것이 시스템 성능을 향상할 수 있다.

 

@Cacheable은 캐시 생성 및 전달을 담당한다. 캐시에 데이터가 없을 경우 기존의 로직을 실행 후 캐시에 데이터를 추가하고, 캐시에 데이터가 있으면 캐시의 데이터를 반환한다.

 

@Cacheable("member")
public Member cacheable(String value) {
    System.out.println("cacheable 실행");
    return member;
}

 

1. 파라미터 value의 값으로 'wow'를 입력들어온다.

2. 캐싱된 데이터가 없기에 cacheable() 메소드가 실행된다.

3. sout 출력된다.

4. 반환값으로 member가 캐시 저장소에 저장된다.

5. 시간이 흐른 후 파라미터 value의 값으로 'wow'가 입력들어왔다.

6. 캐싱되어있기에 캐시 저장소에서 member가 반환되고 메소드는 실행되지 않아 sout 출력은 없다.