본문 바로가기

컴퓨터/기타

캐싱을 하는 이유

캐싱은 동일한 요청이 여러 번 들어 왔을 때 매 요청마다 계산을 한 다음에 보여주는 것이 아닌 기존에 한 번 계산했었던 내용을 저장해서 해당 내용을 보여주는 것이다. 그렇기 때문에 웹서버의 부하를 줄일 수 있는 기술이라고 할 수 있다.

 

아래는 캐싱을 하지 않았을 경우에 사용자 - 웹서버 - DB 사이에서 사용자에게 요청이 들어왔을 때의 실행 과정이다.

 

사용자가 웹서버에 요청을 보내면(1), 웹서버는 해당 요청을 읽고 DB에 필요한 내용을 질의한다(2).

그리고 DB는 해당 질의 내용에 대한 응답을 웹서버에 보내주고(3), 웹서버는 해당 내용을 가공해서 사용자에게 출력을 해준다(4).

 

사용자가 간단한 내용만 질의한다면 캐싱을 하는데 있어서 의미가 없지만 DB 쿼리 내용이 복잡하거나 사이트 파싱과 같은 시간이 오래걸리는 작업에 대해서는 엄청난 효과를 보여준다.

 

아래는 캐싱을 한 경우에 사용자에게 요청이 들어왔을 때의 실행 과정이다.

보다시피 사용자가 웹서버에 요청을 보내면(1), 웹서버는 해당 요청에 대해 이미 저장되어 있던 내용을 보내준다(2).

이 경우 위의 방식과 달리 DB에 요청을 보내는 과정과 DB로부터 응답을 받아서 내용을 가공하는 부분이 사라진 것을 알 수 있다. 그래서 매우 빠른 응답 속도를 얻을 수 있다.

 

다만 캐싱은 미리 저장된 데이터를 보여주는 방식이라 캐시가 갱신이 되지 않으면 예전에 있던 데이터를 그대로 보여준다는 단점이 있다. 그렇기 때문에 캐시 만료 기간을 정해놓아서 해당 시간 내에 요청이 들어온 경우엔 미리 캐싱된 데이터를 보여주고 그게 아닌 경우엔 새로 캐시를 만들어서 해당 내용을 보여주는 방식을 택하게 된다.

 

그래서 시스템 부하를 줄이기 위해서는 캐시 만료 기간을 길게 설정하는 것이 좋고, 내용의 정확성을 위해서는 캐시 만료 기간을 짧게 설정하는 것이 좋다. 그래서 서로 트레이드오프 관계에 있어서 적절한 만료 시간을 찾는 것이 중요하다.

 

컨텐츠가 자주 올라오거나 수정이 잦은 게시물의 경우에는 캐시를 사용하지 않거나 혹은 캐시 만료 시간을 짧게 설정해두고, 아카이브와 같이 게시물이 거의 변화가 없고 컨텐츠가 자주 올라오지 않는다면 캐시를 사용하고, 캐시 만료 시간을 길게 설정해두면 좋다.

 

참고로 지금 내가 운영하고 있는 카카오톡 봇의 경우에는 내용이 자주 바뀌지 않아서 캐시 만료 시간을 3시간으로 설정해놓고 운영하고 있는 중이다.

 


위쪽에 설명으로 사용한 이미지의 라이센스입니다.

사람 이미지 : designed by Freepik from Flaticon
인터넷 이미지 : designed by Smashicons from Flaticon
데이터베이스 이미지 : designed by Smashicons from Flaticon

태그