캐시란
애플리케이션 개발시 자주 사용되는 데이터들을 '캐시 저장소'라는 곳에 넣어두고
다음에 또 동일한 데이터를 요청시에 그 캐시 저장소에서 꺼내서 주는것
spring의 캐시 추상화
spring에서는 이런 캐시 기능을
AOP 패러다임에 따라서
추상화하여 사용하기 쉽게 해놓음
사용 방법
원하는 메서드위에 어노테이션을 붙임으로 캐시기능을 사용할 수 있다
클래스나 인터페이스 단위로도 캐시를 적용 할 수 있지만 드물다고 한다
스프링에서는 아래와 같은 캐싱을 위한 메서드 레벨 어노테이션이 존재한다(공식문서에 몇개 더 있음)
@Cacheable
@CachePut
@CacheEvict
@Cacheable
@Cacheable("books")
public Book findBook(ISBN isbn) {...}
* isbn은 책의 고유 번호 같은것
- findBook 메소드는 'books'라는 이름의 캐시에 연결되어있다
- 처음 요청시에는 책의 정보를 디비에서 받아오고
- 그 정보를 "books"라는 이름의 캐시에 `isbn` 매개변수를 key로 두고 디비에서 가져온 책정보를 `value`로 저장한다
- 두번째에 동일한 `isbn`으로 요청이 들어오면 캐시에서 `isbn`과 동일한 키가 있어면 그 데이터를주고 해당 메서드는 실행되지않는다
- @Cacheable을 사용하는 방식으로는
- 1.위와 같이 키를 명시적으로 지정하지 않는 방법 : 그럼 매개변수가 키가된다
- 2. 고정된 스트링 키를 사용하는방식 `@Cacheable(value = "books", key = "'all'")`
- 3. 객체를 키로 사용하는 방식`@Cacheable(value = "books", key = "#isbn")`
- 4. 객체의 특정 필드를 키로 사용하는방식`@Cacheable(value = "books", key = "#isbn.bookNumber")`
@CachePut
- CachePut은 Cachealbe과 비슷하지만 조회시에 캐시저장소에 저장은 하지만 해당 메소드를 스킵하지는 않는다
@CacheEvict
- 캐시를 제거하는 어노테이션
- allEntries=true로 해놓으면 books라는 이름의 캐시 전체 삭제
@CacheEvict(cacheNames="books", allEntries=true)
public void loadBooks(InputStream batch)
- 특정 키의 캐시만 삭제하는 경우
@CacheEvict(value = "book", key = "#book.bookNo")
public void updateBook(Book book) {
}
위의 캐쉬 기능을 사용하기 위해서는 config 클래스에 @EnableCaching 어노테이션을 적용해야 사용가능
@EnableCaching
@Configuration
public class CacheConfig {
...
}
'programming > java' 카테고리의 다른 글
[java문법]캐스팅이란? (0) | 2022.12.05 |
---|