웹 통신 규격인 HTTP 프로토콜의 특징중 비연결성(Connectionless)와 비상태성(Stateless)가 있다. 해당 특징은 클라이언트의 요청에 연결을 유지하지않고, 요청에 맞는 응답 데이터만 내어준 다음 연결을 해제한다는 점이다. 해당 방법을 사용하면 서버에 사용자와의 연결상태를 유지하지 않기 때문에 서버의 자원을 크게 절약할 수 있다. 하지만 이와 반대로 요청을 하는 사용자가 누구인지 특정할 수 없기 때문에 매번 새로운 사용자로 인식한다는 단점이 있다. (이 경우!! 로그인 상태 유지를 못한다. 왜냐? 매번 새로운 사용자이기 때문에)
이러한 단점을 상쇄하기 위한 기술로 쿠키와 세션이 있다.
쿠키는 서버에서 사용자의 컴퓨터에 저장하는 데이터 형태를 말한다. 클라이언트의 상태 정보를 클라이언트 PC에 저장하여 필요시 해당 상태 정보를 참조하거나 재사용할 수 있다.
1. 이름, 값, 만료일(저장 기간 설정), 경로 정보로 구성되어 있다.
2. 클라이언트에 총 300개의 쿠키를 저장할 수 있다.
3. 하나의 도메인 당 20개의 쿠키를 가질 수 있다.
4. 하나의 쿠키는 4KB(=4096byte)까지 저장 가능하다.
1. 클라이언트가 페이지를 요청 (사용자가 웹사이트 접근)
2. 웹 서버는 쿠키를 생성
3. 생성한 쿠키에 정보를 담아 클라이언트에게 전달 (Response Header에 Set-Cookie 속성 사용)
4. 전달받은 쿠키는 클라이언트 PC에 저장됩니다.
5. 이후 다시 서버에 요청할 때 요청과 쿠키를 함께 전달합니다. (브라우저에 의해 자동 처리, Request Header)
6. 서버는 전달받은 쿠키를 이용하여 해당 요청을 처리하고 응답합니다.
클라이언트로부터 들어오는 요청을 하나의 상태로 보고, 그 상태를 유지시키는 기술이다. 즉, 클라이언트의 접속 상태를 일관되도록 유지하기 위한 기술이다.
1. 각 클라이언트에게 고유 ID를 부여(쿠키 형태로 header에)
2. 서버는 세션 ID로 클라이언트를 구분하고 클라이언트의 요구에 맞는 서비스를 제공
3. 접속 시간에 제한을 두어 일정 시간 응답이 없다면 정보가 유지되지 않도록 설정 가능
4. 클라이언트는 고유 ID만 쿠키로 가지고 있고 서버가 이에 대응하는 클라이언트 정보를 관리 → 보안성↑
1. 클라이언트가 페이지를 요청(사용자가 웹사이트 접근)
2. 서버는 세션 ID를 만들고 해당 사용자의 정보를 세션 ID와 함께 저장 (쿠키, JSESSIONID)
3. 생성한 세션 ID를 쿠키에 담아 클라이언트에게 전달(Response Header에 Set-Cookie 속성 사용)
4. 전달받은 쿠키는 클라이언트 PC에 저장
5. 이후 다시 서버에 요청할 때 요청과 쿠키를 함께 전달 (브라우저에 의해 자동 처리, Request Header)
6. 서버는 전달받은 쿠키에 있는 세션 ID를 활용하여 해당 요청을 처리하고 응답
쿠키(Cookie) | 세션(Session) | |
---|---|---|
저장 위치 | 클라이언트 | 웹 서버 |
저장 형식 | Text | Object |
만료 시점 | 쿠키 저장시 설정 | 브라우저 종료시 삭제, 시간 설정 가능 |
속도 | 세션보다 ↑ | 쿠키보다 ↓ |
보안 | 세션보다 ↓ | 쿠키보다 ↑ |