Posts 쿠키와 세션의 차이는 무엇일까?
Post
Cancel

쿠키와 세션의 차이는 무엇일까?


쿠키와 세션의 차이는 무엇일까?


🎯 Stateless과 Stateful한 프로토콜

HTTP 프로토콜 통신의 경우 클라이언트와 서버가 서로 데이터를 주고받을 때, 그 당시에만 연결을 진행하고 모든 응답이 완료되면 끊어진 상태가 되는 비연결성의 특징과, 클라이언트 측의 상태 정보를 보관하지 않는 무상태성(Stateless)의 특징을 가집니다. 즉 서버는 그저 요청이 오면 응답을 보내는 역할이며, 클라이언트 상태와는 독립적으로 동작한다는 특성이 있습니다.

반대로 Stateful한 대표적인 프로토콜에는 TCP를 들 수 있습니다. 클라이언트-서버 간 통신 전에 사전 연결 과정으로 TCP handshake 과정을 거치는데, 이 때 서버는 클라이언트의 세션 정보도 함께 저장합니다. 세션 상태에 따라서, 서버의 응답도 달라지는 구조인 것입니다.

그러나 클라이언트의 정보는 계속해서 쓰여야 하는 경우가 있습니다. 예를 들면 로그인을 진행한 후 특정한 다른 서비스를 이용하는데, 로그인 정보가 어딘가에 담겨있지 않다면 매번 로그인(인증)을 해야 하는 상황이 발생할 수도 있습니다.

그러므로 클라이언트의 상태 정보를 저장해야 할 필요가 있을 때, 쿠키와 세션을 활용해서 Stateful 한 동작을 구현할 수 있도록 합니다.


📜 쿠키(cookie)

쿠키는 키-값 형태로 클라이언트의 정보를 로컬에 저장하는 역할을 합니다. 브라우저, 즉 클라이언트 측에 저장이 되는 특성을 가집니다.

단, 쿠키의 경우 하나의 도메인 당 20개, 쿠키 하나 당 4KB의 용량 제한을 가집니다. 또한 쿠키가 지속되는 유효 기간을 포함할 수도 있습니다. (expires 속성)

예를 들어 로그인 정보가 쿠키에 저장되어 있는 경우, 페이지에서 request 요청을 할 때 쿠키도 헤더에 같이 포함되어 서버로 전송되고, 로그인이 계속 유지될 수 있습니다.


📜 세션(session)

세션도 클라이언트의 상태 정보 유지를 위해 존재한다는 점에서는 쿠키와 동일합니다. 그러나 세션은 주로 서버 측에 저장이 된다고 볼 수 있습니다. 즉 서버의 자원을 사용하게 됩니다. 또한 브라우저가 종료될 경우 사라집니다.

세션은 쿠키와는 다르게, 서버에서 부여받은 세션 ID 형태로 존재하므로 쿠키와 같이 곧바로 참조하는 것이 아니라, 서버에서 세션 ID값으로 다시 데이터를 참조해야 합니다. 따라서 성능상으로는 쿠키가 이점을 보입니다.

또한 서버가 허용하는 한, 세션의 경우 별도의 용량 제한은 존재하지 않습니다.

그러나 쿠키의 경우 브라우저(클라이언트 측)에 그대로 저장이 되어 있으므로, 노출될 수 있다는 단점이 존재합니다. 따라서 노출되면 위험하거나 민감한 정보들은 세션에 저장하는 것이 좋습니다.