개발자도구
캐시는 왜 필요할까: 브라우저 캐시와 서버 캐시의 역할 차이
웹 서비스를 쓰다 보면 방금 봤던 페이지가 다시 열 때는 훨씬 빠르게 뜨는 경험을 하게 됩니다. 이는 우연이 아니라, 여러 계층에 걸쳐 배치된 캐시가 같은 작업을 반복하지 않도록 결과를 미리 저장해두기 때문입니다.
가장 사용자와 가까운 곳에 있는 것은 브라우저 캐시입니다. 이미지, CSS, 자바스크립트 파일처럼 자주 바뀌지 않는 정적 자원을 서버에 매번 다시 요청하는 대신, 브라우저가 로컬에 저장해두고 재사용합니다. 서버는 응답 헤더에 이 자원을 얼마나 오래 캐시해도 되는지 함께 전달해, 오래된 버전이 무한정 재사용되는 일을 방지합니다.
서버 쪽에도 별도의 캐시 계층이 존재합니다. 데이터베이스 조회는 상대적으로 비용이 큰 작업이기 때문에, 자주 조회되지만 자주 바뀌지는 않는 데이터를 Redis 같은 인메모리 저장소에 미리 담아두고, 데이터베이스 대신 여기서 먼저 응답하는 방식이 널리 쓰입니다. 메모리 접근은 디스크 기반 데이터베이스 조회보다 훨씬 빠르기 때문에 응답 속도가 크게 개선됩니다.
캐시를 쓸 때 가장 주의할 점은 원본 데이터가 바뀌었을 때 캐시된 값도 함께 갱신하거나 무효화해야 한다는 것입니다. 이 동기화가 제대로 이루어지지 않으면, 사용자에게 이미 변경된 실제 값과 다른 오래된 데이터가 보이는 문제가 생깁니다. 그래서 캐시를 설계할 때는 얼마나 빠르게 만들 것인가만큼이나 언제 캐시를 지울 것인가를 함께 고민하는 것이 중요합니다.