티스토리 뷰
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 도커 설치 및 의존성 추가
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은 캐시를 생성하는 경우에만 사용한다.
어노테이션
이외에 좀 더 디테일한 설정들을 하려면 CacheManager를 오버라이드하여 기타 다른 설정들을 할 수 있다.
부끄럽지만 Ehcache 사용 예제
EhCache 사용(Spring+Maven)
음.. 회사에서 관리자 페이지가 있는데, 5초마다 회원수를 조회하는 페이지 입니다. 많은 사람들이 접속하고, 동일한 쿼리를 계속 호출하기 때문에 DB Connection pool 문제와 여러 비효율적인 문제가 나타났습니..
055055.tistory.com
참고 :
스프링 부트로 배우는 자바 웹 개발 - 윤석진
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
- springboot https
- 다중 업데이트
- MSSQL
- spring-boot-starter-data-redis
- 슬랙
- visual studio code
- 슬랙봇
- 뱅크샐러드 유전자
- update set multi
- multiple row update
- 뱅셀 유전자
- update query multi row
- effectivejava
- vue.js
- update query set multiple
- 이것이 자바다
- 업데이트 쿼리
- gradle
- update set multiple
- 뱅크샐러드
- SpringBoot
- java
- Slack
- 그레이들
- 싱글턴
- 슬랙 /
- update query mutiple row
- 이펙티브자바
- 몽고DB 완벽가이드
- update query
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |