HTTP의 특징
•
비연결성(Connectionless), 비상태성(Stateless) 특징이 있다
•
모든 사용자의 요청마다 연결과 해제의 과정을 거친다
◦
연결 상태를 유지하지 않음
◦
연결 해제 후에도 상태 정보를 저장하지 않음
•
서버의 자원을 절약
•
사용자를 식별할 수 없어서 같은 사용자가 요청을 여러번 해도 새로운 사용자로 인식
◦
해당 문제를 보완하기 위해 쿠키와 세션을 사용
쿠키란?
•
웹 사이트에 접속할 때 생성되는 정보를 담은 임시 파일
◦
서버를 대신해 정보를 웹 브라우저에 저장
→ 웹 브라우저를 이용하는 컴퓨터에 저장
•
String 형태로 이루어진 Key와 Value로 구성
•
브라우저마다 사용되는 쿠키는 다름
◦
Chrome의 쿠키는 Firefox에서 사용할 수 없음
◦
서버에서 브라우저가 다르면 다른 사용자로 인식
쿠키의 사용 목적
1.
세션 관리(Session management)
a.
서버에 저장해야 할 로그인, 장바구니, 게임 스코어 등의 정보 관리
2.
개인화(Personalization)
a.
사용자 선호, 테마 등의 세팅
3.
트래킹(Tracking)
a.
사용자 행동을 기록하고 분석하는 용도
쿠키 생성
1.
HTTP 요청을 수신할 때 서버는 응답과 함께 Set-Cookie 헤더를 전송
a.
Cookie HTTP 헤더 안에 포함되어 전송
b.
만료일, 지속시간 명시 가능
c.
특정 도메인 / 경로 제한을 설정 가능
Set-Cookie: <cookie-name>=<cookie-value>
HTML
복사
2.
서버 헤더는 클라이언트에게 쿠키를 저장하라고 전달
HTTP/1.0 200 OK
Content-type: text/html
Set-Cookie: yummy_cookie=choco
Set-Cookie: tasty_cookie=strawberry
[page content]
HTML
복사
3.
서버로 전송되는 모든 요청과 함께, 브라우저는 Cookie 헤더를 사용하여 서버로 이전에 저장했던 모든 쿠키들을 회신
GET /sample_page.html HTTP/1.1
Host: www.example.org
Cookie: yummy_cookie=choco; tasty_cookie=strawberry
HTML
복사
쿠키의 단점
•
4KB의 데이터 저장 제한
•
매 HTTP요청에 포함되어 있어 웹을 느려지게 하는 원인
•
같은 쿠키는 도메인 내의 모든 페이지에 같이 전달 됨
•
HTTP 요청에 암호화 되지 않고 보내기 때문에 보안에 취약함
•
쿠키는 사용자의 로컬에 텍스트로 저장 되어있어 쉽게 접근, 내용 확인이 가능함
세션이란?
•
일정 시간 동안 같은 사용자로부터 들어오는 일련의 요구를 하나의 상태로 보고, 그 상태를 유지시키는 기술
◦
일정시간
→ 방문자가 웹 브라우저를 통해 웹 서버에 접속한 시점부터 종료하여 연결을 끝내는 시점
•
세션 아이디는 웹 브라우저당 1개씩 생성되어 웹 컨테이너에 저장
◦
브라우저 종료시 소멸
◦
로그아웃 시 새로운 사용자로 인식
→ 쿠키보다 비교적 보안이 좋다
•
서버 측에서 저장하고 관리 → 저장 데이터 용량에 제한이 없다
•
아이디, 닉네임 등을 세션에 저장하면 DB에 접근할 필요가 없어서 효율적
세션 동작 순서
1.
클라이언트가 페이지를 요청(사용자가 웹사이트 접근)
2.
서버는 클라이언트의 Cookie를 확인하여, 클라이언트가 해당 session-id를 보냈는지 확인
3.
session-id가 존재하지 않는다면, 서버는 session-id를 생성해 클라이언트에게 반환
4.
서버에서 클라이언트로 돌려준 session-id를 쿠키를 사용해 서버에 저장
5.
클라이언트는 재접속 시, 이 쿠키(JSESSIONID)를 이용하여 session-id 값을 서버에 전달
쿠키와 세션의 차이
쿠키(Cookie) | 세션(Session) | |
저장 위치 | 클라이언트(접속자 PC) | 웹 서버 |
저장 형식 | text | Object |
만료 시점 | 쿠키 저장시 설정(브라우저가 종료되도, 만료시점이 지나지 않으면 자동삭제되지 않음) | 브라우저 종료시 삭제(기간 지정 가능) |
사용하는 자원(리소스) | 클라이언트 리소스 | 웹 서버 리소스 |
용량 제한 | 총 300개하나의 도메인 당 20개하나의 쿠키 당 4KB(=4096byte) | 서버가 허용하는 한 용량제한 없음. |
속도 | 세션보다 빠름 | 쿠키보다 느림 |
보안 | 세션보다 안좋음 | 쿠키보다 좋음 |
•
쿠키는 자동완성, ‘이 창 다시 보지 않기’ 등 사용자의 편의를 위한 정보 보관
◦
삭제되거나 유출되어도 문제 없는 수준의 정보를 저장
•
세션은 누군가에게 노출되면 안되는 중요한 정보를 저장