HTTP(HyperText Transfer Protocol)는 하이퍼텍스트(Hypertext)를 빠르게 교환하기 위한 프로토콜(컴퓨터나 원거리 통신 장비 사이에서 메시지를 주고 받는 양식과 규칙의 체계)의 일종으로, 서버와 클라이언트 사이에서 어떻게 메시지를 교환할지를 정해 둔 규약이라고 이해하면 된다.
HTTP가 가진 특징으로는 무상태 프로토콜(Stateless)
과 비연결성(Connectionless)
을 들 수 있는데, 간단히 설명하면 다음과 같다.
서버와 클라이언트가 통신할 때, 서버가 클라이언트의 '상태'를 가지고 있지 않다는 것을 의미한다. 따라서 클라이언트에서 서버로 요청을 보낼 때 요청에 필요한 정보를 모두 모아 한 번에 보내야 한다.
예를 들어 손님(클라이언트)가 직원(서버)에게 저녁 메뉴로 "시저 샐러드 1개 주세요."라는 요청을 보냈다면, 직원은 그 요청에 따른 응답을 한 후에는 해당 주문을 기억하지 않는다. 따라서 직원에게 "아까 주문한 거 1개 더 주시고 콜라도 2개 주세요."라는 식의 주문은 불가능하다. 이 경우 "아까 시저 샐러드를 1개 주문했는데 그거 1개 더 주시고 콜라도 2개 주세요."와 같이, 요청에 필요한 정보를 모두 모아 한 번에 전달해야 한다.
무상태 프로토콜은 서버의 확장성에 용이한 방식으로, 서버가 요청을 쉽게 파악할 수 있고, 이전 요청을 찾아다닐 필요가 없으므로 비용(리소스)도 적게 발생한다는 장점이 있다.
반면 요청을 한 번에 보내기 때문에 요청이 복잡해진다는 단점도 존재한다.
서버와 클라이언트가 서로 '연결'되어 있지 않다는 것을 의미한다. 즉 서버와 클라이언트가 연결된 상태에서 요청을 보내고 응답하는 방식이 아니라, 요청을 주고받을 때만 일시적으로 연결을 유지하고 응답이 끝나면 TCP/IP 연결을 해제한다.
이는 서버의 리소스를 획기적으로 줄여줄 수 있다는 장점이 있다.
※ HTTP에 대한 자세한 내용은 추후 다루도록 한다.
이러한 HTTP 프로토콜의 두 가지 특징으로 인해 발생하는 약점이 존재한다. 예를 들면 쇼핑몰 웹사이트에서 사용자의 로그인 상태 등에 대한 정보를 저장하지 못한다면 쇼핑몰에서 페이지가 바뀔 때마다 로그인을 반복해야 할 것이다. 쿠키와 세션은 이러한 약점을 보완하기 위해 등장한 개념이다.
쿠키는 웹 쿠키, 브라우저 쿠키, HTTP 쿠키 등으로 불리며, 사용자(클라이언트)의 로컬에 저장되는 작은 데이터 조각
을 의미한다. 사용자가 웹 사이트를 방문할 때 사용자의 요청이 없어도 웹 사이트의 서버에서 헤더에 실어 자동으로 전송한다.
주로 세션 관리(서버에 저장해야 할 로그인 정보, 장바구니 정보 등), 개인 설정 유지(팝업창 설정 정보, 웹 사이트의 테마 정보 등), 사용자 트래킹(사용자의 행동을 기록하고 분석하기 위한 용도) 등의 목적으로 사용된다.
쿠키는 HTTP 요청과 응답에 따라 동작한다.
본래 HTTP 세션은 클라이언트가 브라우저를 통해 서버에 접속하기 시작한 시점부터 브라우저를 종료하여 연결을 끝내는 시점까지의 일정한 기간을 말한다.
그러나 일반적으로는 서버에 세션에 대한 정보(세션의 상태, 클라이언트 데이터, 세션 데이터 등)를 저장하고 세션 쿠키(고유한 세션 ID만이 저장된 쿠키 파일)를 클라이언트에 전달함으로써 서버가 클라이언트를 식별할 수 있또록 하는 기술
자체를 말하는 경우가 많다.
세션은 쿠키를 전달 매체로 작동하므로 마찬가지로 HTTP 요청과 응답에 따라 동작한다.
정리하면, 쿠키와 세션 모두 HTTP 프로토콜의 Statless, Connectionless에서 오는 약점을 보완하기 위해 등장한 개념이다. 쿠키를 이용해 서버가 클라이언트를 구별할 수 있는 정보를 전달하고, 클라이언트는 이 쿠키 정보를 HTTP 요청과 함께 서버에 전달함으로써 서버는 각 클라이언트를 구별하고 그에 맞는 응답을 제공할 수 있게 되었다.
다만 쿠키는 클라이언트의 로컬 환경에 저장되며, 요청 시 쿠키의 값을 그대로 보내므로 보안에 매우 취약하다. 이러한 단점을 보완하기 위해 보안이 필요한 정보는 서버에 저장하고 이를 열람하기 위한 ID 정보만을 클라이언트에 전달하는 방식이 바로 세션이다.