쿠키와 세션에 대해 알아보자.
1. 왜 사용하는가?
HTTP 프로토콜의 특징인 Connectionless, Stateless에 대해 알 필요가 있다.
Connectionless : 클라이언트가 서버에 요청을 하고 서버가 클라이언트에 응답을 보내면 접속을 끊는다.
Stateless : 통신이 끝나면 현재 state 정보를 유지하지 않는다.
클라이언트의 정보를 유지하기 싫어하는 HTTP 프로토콜을 사용하면서 서버가 클라이언트를 식별하기 위한 방법으로 쿠키와 세션을 사용하게 되었다.
2. 쿠키(Cookie)
쿠키는 일정시간 동안 데이터를 저장할 수 있어서 로그인 상태를 유지하거나 사용자 정보를 일정시간 유지하는 경우에 사용된다.
(웹사이트에서 일정시간 경과 시 로그아웃 시키는 경우를 생각하면 될 것같다.)
쿠키에 저장되는 정보 : 클라이언트에 저장되는 키, 이름, 값, 만료날짜, 경로정보 등.
쿠키 작동 프로세스 : 웹페이지 접속 → 쿠키를 클라이언트(내 저장소)에 저장 → 클라이언트 재 요청시 쿠키값 전송 → 지속적으로 로그인정보를 갖고있는것 처럼 사용.
쿠키를 사용하면 내 저장소에 정보가 남으므로 보안상의 위험이 있다.
3. 세션(Session)
세션은 클라이언트와 웹 서버간 네트워크 연결이 지속적으로 유지되는 상태. 서버 메모리에 저장되는 정보이다. 클라이언트와 클라이언트를 구별하기 위해 사용한다. 쿠키와 달리 정보가 누출되지 않는다.
세션 작동 프로세스 : 클라이언트가 접속요청 → 서버가 클라이언트에 고유한 세션ID발급 → ID값을 클라이언트에 쿠키로 저장 → 다시 접속할 때 쿠키값(JSESSIONID)을 서버로 전송
4. 쿠키와 세션, 뭐가 다른가?
- 저장되는 위치가 다르다. 쿠키 = 클라이언트, 세션=서버
- 속도가 다르다. 쿠키>세션. 서버에 저장된 정보는 반응이 더 느리기 때문.
- 보안문제. 쿠키는 클라이언트에서 변질되거나 정보를 탈취당할 위험이 있다. 서버는 비교적 안전.
- 라이프사이클(만료시간). 쿠키는 클라이언트에 파일로 저장되어 브라우저가 종료되어도 정보가 남아있다. 만료시간을 지정할 수 있어서 쿠키 삭제하기 전까지 유지할 수도 있다. 세션도 만료시간을 정할 수 있지만 브라우저 종료시 삭제된다.
5. (번외)캐시와 다른점
캐시는 이미지나 css, js파일 등이 사용자의 브라우저에 저장이 된다. 따라서 다시 자료를 요청할 때 자원을 아낄 수 있다.
한번 캐시가 저장되면 브라우저를 참고하기 때문에 서버에서 값이 변경되어도 사용자는 변경된 값을 읽을 수 없을 수가 있는데 이때는 캐시를 지워주거나 서버에서 클라이언트로 응답을 보낼 때 header에 캐시 만료기간을 명시하여 해결을 한다.