기타

캐시란 무엇일까?

열심히 해 2024. 12. 23. 11:22

캐시란 무엇일까?

https://mediahub.seoul.go.kr/archives/2010341

 

https://www.yes24.com/Product/Goods/125202302

 

너는 학교 도서관에서 자주 쓰는 참고서를 종종 빌려와야 해.
그런데 매번 도서관까지 걸어가서 책을 빌리고 돌아오려니 너무 귀찮고 시간이 걸려....
그래서 그 책을 그냥 네 책상 서랍에 넣어두면 어때?

이제는 참고서가 필요할 때마다 바로 책상 서랍에서 꺼내 볼 수 있으니 시간을 훨씬 절약할 수 있어!
이 서랍에 책을 두는 방법이 바로 캐싱이야.

 


캐시란 데이터를 빠르게 사용할 수 있도록 미리 저장해 두는 임시 저장소를 뜻합니다. (이제 캐시라는 말에 '자주', '일시적', '고속', '데이터 저장소'를 떠올립시다.) 캐싱이란 캐시를 사용하는 것입니다. 캐시의 주목적은 데이터 검색 성능을 향상시키는 것입니다. 메모리 계층 구조에서 가장 빠른 레벨에 위치한 저장소라고 할 수 있습니다.

 

 

캐시는 일반적으로 일시적인 특징이 있는 데이터 하위 집합을 저장하는 고속 데이터 스토리지 계층입니다. 따라서 이후에 해당 데이터에 대한 요청이 있을 경우 데이터의 기본 스토리지 위치에 액세스할 때보다 더 빠르게 요청을 처리할 수 있습니다. 캐싱을 사용하면 이전에 검색하거나 계산한 데이터를 효율적으로 재사용할 수 있습니다.

(https://aws.amazon.com/ko/caching/)

 

 


 

 

캐시의 주요 개념과 구성 요소

1. 작동 원리: Locality of Reference

캐시는 프로그램의 실행 패턴을 활용하여 설계됩니다.

  • 시간 지역성(Temporal Locality): 최근에 접근한 데이터는 다시 접근될 가능성이 높음.
  • 공간 지역성(Spatial Locality): 데이터가 특정 위치에 저장되어 있다면, 그 주변 데이터도 접근될 가능성이 높음.

 

2. 캐시 계층(Cache Hierarchy)

캐시는 계층적 구조로 이루어져 있으며 각 계층은 속도와 크기, 비용에서 차이가 있습니다.

  • CPU 캐시: L1, L2, L3 (속도가 빠르고 용량이 작음).
  • 메모리 캐시: RAM이나 디스크 I/O를 줄이기 위한 캐시.
  • 웹 브라우저 캐시: 네트워크 요청을 줄이기 위해 브라우저가 데이터를 저장.
  • 애플리케이션 캐시: 데이터베이스 조회를 줄이기 위한 캐시 시스템(e.g., Redis).

 

3. 캐시 데이터 구조

캐시는 데이터를 저장할 때, 특정 규칙에 따라 키와 값을 저장합니다.

  • Key-Value Store: 데이터를 찾기 쉽게 키와 값의 쌍으로 저장.
    예: {"user_123": {"name": "Alice", "age": 25}}
  • 해시 테이블(Hash Table): 빠른 검색을 위한 자료 구조.

 

4. 캐시 정책(Cache Policies)

캐시에는 데이터를 저장하거나 교체할 때 사용하는 여러 정책이 있습니다.

  • 캐시 미스(Cache Miss): 요청된 데이터가 캐시에 없을 경우 발생.
  • 캐시 적중(Cache Hit): 요청된 데이터가 캐시에 있을 경우 발생.
  • 교체 정책(Cache Eviction Policy): 캐시가 가득 찼을 때 어떤 데이터를 제거할지 결정.
    • LRU(Least Recently Used): 가장 오래 사용되지 않은 데이터를 제거.
    • FIFO(First In First Out): 가장 먼저 들어온 데이터를 제거.
    • LFU(Least Frequently Used): 가장 적게 사용된 데이터를 제거.

 

 


 

 

캐시를 활용한 시스템 설계

1. 애플리케이션 캐시

데이터베이스와의 I/O를 줄이는 목적으로 사용됩니다.

  • 예: 자주 조회되는 상품 목록을 캐시에 저장하여 데이터베이스 조회를 최소화.

2. 분산 캐시

대규모 시스템에서 여러 노드가 데이터를 공유해야 할 때 사용됩니다.

  • 예: Redis, Memcached 같은 분산 캐시 시스템은 여러 서버에 걸쳐 데이터를 저장하고 빠르게 검색할 수 있도록 지원합니다.

3. 웹 캐시

웹 응답을 저장하여 동일한 요청에 대해 빠르게 응답합니다.

  • CDN(Content Delivery Network): 정적 리소스(이미지, JS 파일 등)를 사용자와 가까운 서버에 캐싱하여 빠르게 제공.

 

 


 

 

 

 

캐시를 활용한 시스템 설계

1. 애플리케이션 캐시

데이터베이스와의 I/O를 줄이는 목적으로 사용됩니다.

  • 예: 자주 조회되는 상품 목록을 캐시에 저장하여 데이터베이스 조회를 최소화.

2. 분산 캐시

대규모 시스템에서 여러 노드가 데이터를 공유해야 할 때 사용됩니다.

  • 예: Redis, Memcached 같은 분산 캐시 시스템은 여러 서버에 걸쳐 데이터를 저장하고 빠르게 검색할 수 있도록 지원합니다.

3. 웹 캐시

웹 응답을 저장하여 동일한 요청에 대해 빠르게 응답합니다.

  • CDN(Content Delivery Network): 정적 리소스(이미지, JS 파일 등)를 사용자와 가까운 서버에 캐싱하여 빠르게 제공.

 


 

캐시의 장점과 단점

장점

  1. 성능 향상: 자주 사용하는 데이터를 빠르게 접근하여 처리 속도를 높임.
  2. 부하 감소: 데이터베이스나 네트워크 요청을 줄여 리소스 사용량을 줄임.

단점

  1. 데이터 일관성 문제: 캐시에 저장된 데이터가 오래된 경우 Stale Data 문제가 발생.
  2. 메모리 사용량: 캐시 데이터가 많아질수록 메모리를 더 많이 소비.
  3. 복잡성 증가: 적절한 캐시 정책과 만료 조건을 설정하지 않으면 시스템의 복잡도가 증가.

 


 

캐시를 구현할 때 고려해야 할 사항

  1. TTL(Time-To-Live)
    • 캐시에 저장된 데이터의 만료 시간을 설정하여 오래된 데이터를 제거.
    • 예: 로그인 세션 정보를 30분 동안 유지.
  2. 적중률(Cache Hit Ratio)
    • 캐시 요청 중 몇 %가 적중했는지를 나타냅니다.
    • 높은 적중률을 유지하기 위해 자주 사용되는 데이터를 캐싱하도록 설계.
  3. Consistency(일관성)
    • 캐시에 저장된 데이터와 원본 데이터(DB 등)의 불일치를 최소화해야 함.
    • 해결 방법: 캐시 무효화(Cache Invalidation) 또는 Write-Through 전략.

 


 

캐시의 실제 활용 예시

1. 검색 엔진

검색 결과를 캐싱하여 동일한 쿼리 요청에 대해 빠르게 응답.

2. 전자상거래 사이트

인기 상품 목록, 사용자 장바구니 데이터를 캐싱하여 웹페이지 로딩 속도 향상.

3. 소셜 미디어 플랫폼

사용자의 타임라인 데이터를 캐싱하여 빠르게 보여줌.