쿠키(Cookie)
HTTP의 일종으로 사용자가 어떤 웹 사이트에 방문할 경우, 그 사이트가 사용라고 있는 서버에서 사용자의 컴퓨터에 저장하는 작은 기록 정보 파일
쿠키 특징
- 이름, 값, 만료일(저장 기간 설정), 경로 정보로 구성
- 클라이언트에 총 300개의 쿠키 저장 가능
- 하나의 도메인 당 20개의 쿠키 가질 수 있음
- 하나의 쿠키는 4KB(4096byte)까지 저장 가능
쿠키 동작 순서
- 클라이언트가 페이지 요청(사용자가 웹 사이트 접근)
- 웹 서버는 쿠키 생성
- 생성한 쿠키에 정보 담아 HTTP 화면 돌려줄 때 같이 클라이언트에게 돌려줌
- 넘겨 받은 쿠키는 클라이언트가 가지고 있다가(로컬 PC에 저장) 다시 서버에 요청할 때 요청과 함께 쿠키 전송
- 동일 사이트 재방문시 클라이언트의 PC에 해당 쿠키 있는 경우 요청 페이지와 함꼐 쿠키 전송
쿠키 사용 예시
- 방문했던 사이트에 다시 방문 했을 때 아이디, 비밀번호 자동 입력
- 팝업창을 통해 오늘 이 창 다시 보지 않기 체크
- 장바구니 기능
세션(Session)
일정 시간동안 같은 사용자(브라우저)로부터 들어오는 일련의 요구를 하나의 상태로 보고 그 상태를 일정하게 유지시키는 기술
세션 특징
- 웹 서버에 웹 컨테이너의 상태를 유지하기 위한 정보 쩌장
- 웹 서버에 저장되는 쿠키(=세션 쿠키)
- 브라우저를 닫거나 서버에거 세션을 삭제했을 떄만 삭제가 되므로 쿠키보다 보안이 좋음
- 저장 데이터에 제한 X(서버 용량이 허용하는 한)
- 각 클라이언트 고유 Session ID 부여(Session ID로 클라이언트 구분)
세션 동작 순서
- 클라이언트가 페이지 요청(사용자가 웹 사이트 접근)
- 서버는 접근한 클라이언트의 Request-Header 필드인 Cookie를 확인하여 클라이언트가 해당 Session ID를 보냈는지 확인
- Session ID가 존재하지 않으면 서버는 Session ID를 생성해 클라이언트에게 돌려줌
- 서버에서 클라이언트로 돌려준 Session ID를 쿠키를 사용해 서버에 저장(쿠키 이름:JSESSIONID)
- 클라이언트는 재접속 시, JSESSIONID 이용하여 Session ID 값을 서버에 전달
세션 사용 예시
- 화면이 이동해도 로그인이 풀리지 않고 로그아웃하기 전까지 유지
쿠키 VS 세션
| 쿠키(Cookie) | 세션(Session) |
---|
저장 위치 | 클라이언트(접속자 PC) | 웹 서버 |
저장 형식 | text | Object |
만료 시점 | 저장 시 설정 | 브라우저 종료 시 |
리소스 | 클라이언트 리소스 | 웹 서버 리소스 |
용량 제한 | 도메인 당 20개 쿠키 당 4KB | 제한X(서버가 허용하는 만큼) |
속도 | 빠름(세션보다) | 느림(쿠키보다) |
보안도 | 낮음(세션보다) | 높음(쿠키보다) |
쿠키와 세션을 사용하는 이유
HTTP 프로토콜의 특성이자 약점을 보완하기 위해
-> connectionless : 클라이언트가 요청을 한 후 응답을 받으면 연결을 끊어버리는 특징
-> stateless : 통신이 끝나면 상태를 유지하지 않는 특징
세션을 사용해도 되는데 쿠키를 사용하는 이유
서버 자원의 낭비를 방지하고 웹 사이트의 속도를 높이기 위해(세션은 서버에 저장되어 서버 자원을 사용하기 때문에 사용자가 많을 경우 소모되는 자원 많음)