쿠키
란 웹 서버가 웹 브라우저에게 보내는 작은 데이터 조각입니다. 웹 브라우저는 이 쿠키를 저장하고 다음에 같은 웹 서버에 요청을 보낼 때 쿠키를 함께 보냅니다.
쿠키
는 HTTP 프로토콜의 상태유지(stateful) 기능
을 제공합니다.
HTTP 프로토콜은 상태가 없는(stateless) 프로토콜
이기 때문에, 서버는 클라이언트의 이전 요청과 현재 요청이 연관되어 있는지 알 수 없습니다.
쿠키
를 사용하면, 서버는 클라이언트가 보낸 쿠키를 통해 클라이언트의 상태나 선호도 등을 파악할 수 있습니다. 예를 들어, 쿠키에 로그인 정보나 장바구니 정보 등을 저장할 수 있습니다.
간단하고 편리하게 클라이언트의 상태 정보를 저장하고 관리할 수 있습니다.
서버의 부하를 줄일 수 있습니다.
쿠키에 저장된 정보는 서버에 요청할 때마다 전송되므로, 서버에서 별도로 데이터베이스나 세션을 관리할 필요가 없습니다.
보안에 취약합니다.
쿠키는 평문으로 저장되고 전송되므로, 중간에 탈취되거나 변조될 수 있습니다. 또한, 쿠키에 저장된 정보는 클라이언트에서도 수정할 수 있으므로, 신뢰할 수 없습니다.
용량과 개수에 제한이 있습니다.
쿠키는 하나당 4KB 이하의 용량을 가지며, 도메인당 20개 이하의 쿠키만 저장할 수 있습니다. 따라서, 많은 양의 정보를 저장하기에는 부적합합니다.
쿠키는 문자열 형태로만 데이터를 저장할 수 있습니다.
네트워크 트래픽을 증가시킵니다.
쿠키는 서버에 요청할 때마다 전송되므로, 불필요한 데이터가 네트워크에 부하를 줄 수 있습니다.
세션
은 HTTP 프로토콜의 무상태성을 보완하기 위한 기술입니다.
HTTP 프로토콜은 클라이언트와 서버가 요청과 응답을 주고받은 후에 연결을 끊어버리기 때문에, 서버는 클라이언트의 상태를 알 수 없습니다. 이런 특성은 웹 서비스에서 로그인, 장바구니, 채팅 등의 기능을 구현하기 어렵게 만듭니다.
세션
은 서버에 클라이언트의 상태 정보를 저장하는 방법입니다.
세션
은 클라이언트가 처음 접속할 때 서버에 생성되고, 고유한 세션 ID
가 부여됩니다. 이 세션 ID
는 쿠키나 URL에 담겨서 클라이언트에게 전달됩니다.
클라이언트는 다시 요청을 보낼 때 세션 ID
를 함께 보내서 자신을 식별합니다. 서버는 세션 ID
를 통해 클라이언트의 정보를 찾아서 적절한 응답을 줍니다.
세션을 통해 HTTP 상태유지를 하는 장점은 다음과 같습니다.
쿠키보다 보안성이 높습니다.
쿠키는 클라이언트에 저장되기 때문에 변조나 탈취될 위험이 있습니다. 세션은 서버에 저장되기 때문에 외부에서 접근하기 어렵습니다.
쿠키보다 용량 제한이 없습니다.
쿠키는 한 도메인당 4KB 이하의 데이터만 저장할 수 있습니다. 세션은 서버의 메모리나 디스크에 저장할 수 있기 때문에 용량 제한이 없습니다.
쿠키보다 다양한 데이터 타입을 저장할 수 있습니다.
쿠키는 문자열 형태로만 데이터를 저장할 수 있는 것에 반해 세션은 객체나 배열 등의 복잡한 데이터 타입도 저장할 수 있습니다.
세션을 통해 HTTP 상태유지를 하는 단점은 다음과 같습니다.
서버의 부하가 증가합니다.
세션은 서버의 자원을 사용하기 때문에 많은 세션이 생성되면 서버의 메모리나 디스크 공간이 부족해질 수 있습니다.
네트워크 비용이 증가합니다.
세션 ID를 전달하기 위해서는 쿠키나 URL에 추가적인 데이터를 붙여야 합니다. 이는 네트워크 트래픽을 증가시킵니다.
분산 환경에서 관리하기 어렵습니다.
여러 대의 서버가 하나의 웹 서비스를 제공하는 경우, 각 서버마다 세션 정보를 동기화해야 합니다. 이는 복잡한 로직과 추가적인 비용을 발생시킵니다.