위키득계정 ↗
기술

캐시

캐시기술
영문명
Cache
주요 목적
반복 접근과 재계산 비용 감소
적중
필요한 데이터를 캐시에서 찾음
미스
캐시에 없어 원본 조회 등이 필요함
주요 과제
무효화, 용량, 일관성
캐시는 자주 필요한 데이터나 계산 결과를 재사용하여 접근 비용을 줄이는 저장 계층이다. 성능뿐 아니라 오래된 데이터의 처리, 용량 관리, 접근 권한도 함께 설계해야 한다.

어떤 비용을 줄이는가

CPU 가까이에 있는 캐시는 메모리 접근 대기를 줄이고, 웹 서비스의 캐시는 같은 응답을 반복 생성하는 비용을 줄일 수 있다. 구현 위치는 다르지만 값비싼 작업의 결과를 더 저렴하게 다시 이용한다는 공통점이 있다.

모든 데이터를 미리 저장한다고 이득이 생기는 것은 아니다. 재사용되지 않는 데이터는 공간과 갱신 비용만 소비할 수 있다. 접근 패턴과 원본 조회 비용을 함께 측정해야 캐시의 효과를 판단할 수 있다.

적중률만으로 판단할 수 없는 성능

적중률은 요청 중 캐시에서 처리한 비율이다. 그러나 적중률이 같아도 원본 조회의 지연과 저장되는 값의 크기가 다르면 응답 시간과 비용은 달라진다. 캐시 조회 자체에도 시간이 든다.

어떤 요청이 미스가 되는지도 중요하다. 자주 쓰는 작은 값이 적중해도 드문 대형 요청이 병목이라면 전체 처리 시간은 크게 개선되지 않을 수 있다. 평균뿐 아니라 느린 응답의 분포도 살펴야 한다.

원본이 바뀌었을 때

캐시에 값이 남아 있는 동안 원본이 바뀌면 오래된 정보가 제공될 수 있다. 만료 시간을 정하거나 변경 시 관련 항목을 무효화하는 방법을 사용한다. 허용할 수 있는 지연은 데이터의 성격에 따라 다르다.

여러 서버가 각자 값을 보관하는 경우 갱신 시점이 다를 수 있다. 어떤 데이터가 기준이며 언제까지 일치해야 하는지 정하지 않으면 캐시를 추가한 뒤 동작을 예측하기 어려워진다.

공유 범위와 용량

캐시 키에는 결과를 구별하는 데 필요한 조건이 포함되어야 한다. 언어나 권한에 따라 응답이 달라지는데 같은 키를 사용하면 잘못된 내용이 전달될 수 있다. 사용자별 응답을 공동 캐시에 섞지 않는 설계가 중요하다.

용량이 제한되면 일부 항목을 제거해야 한다. 최근 사용 여부나 사용 빈도 등을 기준으로 정할 수 있지만 어느 정책이 항상 우월한 것은 아니다. 캐시가 비어 있는 시작 단계와 대량 만료 시 원본에 몰리는 부하도 고려해야 한다.

관련 문서

기억 장치 / 데이터베이스 / HTTP