캐시
애플리케이션 처리 속도를 높이기 위해 가까운 곳에 데이터나 값을 미리 복사해두는 임시 장소.
과거에 계산한 데이터를 효율적으로 재사용할 수 있어 응답 시간을 줄이고 시스템 부하를 감소시킴.
캐시는 어떨때 사용하나?
- 반복적이고 동일한 결과가 나오는 기능의 반환값
- 업데이트가 자주 발생하지 않는 데이터
- 자주 조회되는 데이터
- 입력값과 출력값이 일정한 데이터
⇒ 캐시는 일반적으로 데이터 소스보다 액세스 속도가 빠르다.
캐싱
특정 데이터를 캐시라는 임시 저장소에 저장하여, 애플리케이션이 빠르게 접근할 수 있도록 하는 기술.
- 장점
- 성능 향상: 응답시간 단축
- 부하 감소: 서버에 대한 요청을 줄임
- 비용 절감: 데이터 요청 수를 줄임
- 단점: 캐시 일관성 문제, 메모리 사용 증가, 복잡성 증가
캐싱 전략
- 인메모리 캐싱: 데이터를 메모리에 저장하여 빠르게 접근 (Redis, Memcached)
- 디스크 캐싱: 데이터를 디스크에 저장하여 메모리보다 더 많은 데이터를 캐시할 수 있지만, 접근 속도는 메모리보다 느림.
- 분산 캐싱: 여러 서버에 분산하여 캐시를 저장하는 방식, 대규모 시스템에서 캐시의 확장성과 가용성을 높일 수 있음.
- 레이지 로딩(Lazy Loading): 요청이 있을 때 데이터를 캐시에 로드하는 방식, 초기 로드 시간 절약.
- 사전 로딩(Eager Loading): 데이터가 요청되기 전에 미리 캐시에 로드하는 방식, 요청 시 빠르게 데이터를 반환함.
- TTL(Time to Live): 캐시된 데이터의 유효 기간을 설정하여 일정 시간이 지나면 자동으로 캐시에서 삭제되게 하는 방식.
백엔드에서 사용할 수 있는 도구
- Redis: 데이터베이스, 캐시 및 메시지 브로커로 사용할 수 있는 메모리 내 데이터 구조 저장소. 높은 성능과 많은 양의 데이터를 처리할 수 있는 능력으로 캐싱 도구로 자주 사용됨
- Amazon ElastiCache: 아마존에서 제공하는 서비스로, 클라우드에서 인 메모리 데이터 스토어 또는 캐시를 손쉽게 구축, 운영 및 확장할 수 있도록 지원하는 웹 서비스. 빠른 관리형 인 메모리 데이터 스토어에서 정보를 검색할 수 있도록 지원하여 웹 애플리케이션의 성능을 높임
- Memcached: 범용 분산 메모리 캐싱 시스템. 무료. 외부 데이터 소스를 읽어야 하는 횟수를 줄이기 위해 데이터와 개체를 RAM에 캐싱하여 동적 웹 응용 프로그램 속도를 높이는데 자주 사용됨
- Varnish: 웹 페이지 및 기타 HTTP 요청을 캐시하는 HTTP 가속기
- Squid: 웹 페이지, DNS 조회 및 기타 네트워크 리소스를 캐싱하는 데 사용할 수 있는 캐싱 프록시 서버로, 메모리에서 캐시된 콘텐츠를 제공하여 웹 애플리케이션 속도를 높이고 대역폭 사용량을 줄이는 데 자주 사용됨
- Nginx: 고성능 웹 서버 및 리버스 프록시. 웹 페이지 및 기타 리소스를 메모리에 캐시하도록 구성하여 웹 애플리케이션 속도를 높이고 서버 부하를 줄일 수 있음
🕵️ 프록시 서버?
클라이언트와 서버 사이에서 데이터를 전달해주는 서버로
클라이언트가 자신을 통해 다른 네트워크 서비스에 간접적으로 접속할 수 있게 해 주는 컴퓨터 시스템이나 응용 프로그램을 말함
spring boot 에서 수행할 수 있는 캐싱 방법
Spring Cache Abstraction
어노테이션을 메소드에 적용해 AOP를 통해 캐싱 로직을 제공
@Cacheable: Triggers cache population.
@CacheEvict: Triggers cache eviction.
@CachePut: Updates the cache without interfering with the method execution.
@Caching: Regroups multiple cache operations to be applied on a method.
@CacheConfig: Shares some common cache-related settings at class-level.
https://velog.io/@jjmoon4682/캐싱-feat.-Redis
https://docs.spring.io/spring-framework/reference/integration/cache.html
https://ykh6242.tistory.com/entry/Spring-Cache-Abstraction-%EC%A0%95%EB%A6%AC#google_vignette