
서버와 클라이언트의 통신 프로토콜인 HTTP의 비연결성, 비상태성이라는 특징으로 인해 쿠키와 세션을 이용한다.
클라이언트가 서버에게 request를 보냈을 때 그 request에 맞는 response를 보낸 후에는 클라이언에 대해 알 수 없게 된다.
만약 쿠키와 세션을 사용하지 않는다면 웹 사이트에 로그인을 했음에도 페이지를 이동할 때마다 계속 로그인을 해야한다.
이러한 비연결성(요청에 대한 응답을 보내고 연결을 끊음), 비상태성(클라이언트의 정보를 유지하지 않음) 때문에 쿠키와 세션을 사용해서 사용자를 인증한다.
브라우저에 key-value 쌍으로 로컬에 저장되는 데이터 파일이며, 유효시간 내에서는 브라우저가 종료되어도 계속 유지된다.
세션 쿠키: 사용자가 사이트 탐색 시에 관련한 설정들과 선호사항을 저장하는 임시 쿠키. 브라우저를 닫는 순간 삭제된다. (유효기간 설정 X)
지속 쿠키: 지속쿠키는 세션쿠키와 다르게 삭제되지 않고 더 길게 유지가 가능하다. 지속쿠키는 디스크에 저장되며, 브라우저를 닫거나 컴퓨터를 재시작해도 남아닜다. 사용자 로그인 항상 유지와 같은 곳에 사용한다. (유효기간 설정 O)
세션은 쿠키를 이용하여 구현된다(새로운 세션이 생성되면, Spring은 Set-Cookie 헤더를 통해 클라이언트에게 세션 ID를 전달). 서버가 클라이언트를 구분하기 위해 응답에 쿠키를 포함할 때 sessionId를 부여하고 클라이언트는 쿠키에 sessionId를 저장해둔다.
클라이언트(사용자)의 정보를 브라우저에 저장하는 쿠키와 달리 세션은 클라이언트의 정보를 서버에 저장한다.
세션에는 유효기간이 있어 일정 시간 응답이 없다면 끊을 수 있고, 브라우저가 종료될 때 까지 인증상태를 유지할 수 있다.
사용자 정보를 서버에 두기 때문에 쿠키에 비하면 보안이 더 좋지만 서버에 저장하는 만큼 서버에 과부하를 줄 수 있고 성능저하의 요인이 된다.