Search
Duplicate
📒

[Database Study] xx. 캐시란 무엇인가?

상태
완료
수업
Database Study
주제
Redis
4 more properties
참고

Cache과 Caching Strategy

NOTE
캐시란, 나중에 요청될 결과를 미리 저장해두었다가 빠르게 서비스를 해주는 것을 의미한다!
캐시RAM을 사용하기 때문에 데이터베이스보다 훨씬 빠르게 데이터를 응답해줄 수 있다.
하지만 RAM은 용량이 크지않기 떄문에, 데이터를 모두 저장할수 없으므로 ‘지침 전략’을 숙지할 필요가 있다.
어느 종류의 데이터를 캐시에 저장하는가?
얼마만큼의 데이터를 캐시에 저장하는가?
얼마동안 캐시를 저장하는가?

캐시 요청

cache hit : 캐시 스토어(redis)에 데이터가 있을 경우 바로 가져옴(빠름)
cache miss : 캐시 스토어(redis)에 없는 경우 어쩔수 없이 DB에서 가져옴(느림)

캐시 목적

서버간 불필요한 트래픽을 줄일 수 있다.
그로 인해 웹어플리케이션 서버의 부하 감소시킨다.
어플리케이션의 빠른 처리성능(조회)을 확보해서 궁극적으로 어플리케이션를 사용하는 고객에게 쾌적한 서비스경험을 제공하는 것이다.

Cache의 대상이 되는 정보들

1.
단순한, 또는 단순한 구조의 정보를 -> 정보의 단순성
2.
반복적으로 동일하게 제공해야 하거나 -> 빈번한 동일요청의 반복
3.
정보의 변경주기가 빈번하지 않고, 단위처리 시간이 오래걸리는 정보이고 -> 높은 단위처리비용
4.
정보의 최신화가 반드시 실시간으로 이뤄지지 않아도 서비스 품질에 영향을 거의 주지 않는 정보

캐시 목적

NOTE
서버간 불필요한 트래픽을 줄일 수 있다.
그로 인해 웹어플리케이션 서버의 부하 감소시킨다.
어플리케이션의 빠른 처리성능(조회)을 확보해서 궁극적으로 어플리케이션를 사용하는 고객에게 쾌적한 서비스경험을 제공하는 것이다.

Cache의 대상이 되는 정보들

NOTE
1.
단순한, 또는 단순한 구조의 정보를 -> 정보의 단순성
2.
반복적으로 동일하게 제공해야 하거나 -> 빈번한 동일요청의 반복
3.
정보의 변경주기가 빈번하지 않고, 단위처리 시간이 오래걸리는 정보 -> 높은 단위처리비용
4.
정보의 최신화가 반드시 실시간으로 이뤄지지 않아도 서비스 품질에 영향을 거의 주지 않는 정보

어떤 정보들을 Cache로 사용하나?

NOTE
포탈의 검색어
쇼핑몰의 핫딜상품, 베스트셀러, 추천상품등
상품의 카테고리와 카테고리별 등록상품 수
방문자수, 조회수, 추천수
1회성 인증정보 (SMS 본인인증정보, IP정보등)
공지사항, Q&A

캐싱 전략

NOTE
캐시를 사용하게되면, 데이터베이스와 정보가 불일치 하는 현상이 발생하는데 이를 방지하기 위한 전략이 캐싱 전략이다!
이러한 문제를 데이터 정합성이라 한다.
ex) 캐시에는 10개로 저장되어 있는데, 데이터베이스에는 7개로 저장되어 있는 경우
DB간의 데이터 불일치, 성능을 잃지않기 위한 전략은 크게 2가지로 나뉜다.
캐시 읽기 전략(Read Cache Strategy)
캐시 쓰기 전략(Write Cache Strategy)

캐시 읽기 전략 - Look Aside 패턴

NOTE
데이터를 찾을 때 우선 캐시에 저장된 데이터를 우선적으로 확인하고, 없으면 DB조회

장점

반복적인 읽기가 많은 호출에 적합하다
캐시와 DB가 분리되어 가용되기 때문에 원하는 데이터만 별도로 구성하여 캐시에 저장
캐시와 DB가 분리되어 가용되므로, redis가 다운 되더라도 DB에서 데이터 가져올 수 있다.

단점

캐시에 connection이 많았다면, redis가 다운되면 DB로 몰려서 부하가 생긴다.

캐시 읽기 전략 - Read Through 패턴

NOTE
캐시에서만 데이터를 읽어오는 전략 (inline cache)
Look Aside와 비슷하지만 데이터 동기화 라이브러리 또는 캐시 제공자에게 위임하는 방식이라는 차이가 있다.

장점

캐시와 DB간의 데이터 동기화가 항상 이루어져 데이터 정합성 문제에서 벗어남.
읽기가 많은 워크로드에 적합

단점

데이터를 조회하는데 있어 속도가 느리다.
데이터 조회를 전적으로 캐시에만 의존하므로, redis가 다운되면 서비스 이용에 차질이 생김.
구성요소를 Replication 또는 Cluster로 구성하여 가용성을 높여야 한다.

캐시 쓰기 전략 - Write Back 패턴

NOTE
데이터를 저장할때 DB가 아닌 먼저 캐시에 저장하여 모아놓았다가, 특정 시점마다 DB로 쓰는 방식으로 캐시가 일종의 Queue 역할을 겸하게된다.

장점

캐시와 DB 동기화를 비동기하기 때문에 동기화 과정이 생략
캐시에 모아놨다가 DB에 쓰기 떄문에 쓰기 쿼리 회수 비용과 부하를 줄일 수 있다.
Write가 빈번하면서 Read를 하는데 많은 양의 Resource가 소모되는 서비스에 적합.
데이터 적합성 확보

단점

자주 사용되지 않는 불필요한 리소스 저장
캐시에 오류가 발생하면 데이터 영구 소실.

캐시 쓰기 전략 - Write Throug 패턴

NOTE
데이터베이스와 캐시에 동시에 데이터를 저장하는 전략

장점

DB와 캐시가 항상 동기화 되어있어, 캐시의 데이터는 항상 최신상태 유지
데이터 유실이 발생하면 안 되는 상황에 적합.

단점

자주 사용되지 않는 불필요한 리소스 저장.
매 요청마다 두번의 Write가 발생하게 됨으로써 빈번한 생성, 수정이 발생하는 서비스에는 성능 이슈가 발생한다.

캐시 쓰기 전략 - Write Around 패턴

NOTE
cache miss가 발생하는 경우에만, DB와 캐시에 데이터를 저장한다.

장점

Write Through보다 훨씬 빠름
모든 데이터는 DB에 저장 (캐시를 갱신하지 않음)

단점

캐시와 DB 내의 데이터가 다를 수 있다.

캐시 읽기 + 쓰기 전략조합

Look Aside + Write Around 조합

NOTE
파랑 - 읽기, 빨강 - 쓰기
가장 일반적으로 자주 쓰이는 조합.

Read Through + Write Around 조합

NOTE
파랑 - 읽기, 빨강 - 쓰기
항상 DB에 쓰고, 캐시에서 읽을 때 DB에서 먼저 읽어오므로, 정합성 이슈에 대한 완벽한 안전장치를 구성할 수 있다.

Read Through + Write Through 조합

NOTE
파랑 - 읽기, 빨강 - 쓰기
데이터를 쓸 때, 항상 캐시에 먼저 쓰므로 읽어올 때 최신 캐시 데이터 보장
데이터를 쓸 때, 항상 캐시에서 DB로 보내므로 데이터 정합성 보장