티스토리 뷰

반응형

Cache?

캐시란, 한 번 읽은 데이터를 일정 공간에 저장해 두었다가 같은 데이터를 또 다시 요청할 때 바로 보내주는 기술

 

위치에 따른 캐시 구분

 

1. 영역별 캐시 기술

웹 영역 Varnish, Nginx object Storage, Squid  웹 사이트 이미지 로딩, 시작 페이지 속도 개선 문제 등
데이터 영역 Memcached, Ehcache, Redis, Infinispan, Hazelcast 게시판의 첫 페이지, 랭킹 등 데이터 지속적 엑세스 영역
사용자 PC 영역 웹브라우저, off Heap(direct buffer)  

2. 유형에 따른 구분

로컬 캐시 Ehcache, OSCache, HashMap 별도의 서버 설치 없이 사용 가능
분산 캐시 Redis, Memcached, Infinispan, Hazelcast, Gemfire 별도의 장비에 서버 설치

데이터 양이 많지 않은 경우에는 분산 캐시에 비해서 로컬 캐시가 성능이 더 좋을 수 있음.

 

로컬 캐시 저장 구조

하나의 JVM 안에 하나의 캐시가 저장되는 형태로, 캐시 데이터가 별도의 메모리 공간을 사용하지 않고 JVM안에 함께 
저장되기 때문에 많은 데이터를 처리하게 되면 메모리가 기하급수적으로 증가한다.

JVM 내의 캐시 저장 구조

분산 캐시 구조

별도의 공간에 캐시가 저장되므로 로컬 메모리를 크게 잡을 필요가 없다. 

분산 캐시 저장 구조

Redis 도커 설치 및 의존성 추가  

https://055055.tistory.com/76

 

springboot redis 사용

백기선님의 스프링 부트 강좌 중 Redis 정리 및 내용 추가 키/밸류 스토어로 사용하는 예제 Redis? 캐시, 메시지 브로커, 키/밸류 스토어 등으로 사용 가능 Redis 설치 (docker 이용) docker redis 설치 docker r..

055055.tistory.com

 

캐시 적용 및 구현

스프링 context 모듈에는 캐시 관련 내용인 'org.springframework.cache' 패키지가 들어 있다. 그래서 별도의 모듈을 추가하지 않아도 스프링 패키지 내에서 제공하는 캐시를 사용할 수 있다. 

스프링부트에서는 아래와 같은 라이브러리들에 대해서 추상화된 API를 제공한다. 그렇기 때문에 @EnableCaching, @CacheEvict , @Cacheable 등의 어노테이션 등을 동일하게 적용할 수 있어서 나중에 캐시를 교체하게 되면 실제 캐시 저장 공간만 교체하면 된다.

 

 

1. @EnableCaching 어노테이션 추가

 

 Springboot Application Class에 @EnableCaching 어노테이션 추가한다. 해당 어노테이션이 CachingConfigurationSelector Class를 임포트하여 캐시를 사용할 수 있도록 해준다.

 

 

2. 사용 서비스에 캐시 적용 

 

Spring context에서 제공해주는 @Cacheable, @CacheEvict를 사용하여 구현

 

  캐시 저장 및 조회 

@Cacheable : value는 캐시 객체를 가리킬 이름, key는 해당 캐시 객체 안에서 식별할 수 있는 키 값이다.

                       해당하는 키 값의 캐시가 없다면, 리턴하는 값을 캐시에 등록한다.

                       반대로 해당하는 키 값이 있다면, 캐시 처리. 

 

redis-cli로 접속하여 확인해보면 캐싱된 내역을 확인할 수 있다.

 

  캐시 삭제

@CacheEvict : 해당하는 키 값의 캐시 삭제

 

이외에도 @CachePut으로 캐시를 생성할 수 있다. 주의해야 할 점은 @Cacheable과 @CachePut은 절대 하나의 메서드에 같이 선언하여 사용하면 안된다.(서로 다른 동작을 하기 때문이다.) @CachePut은 캐시를 생성하는 경우에만 사용한다. 

https://docs.spring.io/spring/docs/current/spring-framework-reference/integration.html#cache

어노테이션

 

이외에 좀 더 디테일한 설정들을 하려면 CacheManager를 오버라이드하여 기타 다른 설정들을 할 수 있다.

 

 

부끄럽지만 Ehcache 사용 예제

https://055055.tistory.com/15

 

EhCache 사용(Spring+Maven)

음.. 회사에서 관리자 페이지가 있는데, 5초마다 회원수를 조회하는 페이지 입니다. 많은 사람들이 접속하고, 동일한 쿼리를 계속 호출하기 때문에 DB Connection pool 문제와 여러 비효율적인 문제가 나타났습니..

055055.tistory.com

 

 

 

참고 : 

스프링 부트로 배우는 자바 웹 개발 -  윤석진 

 

https://docs.spring.io/spring-boot/docs/2.1.12.RELEASE/reference/html/boot-features-caching.html#boot-features-caching-provider

 

33. Caching

The cache abstraction does not provide an actual store and relies on abstraction materialized by the org.springframework.cache.Cache and org.springframework.cache.CacheManager interfaces. If you have not defined a bean of type CacheManager or a CacheResolv

docs.spring.io

 

https://docs.spring.io/spring/docs/current/spring-framework-reference/integration.html#cache

 

Integration

As a lightweight container, Spring is often considered an EJB replacement. We do believe that for many, if not most, applications and use cases, Spring, as a container, combined with its rich supporting functionality in the area of transactions, ORM and JD

docs.spring.io

https://yonguri.tistory.com/82

 

SpringBoot기반 Redis Cache 활용법

우리가 서비스를 개발할 때 백앤드 영역에서 Cache를 적극적으로 사용하게 되면 생각했던것 보다 더 드라마틱한 서비스 성능 개선을 가져올 수 있다(고 생각한다). 반대로 용도에 맞는 않는 정보나 서비스요청에..

yonguri.tistory.com

 

반응형

'jvm언어관련 > Spring(SpringBoot)' 카테고리의 다른 글

Feign(페인) 클라이언트 사용  (0) 2020.09.12
springboot redis (NoSQL) 사용  (0) 2019.12.25
restdocs XPath사용  (0) 2019.12.09
IoC Container /BeanFactory /ApplicationContext  (0) 2019.09.14
HttpMessageConverters  (0) 2019.07.14
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함