1449 단어
7 분
캐싱
캐싱(Caching)
TIP캐싱이란? 캐싱(Cache)이란 자주 사용하는 데이터를 빠르게 접근할 수 있도록 저장하는 임시 저장소를 의미
예를 들어, 웹사이트를 방문할 때 자주 보는 이미지를 브라우저가 저장해 두었다가 재방문 시 빠르게 보여주는 것과 같은 원리
- 원본 데이터 소스(데이터베이스, 네트워크 요청 등)의 부하를 줄이고 성능을 최적화하는 역할을 함
- 캐싱은 데이터를 미리 저장해 두고 반복적인 작업을 줄여 속도를 높이는 기술!
캐싱이 필요한 이유
- 속도 향상: 데이터베이스, 원격 서버 등으로부터 가져오는 데이터를 미리 저장하여 빠르게 응답
- 부하 감소: 동일한 요청에 대해 반복적으로 연산을 수행하지 않도록 함
- 비용 절감: 네트워크 트래픽 감소, 연산 비용 절약
- 사용자 경험 향상: 웹사이트 로딩 속도를 단축하여 사용자 만족도 증가
예시
- 유튜브 동영상이 처음 재생될 때는 로딩 시간이 걸리지만, 한 번 본 영상은 다시 로드하지 않고 빠르게 실행됨 (브라우저 캐싱)
캐싱의 기본 원리
주요 개념
- Cache Hit (캐시 적중): 요청한 데이터가 캐시에 존재하여 빠르게 반환되는 경우
- Cache Miss (캐시 미스): 요청한 데이터가 캐시에 없어 원본 소스에서 가져와야 하는 경우 → 속도가 느려짐
- Cache Eviction (캐시 제거): 캐시 공간이 부족할 때 덜 중요한 데이터를 삭제하는 과정
- Cache Invalidation (캐시 무효화): 데이터 변경이 발생했을 때 캐시를 비우고 최신 데이터로 갱신
캐싱의 종류
하드웨어 기반 캐싱
- CPU 캐시: CPU 내부에 L1, L2, L3 캐시를 두어 연산 속도를 높임
- 디스크 캐시: HDD, SSD에서 자주 사용하는 데이터를 미리 저장하여 속도 향상
소프트웨어 기반 캐싱
- 웹 캐시: CDN(Content Delivery Network), 브라우저 캐시, HTTP 캐싱을 통해 인터넷 속도 향상
- 데이터베이스 캐시: MySQL Query Cache, Redis, Memcached 등의 도구를 활용하여 DB 부하 감소
- 애플리케이션 캐시: 서버 사이드 캐싱, API 응답 캐싱을 통해 서버 성능 최적화
캐싱 전략
캐시 관리 정책
- LRU(Least Recently Used): 가장 오랫동안 사용되지 않은 데이터를 제거 (예: 최근 열어본 문서 먼저 보이도록 정리)
- LFU(Least Frequently Used): 가장 적게 사용된 데이터를 제거 (예: 자주 보는 파일을 저장하고 사용하지 않는 것은 삭제)
- FIFO(First-In First-Out): 먼저 들어온 데이터를 먼저 제거 (예: 마트의 재고 정리 방식과 유사)
- TTL(Time-To-Live): 특정 시간이 지나면 캐시 데이터를 자동으로 삭제 (예: 로그인 유지 시간이 만료되면 자동 로그아웃)
캐싱 업데이트 방식
- Write-Through: 데이터를 캐시에 저장하면서 원본 데이터에도 즉시 반영 (안전하지만 속도가 느림)
- Write-Back: 변경 사항을 캐시에 먼저 반영하고 이후 원본 데이터에 저장 (속도는 빠르지만 데이터 손실 가능성 있음)
- Write-Around: 원본 데이터에만 저장하고 필요한 경우 캐시에 로드 (자주 변경되지 않는 데이터에 유용)
캐시 계층화(Cache Layering)
여러 단계의 캐싱을 활용하여 최적의 성능 제공
- L1 캐시: 애플리케이션 내부 캐시 (메모리 기반)
- L2 캐시: Redis, Memcached 같은 네트워크 기반 캐시
- L3 캐시: 데이터베이스 쿼리 캐싱
Redis(레디스)와 캐싱
TIPRedis란? 오픈 소스 기반의 메모리 데이터 저장소로 빠른 데이터 접근을 지원하는 NoSQL 캐시 데이터베이스 Key-Value 구조를 기반으로 작동하며, 다양한 데이터 구조(Hash, List, Set, Sorted Set 등) 지원 영속성(Persistence) 지원: 데이터를 디스크에 저장하여 시스템 재시작 후에도 유지 가능
Redis의 주요 특징
- 초고속 데이터 처리: 메모리 기반이므로 읽기/쓰기 속도가 매우 빠름
- 다양한 데이터 구조 지원: 단순한 문자열 외에도 리스트, 해시, 집합, 정렬된 집합 등 지원
- TTL(Time-To-Live) 기능: 설정한 시간이 지나면 자동으로 캐시 데이터 삭제
- 분산 처리 가능: 클러스터링을 통해 여러 서버에서 데이터 분산 저장 가능
Redis 활용 예제
- 세션 관리: 로그인 사용자 세션을 Redis에 저장하여 빠르게 인증
- 실시간 데이터 처리: 실시간 순위, 대기열, 메시지 큐 등에서 활용
- 데이터베이스 캐싱: 자주 조회하는 데이터를 캐싱하여 DB 부하 감소
캐싱 실패와 해결 방법
캐시 스탬피드(Cache Stampede): 여러 요청이 동시에 원본 데이터를 가져오려고 할 때 발생
- 해결 방법: Lazy Loading, Request Collapsing, Prewarming Cache
Cold Cache Problem: 새로운 서버가 가동될 때 캐시가 비어 있어 부하가 증가하는 문제
- 해결 방법: 미리 캐싱된 데이터 로드, Warm-up 캐싱 사용
NOTE캐싱은 데이터를 미리 저장해 빠르게 제공하는 기술이다. Redis는 빠르고 확장 가능한 캐싱 솔루션으로 활용 가능하다. 적절한 캐싱 전략을 통해 성능을 최적화해야 한다.