개발정리

스프링 문서 읽기-캐시 추상화의 이해 본문

스프링

스프링 문서 읽기-캐시 추상화의 이해

coffee. 2024. 5. 30. 19:37

캐시 추상화 이해 하기

캐시 vs 버퍼
캐시와 버퍼 라는 용어는 상호 호환적으로 사용되는 경향이 있습니다.
하지만 그들은 다른것을 나타낸 다는 것을 알아두세요.
전통적으로, 버퍼는 빠르고 느린 독립체 사이의 데이터를 위한 임시 저장소로 사용됩니다.
한 당사자가 다른 당사자를 기다려야 하기 때문에 (성능에 영향을 끼치는),버퍼는 작은 단위로 움직이기 보다 전체 블록의 데이터를 한번에 움직이는 것을 허용함 으로써 이러한 것을 완화 합니다.
데이터는 버퍼로 부터 오직 한번만 읽어지고 써집니다.
게다가,버퍼들은 적어도 한 당사자가 볼 수 있습니다. 이것을 인식하고 있는.

반면에 캐시는 , 정의하자면 hidden 입니다., 그리고 어떠한 당사자도 캐시가 일어나고 있다는 것을 인식하지 못합니다.
이것은 또한 성능을 향상 시킵니다. 그러나 동일한 데이터를 빠른 방식으로 여러번 읽게 함으로써 성능을 향상 시킵니다.

그 핵심은, 캐시 추상화는 자바 메소드에 캐싱을 적용합니다, 그러므로 캐시 안에 사용가능한 정보에 기반한 수많은 실행을 줄입니다. 그것은 , 매번 타겟팅 된 메소드가 실행될 때 마다, 추상화는 메소드가 이미 실행되었는지 채크하는 캐싱 행동을 적용합니다.주어진 매개변수에 기반하여. 만약 이것이 이미 실행되었던 거 라면,실제 메소드의 실행이 필요없이 캐시된 결과를 리턴 합니다.
만약 메소드가 실행 되지 않았던 거라면, 실행 후에, 결과를 캐시하고 유저에게 리턴합니다.
이러한 방식으로, 비용이 비싼 메소드들 (cpu 나 IO )은 오직 한번 실행 될 수 있습니다. 주어진 매개변수에 대한, 그리고 결과는 메소드의 실행 없이 다시 재 사용 됩니다.
캐싱 로직은 인보커 에게 아무런 간섭 없이 투명하게 적용됩니다.

*중요*
이러한 접근은 오직 그들이 얼마나 많이 실행되었는지에 관계 없이 주어진 input에 대해 같은 output을 리턴하는 것을 보장하는 메소드 들에게 적용됩니다.

캐시 추상화는 다른 캐시 관련 동작을 제공합니다. 캐시의 내용을 업데이트 하거나 하나 또는 전체를 제거하는 능력 같은.
이것들은 유용합니다. 만약 캐시가 애플리케이션의 동작 동안에 바뀔수 있는 데이터를 다룬다면.

스프링 프레임워크의 다른 서비스들 처럼, 캐시 서비스는 추상화 되어있습니다(구현되어있지 않습니다.)그리고 캐시 데이터를 저장할 실제 저장소가 필요합니다.
그 추상은 org.springframework.cache.Cacheorg.springframework.cache.CacheManager 인터페이스 의해 구체화 되어 있습니다.

스프링은 저러한 추상들에 대한 약간의 구현들을 제공합니다.
JDK java.util.concurrent.ConcurrentMap 기반 캐시,Gemfire 캐시,Caffeine, 그리고 JSR-107을 따르는 캐시

*중요*
캐시 추상은 멀티 스레드나 멀티 프로세스 환경을 위한 특별한 조작이 없습니다.
이러한 기능들은 캐시 구현체에 의해 조작되기 때문 입니다.

만약 당신이 멀티 프로세스 환경에 있다면, 당신은 당신의 캐시 provider을 정확히 설정해야 할 필요가 있습니다.당신의 유스 케이스에 의존하여, 여러 노드에서 동일한 데이터의 복사본으로 충분할 수 있습니다.
하지만 만약 당신이 애플리케이션의 실행중에 데이터를 변경한다면 , 당신은 다른 전파 매커니즘을 사용하게 해야할 필요가 있을수도 있습니다.

특정 항목을 캐싱하는 것은 프로그래밍 캐시 상호 작용으로 발견되는 일반적인 get-if-not-found-then-proceed- and put-endly code block과 직접적으로 동등하다.

어떠한 락(lock)들도 적용되지 않고,여러 스레드가 동일한 항목을 동시에 로드하려고 시도할 수 있다.
eviction도 같습니다.만약 몇몇의 쓰레드들이 데이터를 동시에 업데이트 하거나 evict 하려고 시도 중일때, 당신은 신선하지 않은 데이터를 쓸수도 있습니다. 저러한 환경에서 명확한 캐시 제공자는 진보된 특징을 제공합니다.더 자세한 정보는 캐시 provider 문서를 보세요.

캐시 추상을 사용하기 위해서 , 당신은 두가지 측면을 처리해야할 필요가 있습니다.

  • Caching declaration : 캐시해야 하는 방법과 해당 정책을 식별합니다.
  • Cache configuration : 데이터가 저장되고 데이터를 읽는 백업 캐시입니다.

출처

'스프링' 카테고리의 다른 글

스프링에서 swagger를 사용해 봤다  (0) 2024.06.11