<aside>
💡 가비지 컬렉션의 의미에 대해 생각해보자
</aside>
(참고: https://ko.javascript.info/garbage-collection)
Cache??? Caching???
캐시는 일반적으로 일시적인 특성을 가지고 있는 데이터들을 저장하기 위한 목적으로 존재하는
**고속의 데이터 저장 공간(고속의 데이터 스토리지 계층)**이다.
그러므로, 이후에, 다시 해당 데이터에 대한 요청이 들어온 경우,
데이터의 기본스토리지보다 훨씬 빨리 엑세스하여, 요청을 처리할 수 있다.
따라서, 캐시는 데이터저장공간, 캐싱이란 것은 캐시 영역으로 접근하여 데이터를 가져와 요청하는 것을 의미한다.
캐싱을 사용하게 되면, 이전에 검색한 기록이나 계산했던 데이터를 빠르게 접근 할 수 있다.
캐싱은 어떻게 작동하는가??
캐시의 데이터는 일반적으로 RAM과 같이 빠르게 엑세스 할 수 있는 하드웨어에 저장되게 된다.
이렇게 RAM과 같은 공간에 저장을 함으로써, 엑세스속도가 느린 기본스토리지 계층에 엑세스해야 하는 필요자체를 줄이면서 데이터의 검색성능을 높이는 것이 캐싱의 주요 목적이다.
캐시의 장점은???
- 애플리케이션의 성능 개선
메모리(RAM)은 디스크보다 훨씬 속도가 빠르기 때문에, 인메모리 캐시에서 데이터를 읽는 속도가 매우 빠르게 된다. 이렇게 빠른 속도로 데이터를 읽음으로써, 애플리케이션의 성능을 개선할 수있다.
- 데이터베이스 비용 절감
단일 캐시 인스턴스의 IOPS(초당 입출력 작업량)는 수십만건이다. 이러한 성능을 바탕으로 수많은 데이터베이스 인스턴스를 대체 할 수 있다. 특히나, 처리량 기준으로 데이터베이스 비용이 생기는 경우, 많은 비용을 절감 할 수 있다.
- 백엔드의 로드 감소
캐싱은 읽기부분의 상당부분을 데이터베이스에서 인메모리 캐시로 리다이렉션함으로써, 데이터베이스의 로드를 줄일 수 있다.
- 예측가능한 성능
데이터베이스에 대한 사용량이 일정시기에 갑자기 많이 늘어나게 되면, DB에서 데이터를 가져오는데 지연이 생기게 되고, 이러한 점은 성능 저하를 불러오게 된다(예측불가한 성능). 하지만, 높은 처리량을 가진, 인메모리 캐시를 활용함으로써 이 문제를 해결 할 수 있게 된다.
- 데이터베이스의 핫스팟 제거가능
데이터베이스에서 자주 검색이 되는 항목 같은 경우, 일반적인 데이터보다 훨씬 많은 엑세스가 발생하게 되는데, 이로인해 데이터베이스 핫스팟이 발생할 수 있다. 이런경우, 데이터요구 처리량에 따라 데이터베이스 리소스를 초과해서 공급(프로비저닝, provisioning)해줘야 하는 경우가 있다. 이렇게 자주 검색이 되는 경우, 인메모리 캐시에 공통키를 저장함으로써, 데이터베이스의 핫스팟을 제거하여 초과 프로비저닝의 가능성을 줄일 수 있다.
- 읽기처리량(IOPS) 증가
인메모리 시스템은 유사한 디스크 기반 데이터베이스에 비해 훨씬 높은 IOPS를 가지게 된다.
특히나 단일 인스턴스로 캐시를 이용하게 되는 경우, IOPS가 수십만건이 넘게 된다.