캐싱
데이터 복사본을 더 빠른 속도 혹은 비용이 덜 드는 저장소에 저장함으로써 속도와 비용을 절감하기 위해 사용하는 방법. CPU의 캐시, 웹서버의 캐시, 서버의 캐시 등 에서 사용 된다.
- 캐시 미스 (Cache Miss): 캐시에 데이터가 존재하지 않아 원본 데이터를 참조하는 경우
- 캐시 히트 (Cache Hit): 캐시에 데이터가 존재해 원본 데이터를 참조하지 않아도 되는 경우캐시 제거 (Cache Eviction): 캐시에서 데이터를 삭제하는 것
- 캐시 전파 (Cache Invalidation): 원본 데이터가 변경되어 캐시에서의 데이터도 변경되어야 할 때, 이전 버전의 데이터를 삭제하고 새로운 데이터를 캐시에 저장하는 것
- 캐시 폭주 (Cache Thrashing): 캐시 용량이 작아 캐시가 자주 miss하게 되어, 결국 오히려 속도가 느려지는 현상
- 캐시 전략 : 읽기가 많이 발생하는 경우, 쓰기가 많이 발생하는 경우, 데이터의 우선순위 등을 고려하여 어떤 전략으로 캐시 데이터를 유지할 것인지 설정해야 함
- 캐시 데이터 삭제 전략
- Expiration : 캐시 데이터에 TTL(Time-to-Live)를 설정하여 시간 기반으로 데이터를 삭제
- LRU(Least Recently Used) : 가장 오랫동안 사용되지 않은 데이터 삭제
- LFU(Least Frequently Used) : 가장 사용 빈도가 낮은 데이터 삭제 (비록, 최근에 사용되었더라도)
- FIFO(First-in First-out) : 가장 먼저 생성된 데이터 삭제
Cache-Aside
Cache-Aside는 캐시에 데이터를 저장하는 방법 중 하나로, 응용 프로그램에서 데이터를 가져오기 위해 데이터베이스를 조회할 때, 먼저 캐시를 조회한다. 캐시에 데이터가 있으면, 데이터베이스 조회를 하지 않고 바로 응용 프로그램에서 데이터를 가져온다. 만약 캐시에 데이터가 없으면, 데이터베이스에서 데이터를 조회한 후, 조회한 데이터를 캐시에 저장한다.
장점
- 캐시에 저장된 데이터의 유효 시간을 설정할 수 있기 때문에, 데이터베이스에서 데이터를 조회하고 캐시에 저장하는 시간 간격을 조절하여 캐시의 효율성을 높일 수 있다.
- 데이터베이스에서 데이터를 조회하는 비용이 높은 경우 데이터베이스 조회 비용을 줄일 수 있다.
단점
- 캐시 미스가 발생하는 경우 응용프로그램에서 데이터를 가져오기 위해 데이터베이스를 조회하고, 조회한 데이터를 캐시에 저장해야 하는데 이는 데이터베이스 조회 비용이 높은 경우, 성능 저하로 이어질 수 있다.
- 캐시 유효 시간을 적절하게 설정하지 않으면, 캐시된 데이터가 오래된 상태로 남아 있을 수 있기 때문에 새로운 데이터를 반영하지 못하여 오래된 데이터를 사용하게 됨으로써 데이터 불일치 문제가 발생 할 수 있다.
- 데이터의 최초 접근 시에 캐시에 저장하는 비용이 발생하여 최초 접근 시 속도가 느릴 수 있다.