티스토리 뷰
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안에 함께
저장되기 때문에 많은 데이터를 처리하게 되면 메모리가 기하급수적으로 증가한다.
분산 캐시 구조
별도의 공간에 캐시가 저장되므로 로컬 메모리를 크게 잡을 필요가 없다.
Redis 도커 설치 및 의존성 추가
캐시 적용 및 구현
스프링 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은 캐시를 생성하는 경우에만 사용한다.
어노테이션
이외에 좀 더 디테일한 설정들을 하려면 CacheManager를 오버라이드하여 기타 다른 설정들을 할 수 있다.
부끄럽지만 Ehcache 사용 예제
참고 :
스프링 부트로 배우는 자바 웹 개발 - 윤석진
https://docs.spring.io/spring/docs/current/spring-framework-reference/integration.html#cache
https://yonguri.tistory.com/82
'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
- 슬랙 /
- update set multi
- gradle
- SpringBoot
- update set multiple
- 몽고DB 완벽가이드
- spring-boot-starter-data-redis
- 뱅크샐러드 유전자
- 다중 업데이트
- update query multi row
- MSSQL
- multiple row update
- Slack
- vue.js
- update query set multiple
- 뱅크샐러드
- 업데이트 쿼리
- 싱글턴
- springboot https
- update query
- effectivejava
- 뱅셀 유전자
- 이것이 자바다
- java
- 슬랙
- visual studio code
- 그레이들
- 슬랙봇
- update query mutiple row
- 이펙티브자바
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |