client가 server에 요청하면 sever는 요청에 대한 처리를 한 후 client에 응답한다. 응답후 연결을 해제하는데 stateless라고 한다. http protocol의 특징이다.
stateless
지속적인 연결로 인한 자원낭비를 줄이기 위해서 연결을 해제한다.
그러나 client와 server가 연결 상태를 유지해야 하는 경우가 생긴다.
이 때 client 단위로 상태 정보를 유지해야 하는 경우 Cookie와 Session이 사용된다.
Cookie
Cookie의 동작 순서
Client가 페이지를 요청한다.
WAS는 Cookie를 생성한다.
HTTP Header에 Cookie를 넣어 응답한다.
Browser는 넘겨받은 Cookie를 PC에 저장하고, 다시 WAS가 요청할 때 요청과 함께 Cookie를 전송한다.
Browser가 종료되어도 Cookie의 만료 기간이 남아 있다면 Client는 게속 보관한다.
동일 사이트 재방문시 Client의 PC에 해당 Cookie가 있는 경우, 요청 페이지와 함께 Cookie를 전송한다.
Cookie의 특징
Session
방문자가 웹 서버에 접속해 있는 상태를 하나의 단위로 보고 그것을 세션이라고 한다.
WAS의 memory에 Object 형태로 저장된다.
memory가 허용하는 용량까지 제한 없이 저장 가능하다.
site내에서 화면을 이동해도 로그인이 풀리지 않고 유지되는 것은 session의 사용 예이다.
session의 동작 순서
클라이언트가 페이지를 요청한다.
서버는 접근한 클라이언트의 Request-Header 필드인 Cookie를 확인하여, 클라이언트가 해당 session-id를 보냈는지 확인한다.
session-id가 존재하지 않는다면, 서버는 session-id를 생성해 클라이언트에게 돌려준다.
서버에서 클라이언트로 돌려준 session-id를 쿠키를 사용해 서버에 저장한다.
클라이언트는 재접속시, 이 쿠키를 이용하여 session-id값을 서버에 전달한다.
session의 특징
웹 서버에 웹 컨테이너의 상태를 유지하기 위한 정보를 저장한다.
웹 서버에 저장되는 쿠키이다.(=세션 쿠키)
브라우저를 닫거나, 서버에서 세션을 삭제 했을 때만 삭제가 되므로 쿠키보다 비교적 보안이 좋다.
저장 데이터에 제한이 없다.
각 클라이언트 고유 Session ID를 부여한다.
Session ID로 클라이언트를 구분하여 각 클라이언트 요구에 맞는 서비스를 제공한다.
Cookie | Session | |
---|---|---|
저장위치 | Client의 컴퓨터 | Server의 memory |
저장형식 | String | Object |
만료시점 | 쿠키 저장시 설정 (설정 없으면 브라우저 종료 시) | 정확한 시점 모름 |
리소스 | 클라이언트의 리소스 | 서버의 리소스 |
용량제한 | 한 도메인 당 20개, 한 쿠키당 4KB | 제한없음 |