HTTP는 기본적으로 상태를 유지하지 않는(Stateless) 프로토콜이며, 이를 보완하기 위해 다양한 기술이 활용됩니다. 🌐
**쿠키(Cookie)**는 서버가 생성하여 클라이언트에 저장하고, 클라이언트가 요청 시 서버로 다시 보내 HTTP의 Stateless 특성을 보완하는 작은 데이터 조각입니다. 🍪
쿠키는 도메인, 경로, 유효 기간(Expires, Max-Age), 보안(Secure, HttpOnly) 등 다양한 속성을 가질 수 있습니다. 🔒
**웹 스토리지(Web Storage)**는 쿠키와 유사하게 클라이언트 측에 데이터를 저장하지만, 쿠키보다 큰 용량을 가지며 서버로 자동 전송되지 않는 로컬 스토리지(영구 저장)와 세션 스토리지(브라우저 세션 동안 유지)로 나뉩니다. 💾
**HTTP 캐시(Web Cache)**는 응답받은 자원의 사본을 임시 저장하여 재활용함으로써 네트워크 대역폭 낭비를 줄이고 응답 지연을 방지하는 기술입니다. 🚀
캐시된 데이터의 신선도를 유지하기 위해 유효 기간(Expires, Cache-Control: max-age)이 부여되며, 만료 시 If-Modified-Since (날짜 기반) 또는 If-None-Match (ETag 기반) 헤더를 통해 서버에 변경 여부를 질의합니다. 🔄
서버는 자원이 변경되지 않았을 경우 304 Not Modified 상태 코드를 반환하여 클라이언트가 캐시된 데이터를 계속 사용하도록 지시합니다. ✅
**콘텐츠 협상(Content Negotiation)**은 클라이언트가 Accept, Accept-Language, Accept-Encoding 등의 헤더를 통해 선호하는 자원의 표현(언어, 미디어 타입, 인코딩 등)을 서버에 알려 가장 적합한 응답을 받도록 하는 기술입니다. 🗣️
HTTPS는 HTTP에 SSL/TLS 프로토콜을 더하여 통신을 암호화하고 인증하는 보안 프로토콜입니다. 🛡️
SSL/TLS는 클라이언트와 서버 간의 암호화 키 교환 및 디지털 인증서 검증을 통해 통신의 기밀성과 무결성을 보장합니다. 🔑
TLS 핸드셰이크 과정에서 ClientHello, ServerHello, Certificate 등의 메시지를 주고받으며 암호화 방식 협상, 키 생성, 서버 인증서 검증이 이루어집니다. 🤝