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