Caching
기본 개념
- 캐시(Cache): 임시로 데이터를 저장하는 저장소로, 메모리, 하드디스크, 브라우저 등의 다양한 위치에 저장될 수 있다
- 캐시 히트(Cache Hit): 요청한 데이터가 캐시에 존재하여, 캐시에서 바로 데이터를 가져오는 경우를 말한다.
- 캐시 미스(Cache Miss): 요청한 데이터가 캐시에 존재하지 않아 원본 데이터 소스로부터 가져와야 하는 경우이다.
- TTL(Time to Live): 캐시 데이터의 유효 기간을 설정하여 일정 시간이 지나면 캐시를 무효화하고 새로운 데이터를 불러오도록 한다.
캐싱의 작동 원리
캐싱은 기본적으로 “한번 계산한 결과는 일정 시간 동안 재사용한다”는 원칙을 따른다. 예를 들어, 사용자가 서버에 데이터 요청을 할 때마다 응답을 계산하고 제공하는 대신, 첫 요청에 대한 결과를 캐시에 저장한다. 이후 동일한 요청이 발생하면 원본 데이터를 다시 계산하지 않고 캐시된 데이터를 반환하는 방식이다.
캐시가 사용되는 위치와 종류
캐싱은 시스템 전반에 걸쳐 여러 위치에서 사용될 수 있으며, 각 위치에서 역할이 다르다.
- 브라우저 캐시: 사용자의 웹 브라우저에 저장되는 캐시이다. 웹페이지에서 사용하는 이미지, CSS, JavaScript 파일 등을 캐시에 저장하여 동일한 페이지나 리소스를 다시 불러올 때 더 빠르게 로드할 수 있다.
- 프록시 캐시: 프록시 서버에 저장된 캐시로, 기업 네트워크나 ISP(인터넷 서비스 제공자)에서 사용자에게 더 빠른 응답을 제공하기 위해 사용된다. 공용 네트워크나 대규모 네트워크 환경에서 캐싱하면 서버로 가는 트래픽을 줄여준다.
- 서버 캐시: 애플리케이션 서버나 웹 서버에 저장되는 캐시로, 주로 자주 조회되는 데이터베이스 쿼리 결과나 API 응답을 캐싱하여 애플리케이션 성능을 높인다. Redis, Memcached 같은 인메모리 데이터베이스가 주로 사용된다.
- 데이터베이스 캐시: 데이터베이스 자체에서 자주 사용되는 쿼리 결과를 메모리에 저장하여 성능을 향상한다. 데이터베이스 내장 캐시 기능이 이를 수행하거나, Redis 같은 외부 캐시를 사용하여 쿼리 결과를 캐싱할 수도 있다.
캐싱의 장단점
- 장점:
- 성능 향상: 캐싱을 통해 데이터 요청 속도를 크게 줄일 수 있다.
- 부하 감소: 동일한 요청을 반복적으로 처리할 필요가 없어 서버 부담이 줄어든다.
- 네트워크 효율성: 캐시된 데이터는 재전송되지 않아 네트워크 사용량도 줄어든다.
- 단점:
- 데이터 일관성 문제: 캐시에 저장된 데이터가 원본과 달라질 수 있다. 예를 들어 TTL이 지나기 전까지 변경된 데이터가 반영되지 않을 수 있다.
- 메모리 사용량 증가: 캐시는 주로 메모리를 사용하여 저장하므로, 캐시 데이터가 많아지면 메모리 자원이 부족해질 수 있다.
- 복잡성 증가: 캐시 무효화 전략과 데이터 일관성 유지를 위한 정책 설정이 필요하므로 관리가 복잡해질 수 있다.
캐시 무효화(Cache Invalidation)
캐시된 데이터가 변경되거나 오래되었을 때, 해당 데이터를 캐시에서 제거하거나 갱신하는 작업이 필요합니다. 이를 캐시 무효화(Cache Invalidation)라 하며, 이는 캐싱에서 가장 어려운 부분 중 하나로 꼽힙니다. 캐시 무효화를 제대로 관리하지 않으면 오래된 데이터를 참조하게 될 위험이 있습니다.
세션이나 쿠키도 캐싱과 같은 개념인가?
아니다.
쿠키(Cookie)와 세션(Session)은 캐시와 비슷한 개념으로 생각될 수 있지만, 엄밀히 말하면 캐싱과는 다른 목적과 방식을 가지고 있다. 캐시는 데이터의 빠른 접근을 위해 임시 저장을 목적으로 사용되지만, 쿠키와 세션은 주로 사용자 상태를 관리하는 데 사용된다.
쿠키, 세션/캐시와의 차이점
- 목적의 차이:
- 캐시는 데이터 접근 속도를 높이기 위한 용도로, 주로 데이터나 파일 등을 임시 저장하여 성능 향상을 목적으로 사용된다.
- 쿠키와 세션은 웹에서 사용자 식별과 상태 유지가 주된 목적이다.
- 저장 위치와 방식:
- 캐시는 클라이언트, 서버, 프록시 등 여러 위치에 존재할 수 있으며, 주로 데이터의 요청 시간을 줄이기 위해 사용된다
- 쿠키는 클라이언트 측(브라우저)에 저장되며, 각 요청마다 자동으로 서버에 전달된다
- 세션은 서버 측에 저장되며, 서버에서만 관리된다
- 유효 기간:
- 캐시는 설정된 유효 기간(TTL) 동안 데이터가 유지되고, 설정된 시간이 지나면 새로 갱신되거나 무효화된다.
- 쿠키는 유효 기간을 설정할 수 있으며, 유효 기간이 지나면 자동으로 삭제된다.
- 세션은 주로 브라우저를 닫거나 일정 시간이 지나면 만료되며, 서버에서 세션을 삭제한다.
요약
- 캐싱 사용 예시 (자주 조회되는 제품 정보): 자주 조회되지만 자주 변경되지 않는 데이터를 캐싱하여 데이터베이스 부하를 줄이고 응답 속도를 높인다.
- 캐싱 미사용 예시 (실시간 주문 처리): 주문과 같이 실시간으로 데이터 변경이 필요한 경우, 캐싱을 사용하지 않고 데이터베이스와 직접 상호작용하여 최신 데이터를 유지한다.
이처럼 캐싱은 자주 변경되지 않는 데이터를 빠르게 제공할 때 유리하고, 실시간으로 변화가 빈번한 데이터에는 오히려 불리할 수 있다. 적절한 상황에 따라 캐시 사용 여부를 결정하는 것이 중요하다.
Leave a comment