웹에서의 상태 유지 기술
HTTP 프로토콜은 상태 유지가 안되는 프로토콜이다.
- 이전에 무엇을 했고, 지금 무엇을 했는지에 대한 정보를 갖고 있지 않음
- 웹 브라우저(클라이언트)의 요청에 대한 응답을 하고 나면 해당 클라이언트와의 연결을 지속하지 않음
상태 유지를 위해 Cookie와 Session 기술이 등장
쿠키(Cookie) & 세션(Session)
Cookie
- 사용자 컴퓨터에 저장
- 저장된 정보를 다른 사람 또는 시스템이 볼 수 있는 단점
- 유효시간이 지나면 사라짐
Session
- 서버에 저장
- 서버가 종료되거나 유효시간이 지나면 사라짐
Cookie 동작 이해
- 클라이언트가 서버에게 요청을 보냄
- 유지해야 할 정보가 있다면 서버는 유지할 정보를 갖고 쿠키를 생성 (쿠키는 이름과 값으로 구성, 유지 시간등 정보를 가짐)
- 만들어진 쿠키는 반드시 응답결과에 포함되어서 클라이언트에 보내진다.
- 만들어진 쿠키는 클라이언트가 갖고 있게 된다. 갖고있는 쿠키를 항상 요청할 때 포함시켜서 서버에 보낸다.
- 서버는 내가 만들어준 쿠키가 있나 확인하고, 있으면 '이 사용자가 전에 접속했던 사용자구나' 혹은 '이 사용자가 유지해야 되는 정보가 이것이구나' 알 수 있게 된다.
Session 동작 이해
- 클라이언트가 서버에게 요청을 보냄
- 유지해야 할 정보가 있다면 서버는 세션키를 만든다.
- 세션키를 이용한 저장소를 생성한다. 이 저장소에 유지해야할 정보를 저장한다.
- 세션키를 담은 쿠키 생성 ( ∵ 저장소만 만들어놓고 끝내면 다시 클라이언트가 요청했을 때, 클라이언트의 저장소가 어떤 곳인지 서버는 알아낼 길이 없다.)
- 쿠키를 클라이언트에게 보낸다.
- 클라이언트는 요청할 때마다 서버가 만들어준 쿠키를 요청시 함께 보낸다.
- 서버는 쿠키로부터 세션키를 얻어내고, 세션키에 해당하는 저장소를 찾아서 저장소에 들어있는 정보를 사용하거나 원하는 정보를 저장한다. 이때 세션의 정보를 담기 위해 생성하는 객체가 HttpSession이다.
생각해보기
무상태 프로토콜(stateless protocol) : HTTP, UDP, DNS
상태 프로토콜(stateful protocol) : FTP, Telnet