

캐시서버는 국내 배송과 해외 배송의 차이라고 생각하면 이해가 쉽습니다. 국내 배송은 빠르고 저렴한 대신 해외 배송은 비싸고 느리죠. 유튜브, 페이스북, 구글 등등 많은 글로벌 대표 기업들의 데이터베이스가 미국에만 있다고 가정해봅시다. 우리나라에서 데이터를 요청하면 여러 통신사를 거치고 많은 비용과 시간이 소모됩니다. 이런 문제점을 해결하기 위해 데이터 저장소를 여러 나라에 만들어서 비용과 시간을 절감하고 이것이 캐시 서버입니다.
우리나라에 캐시 서버가 있다면 사용자들이 자주 사용하는 데이터들을 우리나라 캐시서버에 보관하고, 사람들이 자주 요청하는 이 캐시서버에서 응답해주어 효율적으로 사용이 가능합니다.
우리가 매일같이 웹사이트나 유튜브 등을 이용하다 보면 이미지, 영상과 같은 다양한 대용량 데이터를 서버에서 전송받게 되는데요, 이러한 데이터 전송이 캐시라는 기술이 없을 경우 시간이 소요될 뿐만 아니라, 통신비도 지출되게 됩니다. 특히 고화질 동영상처럼 크기가 큰 데이터일 경우 비용이 더더욱 커지게 되죠.
그러나 한 번 전송받은 데이터들을 저장해놨다가 다시 사용할 수 있다면 반복적으로 서버에 데이터 전송을 요청할 필요가 없게 됩니다. 이때 사용되는 기술이 캐시이며, 우리는 캐시 덕분에 반복적으로 사용하는 콘텐츠를 빠르게 이용하며, 데이터 사용량도 줄일 수 있습니다.
사용자가 웹 서버에 데이터를 요청하면 사용자의 캐시에서 도메인과 일치하는 캐시 데이터를 찾습니다.
사용자의 캐시에 원하는 데이터가 없거나 캐시 시간이 만료되었다면 서버에서 데이터를 요청합니다. (Cache Miss)
사용자의 캐시에 요청한 데이터가 존재할 경우 재검사 설정이 되어 있는지를 판단합니다 (Cache Hit)
재검사 설정이 되어 있지 않은 캐시일 경우 데이터는 최신 버전인지 검사하지 않고, 사용자에게 기존에 저장되어 있는 캐시 데이터를 응답합니다.
재검사 설정이 되어 있는 캐시면 데이터가 최신 버전인지 서버에 재검사 요청을 합니다.
캐시에 존재하는 데이터의 캐시 버전 번호와 마지막 수정 날짜를 서버의 데이터와 비교할 경우 일치하므로 사용자에게 응답코드를 주어 사용자의 캐시에 있는 검증된 최신 데이터를 사용하게 합니다.
캐시에 있는 데이터의 캐시 버전 번호나 마지막 수정 날짜가 일치하지 않으므로 서버에 데이터를 요청합니다.
서버에서 데이터를 보내서 사용자의 캐시에 저장하게 합니다.
사용자 캐시에 원하는 데이터가 있으면 사용자에게 응답합니다.

과거에는 '매직 쿠키'로 불렸으나 현재는 컴퓨터에 사용자의 상태를 저장하기 위해 사용하면서 쿠키로 불리고 있습니다.
상태유지
- 쿠키는 웹 사이트와 사용자 간의 상태를 유지하는 경우 사용됩니다. 사용자가 로그인 한 상태를 유지하거나, 사용자의 설정과 기타 정보를 저장하는 경우 활용됩니다.
개인화
- 쿠키는 사용자의 활동 및 선호도에 따라 웹 사이트를 개인화하는 경우 사용가능합니다. 예를 들어서 사용자가 이전에 방문한 페이지를 추적하여 사용자에게 맞춤형 콘텐츠를 제공 가능하죠.
트래킹
- 일부 쿠키는 사용자의 활동을 추적하여 광고 타겟팅이나 사용자 분석에 사용됩니다. 이러한 쿠키들을 특정 웹 사이트를 방문하거나 특정 상품을 구매하는 등의 활동을 기록합니다.
보안
- 쿠키는 보안을 강화하고 인증을 유지하는데 사용됩니다. 뒤에서 포스팅할 사용자의 세션을 추적하여 로그인된 상태를 유지하고, 권한 있는 접근을 제어하는데 활용됩니다.
(CSRF는 보안 취약점을 이용해서 사용자 계정에서 자금 이체를 시도하거나, 비밀번호를 변경하는 작업을 하는 악의적인 행위들을 말합니다.)
사용자가 사이트에 처음 방문해서 서버에 웹 페이지를 요청합니다.
웹 서버에서 쿠키 속성들을 설정하여 사용자에게 전송해서 브라우저가 사용자의 쿠키 저장 공간에 저장하게 합니다.
사용자가 다시 서버에 똑같은 웹 페이지를 요청합니다. 이번에는 사용자가 요청한 웹 페이지의 도메인과 일치하는 쿠키들을 http 헤더에 포함하여 같이 전송합니다.
웹 서버에서는 사용자에게 받은 쿠키를 이용하여 사용자를 파악하고 사용자에게 맞는 서비스를 제공합니다.

세션 ID를 사용자와 서버가 주고받으므로 중간의 세션 ID를 빼앗겨도 세션 ID 만으로는 사용자의 개인 정보를 알 수 없고, 세션은 일정 기간이 지나면 사라지기 때문에 보안성이 좋습니다.
서버에서 사용자 접속을 관리할 수 있습니다.
세션을 서버가 관리하므로 사용자가 많아질 수록 부하가 발생하게 됩니다.
세션을 이용하면 서버의 데이터베이스에서 매번 사용자 조회를 해야합니다.
로드 밸런싱처럼 여러 개의 서버를 사용할 경우 세션의 관리가 어렵습니다. 사용자의 세션 값을 여러 개의 서버가 공유해야 하는 문제가 발생하기 때문입니다.
세션은 서버가 나를 알아보는 방법이라고 말하기도 합니다. 이처럼 세션은 웹 사이트에 아이디와 비밀번호를 입력해서 로그인하면 해당 사이트의 회원들에게만 허용된 기능을 사용가능하게 하죠. 마이페이지에서 클릭해서 내 정보를 볼 수도 있고, 회원 전용 게시판의 글쓰기 버튼을 클릭해서 질문을 남기거나 리뷰를 쓸 수도 있습니다.
사용자는 서버로 받은 세션 아이디를 쿠키로 저장한 다음 앞으로의 모든 요청을 함께 전달합니다. 우리가 이용하는 친구 목록, 상품 내역을 볼 경우 서버에게 세션 아이디를 적은 것들을 보낸다고 생각하시면 됩니다.
사용자가 서버에 로그인을 합니다.
서버에서는 사용자의 로그인 정보와 데이터베이스에 저장된 사용자의 정보를 비교합니다.
사용자가 존재할 경우 세션 ID와 사용자의 일부 정보를 서버의 세션 저장소에서 보관합니다. 서버에서는 저장한 세션 ID값을 사용자에게 세션 쿠키로 전달합니다.
사용자가 서버에 다시 접속할 겨우 세션 ID를 같이 보내면 서버에서는 세션 저장소에서 세션 ID를 찾아 사용자가 누구인지 판단하고 사용자에게 맞는 서비스를 제공해줍니다.
참고자료
개발자가 되기 위해 꼭 알아야 하는 IT 용어 - 세션 쿠키 캐시 편