한 사용자가 로그인 후 자신의 대시보드 페이지를 열었다. 하지만 데이터가 로드되기까지 3~4초나 걸렸다. “왜 이렇게 느리지?”
반면, 같은 페이지를 다시 열자 금세 표시됐다. 마법일까? 아니다. 이건 바로 **캐시(Cache)**와 **세션(Session)**이 만든 결과다.
오늘 우리는 서버와 클라이언트에서 사용되는 캐시와 세션의 개념, 필요성, 구현 방식, 장단점을 스토리와 함께 살펴본다.
“같은 데이터를 매번 새로 가져오지 말고, 한 번 받은 데이터를 저장해두고 재사용하자!”
이게 캐시의 핵심이다.
캐시는 사용자의 요청에 대한 응답을 미리 저장해두고, 동일한 요청이 들어오면 다시 처리하지 않고 빠르게 응답을 제공하는 전략이다.
웹 브라우저는 HTML, CSS, JS, 이미지 같은 정적 자원을 브라우저 디스크나 메모리 캐시에 저장한다.
Cache-Control, ETag, Expires, Last-Modified서버도 요청 결과를 미리 저장해두고, 다음 요청 시 빠르게 반환할 수 있다.
“사용자가 누구인지 기억해두자.”
HTTP는 기본적으로 상태를 저장하지 않는다. 그래서 사용자가 로그인했는지, 어떤 장바구니를 담았는지 기억하지 못한다.
세션은 이런 상태 정보를 저장하는 방식이다.
서버에서 사용자 정보를 메모리나 파일/DB에 저장하고, 클라이언트에는 세션 ID만 쿠키로 전달한다.
대표적으로 JWT(JSON Web Token)가 있다. 사용자의 상태 정보를 암호화된 토큰으로 클라이언트에 저장한다.
| 항목 | 캐시 | 세션 |
|---|---|---|
| 목적 | 응답 속도 향상 | 사용자 상태 유지 |
| 위치 | 클라이언트 or 서버 | 서버 or 클라이언트 |
| 예시 | 이미지, HTML, API 응답 | 로그인 상태, 장바구니 |
| 유효성 | 시간 기준 (TTL, ETag 등) | 사용자 활동 기준 (로그인 등) |
| 민감 정보 | X (보안상 위험) | O (주의 필요) |
웹 개발자는 성능과 사용자 경험을 동시에 고려해야 한다.
캐시는 빠른 웹을 만들고, 세션은 똑똑한 웹을 만든다.
두 기술은 서로 보완적이며, 적절한 설계와 전략을 통해
우리는 더 나은 웹 경험을 사용자에게 제공할 수 있다.
📌 “캐시는 반복을 줄이고, 세션은 맥락을 기억한다.”
