쿠키(Cookie)와 세션(Session)
로그인 기능까지 구현 완료 후 로그인 한 사용자의 정보를 어떠한 방법으로 다룰지에 대해 공부하다 Session이 필요하다는것을 알게 되었다.
Session은 대학교에서 Cookie와 같이 다룬것이 기억이 나는데 이것의 정확한 의미, 프로세스, 차이점을 정확하게 모르고있었다.
이번기회에 이러한것들을 한번 정리하는것이 좋다고 생각하여 이렇게 게시글을 작성하게 되었다.
Cookie와 Session을 왜 사용하는가?
이 질문의 답은 간단하게 설명할 수 있다. HTTP 프로토콜의 특징이자 약점을 보완하기 위해서 사용된다.
HTTP 프로토콜의 특징
1. 비연결지향(Connectionless)
HTTP는 먼저 클라이언트가 request를 서버에 보내면 서버는 클라이언트에게 요청에 맞는 response를 보내고 접속을 끊는 특성
2. 상태정보유지안함(Stateless)
연결을 끊는 순간 클라이언트와 서버의 통신이 끝나며 상태정보는 유지하지 않는 특성
쿠키(Cookie)
쿠키는 클라이언트 로컬에 저장되는 키와 값이 들어오는 작은 데이터 파일을 의미한다.
쿠키의 구성요소로는 이름, 값, 말료날짜, 경로정보가 포함되어있다. 또한 쿠키는 일정시간동안 데이터를 저장할 수 있다.
프로세스
1. 브루우저에서 웹페이지 접속
2. 클라이언트가 요청한 웹 페이지를 받으면서 쿠키를 클라이언트 로컬에 저장
3. 클라이언트가 재 요청시 웹페이지 요청과 함께 쿠키값도 같이 전송
이러한 프로세스의 결과적으로 우리가 웹을 사용할 때 지속적으로 로그인정보를 가지고 있는것처럼 사용하고 있다.
세션(Session)
일정시간동안 같은 브라우저로 부터 들어오는 일련의 요구를 하나의 상태로 보고 그 상태를 유지하는 기술이다.
클라이언트가 request를 보내면 해당 서버의 엔진이 클라이언트에게 유일한 ID를 부여하는데 이것이 Session ID이다.
프로세스
1. 클라이언트가 서버에 접속시 세션 ID를 발급
2. 서버에서는 클라이언트로 발급해준 세션 ID를 쿠키를 사용해 저장 (이때 쿠키를 JSESSIONID이라고 말함)
3. 클라이언트는 다시 접속할 때 이 쿠키를 이용해 서버에 전달
Cookie와 Session의 차이점
Cookie(쿠키) | Session(세션) | |
저장위치 | 클라이언트에 파일로 저장 | 서버에 저장 |
라이프 사이클 | 만료시간 존재 하지만 브라우저 종료시 정보가 계속 남아있을 수 있다. | 브라우저 종료시 만료시간에 상관없이 무조건 소멸된다. |
속도 | 속도가 빠르다 | 속도가 비교적 느리다 |
보안 | request에서 스나이핑 가능 | 보안성 비교적 좋음 |