서버와 클라이언트의 관계를 유지하는 웹서비스의 HTTP 프로토콜에서는 Connectionless Protocol 이라는 규칙이 있다.
한 번의 요청에 대해서 응답한 후 바로 연결을 해제하는 것이 Connectionless Protocol 인데, 실제 요청이 몇 천, 몇 만개되는 웹 서비스에서는 요청을 그때그때 해제하지 않고 유지하게 되면 서버에 과부하가 걸리게 되기 때문이다.
Connectionless Protocol로 인해 서버의 과부하를 막을 수는 있지만, 매번 페이지를 이동할 때마다 로그인을 다시 하거나,상품을 선택했는데 구매 페이지에서 선택한 상품의 정보가 없거나 하는 등의 일이 발생할 수 있다.
따라서 서버는 클라이언트가 누구인지 계속 인증을 해줘야 한다. 하지만 그것은 매우 귀찮고 번거로운 일이다.
그런 번거로움을 해결하는 방법이 바로 쿠키와 세션이다.
그러한 기능을 구현하기 위해, Connectionless Protocol을 지키고 자원의 효율적 관리와 정보 유지를 위해 세션과 쿠키를 사용한다.
세션 : 서버에서 연결 정보를 관리 (보안에 더 강하고 많이 쓰임)
쿠키 : 클라이언트에서 연결 정보를 관리 (세션보다 비교적 간단하고, 서버의 부화를 줄이기 위해 사용)
대안점은?
이런 보안 문제 때문에 로그인 같은 예민한 정보를 저장할 때는 세션을 이용한다.
쿠키
세션
이에 대한 문제로 최근에는 토큰 기반의 인증 방식을 사용하는 추세이다.
쿠키와 세션을 사용하는 이유?
HTTP 프로토콜의 특징이자 약점을 보완하기 위해서 사용한다.
쿠키(Cookie)
서버가 사용자의 웹 브라우저에 저장하는 데이터
세션(Session)
일정 시간 동안 같은 사용자(브라우저)로부터 들어오는 일련의 요구를 하나의 상태로 보고, 그 상태를 유지시키는 기술이다.
쿠키와 세션의 차이
쿠키와 세션은 비슷한 역할을 하며, 동작 원리도 비슷하다. 그 이유는 세션도 결국 쿠키를 사용하기 때문이다.
큰 차이점은 사용자의 정보가 저장되는 위치이다. 쿠키는 서버의 자원을 전혀 사용하지 않으며, 세션은 서버의 자원을 사용한다.
라이프 사이클은 쿠키도 만료기간이 있지만 파일로 저장되기 때문에 브라우저를 종료해도 정보가 유지될 수 있다. 또한 만료기간을 따로 지정해 쿠키를 삭제할 때까지 유지할 수도 있다.
반면에 세션도 만료기간을 정할 수 있지만, 브라우저가 종료되면 만료기간에 상관없이 삭제된다.