쿠키와 세션에 대해 알아보기 전에, HTTP의 특징과 이 특징이 왜 쿠키와 세션을 필요로 하는지 알 필요가 있다.
웹에서는 웹 브라우저(클라이언트)와 웹 서버간에 데이터를 주고받기 위해서 HTTP 프로토콜을 사용한다.
쿠키와 세션이 필요한 이유는 이 HTTP 프로토콜의 특징이자 약점을 보완하기 위함이다.
클라이언트와 서버가 한번 연결을 맺고, 클라이언트의 요청에 대해 서버가 응답을 마치면 맺었던 연결을 끊어버림
장점 : 서버 자원의 절약으로 더 많은 연결 가능
→ HTTP는 불특정 다수의 통신 환경을 기반으로 설계되어 있는데, 다수의 클라이언트와 계속 연결을 유지한다면 많은 리소스가 필요함
→ 연결 유지를 위한 리소스 절약이 가능
단점: 연결과 해제에 따른 오버헤드
→ 서버는 연결했던 클라이언트를 기억하지 않으므로 동일 클라이언트의 요청에도 매번 새로운 연결/해제 과정을 거침
HTTP 1.1 버전에서 연결을 계속 유지하고, 요청에 재활용 하는 기능이 Default 로 추가되었다.
→ HTTP header에 keep-alive 옵션을 줄 수 있음
이러한 Connectionless, Stateles한 HTTP 프로토콜을 사용함에 따라, 서버가 클라이언트를 식별할 수 있는 방법이 필요해졌고, 쿠키와 세션을 사용하게 되었다.
클라이언트가 서버에 요청
서버에서 쿠키 생성후, HTTP 헤더에 쿠키 포함시켜서 응답
: 브라우저가 종료되어도 쿠키 만료기간 전까지 클라이언트에서 보관
클라이언트 브라우저에 쿠키 존재시, 요쳥할 경우 HTTP 헤더에 쿠키 함께 보내서 요청
서버에서 쿠키를 읽어들여서 이전 상태 정보를 변경할 필요가 있을 경우, 쿠키를 갱신하고 변경된 쿠키를 HTTP 헤더에 포함시켜서 응답
세션 관리
: 로그인, 사용자 이름, 접속시간 등 서버가 알아야할 정보 저장
개인화
: 사용자에게 적절한 페이지 보여줄 수 있음
트래킹
: 사용자의 행동과 패턴 분석, 기록
사생활 침해
: 방문기록과 개인정보가 기록되므로 사생활 침해 우려가 있음
→ 웹 브라우저 자체에 쿠키 거부 기능 존재
보안에 취약
: 서버가 가지는 것이 아닌 사용자에게 저장됨으로 임의로 수정, 삭제, 탈취가 가능
쿠키 기반이지만, 사용자 정보 파일을 서버 메모리에 저장
→ 쿠키의 보안적 단점 보완
세션 ID : 클라이언트가 요청을 보내면, 해당 서버가 클라이언트에게 부여하는 유일한 ID
→ 웹 브라우저당 하나씩 생성하여 웹 컨테이너에 저장하고, 브라우저 종료시 소멸
⇒ 사용자 수 만큼 서버 메모리를 차지하므로 요즘은 토큰기반의 인증방식을 사용하는 추세 (JWT 등이 있다)
쿠키 | 세션 | |
---|---|---|
저장 위치 | 클라이언트의 브라우저 | 서버의 메모리 |
보안 | 보안에 취약 | 로컬에는 세션 ID만 저장하므로 상대적으로 우수 |
요청 속도 | 상대적으로 빠름 | 서버처리가 필요하므로 상대적으로 느림 |
라이프 사이클 | 브라우저 종료 후에도 만료기간까지는 정보 남아있음 | 브라우저 종료시에 만료기간과 관계 없이 삭제 |
http://www.ktword.co.kr/abbr_view.php?m_temp1=648https://hahahoho5915.tistory.com/32
https://hahahoho5915.tistory.com/32
https://developpaper.com/thoroughly-understand-session-cookie-token/