worldint
mathengi
worldint
전체 방문자
오늘
어제
  • 분류 전체보기 (152)
    • infra, cloud (4)
      • aws (4)
    • TIL,WIL(일간,주간 회고) (57)
    • 컴퓨터 공학 (5)
      • 정보통신 (3)
      • 컴퓨터 구조 (2)
    • Math (1)
      • linear algebra (0)
      • 명제와 집합 (1)
      • Linux Ubuntu (0)
    • Operating System (9)
    • programming (63)
      • c , c++ (9)
      • c# (0)
      • java (2)
      • javascript (14)
      • Python (4)
      • github (1)
      • programing terms (12)
      • html, css (2)
      • docker (3)
      • algorithm_datastructure (4)
      • database (9)
      • flutter(dart) (2)
    • 항해99 부트캠프 (7)
      • 사전교육 (7)
    • IT English(개발관련 영어공부) (0)
    • 알고리즘 (1)
    • 보안관련 (1)

블로그 메뉴

    공지사항

    인기 글

    태그

    • ci/cd
    • nodejs
    • db데드락
    • Javascript
    • MONGOOSE
    • ec2 #코드디플로이 #리눅스
    • AWS
    • flutter #provider #error
    • CloudFront
    • NoSQL
    • 디비데드락
    • NVM
    • docker
    • node
    • EC2
    • Blue/Green
    • MongoDB

    최근 댓글

    최근 글

    티스토리

    hELLO · Designed By 정상우.
    worldint

    mathengi

    programming/java

    [spring] 캐시 추상화

    2024. 12. 5. 17:05

    캐시란

    애플리케이션 개발시 자주 사용되는 데이터들을 '캐시 저장소'라는 곳에 넣어두고
    다음에 또 동일한 데이터를 요청시에 그 캐시 저장소에서 꺼내서 주는것

    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
      'programming/java' 카테고리의 다른 글
      • [java문법]캐스팅이란?
      worldint
      worldint
      공부한 내용들, 트러블 슈팅, 아티클 번역 등등 올리는 블로그입니다

      티스토리툴바