캐시를 적용하면 읽기(조회) 성능을 향상시킬 수 있다.
RDB
의 경우, disk에 접근해야하기 때문에 상대적으로 연산 수행이 오래 걸린다. 반면 redis와 같은 캐시
는 메모리에서 동작하기 때문에 상대적으로 빠르게 연산을 수행할 수 있다.
일반적인 캐싱 시 조회 과정
은 다음과 같다.
최초 조회 시에는 캐시 데이터가 없기 때문에, DB 접근 조회 후 캐시에 저장한다.
그리고 다음 요청 부터는 캐시에 저장된 데이터를 반환하며, update와 같이 조회 데이터에 변경이 일어날 경우 캐시를 갱신한다.
캐시를 사용하면 읽기 성능을 향상시킬 수 있지만, 아무데나 사용해서는 안된다. 데이터가 update될 때마다 캐시도 함께 update 해줘야 하며, 캐시에 데이터가 과하게 많이 쌓일 경우에도 side effect가 발생할 수 있기 때문이다.
자주 변경되지 않는 데이터
자주 조회되는 데이터
캐싱 전략에는 로컬 캐싱과 글로벌 캐싱이 있다. 즉, 어디에다 캐시를 저장할거냐? 의 문제이다.
로컬 캐싱은 서버 내부 저장소에 캐시 데이터를 저장하는 방법이다.
서버 간의 데이터가 공유되지 않는다.
각 서버의 캐시가 서로 다른 상태를 가질 수 있기 때문에, 일관성 문제가 발생할 수 있다.
별도의 캐시 서버를 두어 각 서버에서 캐시 서버에 접근한다.
글로벌 캐싱은 캐시 서버로의 네트워크 트래픽이 발생하기 때문에 로컬 캐싱보다 상대적으로 속도가 느리다.
하지만 앞서 봤던 로컬 캐싱의 치명적인 단점이 사라진다(각 서버간 데이터 공유).