4.3 쿠키와 세션 이해하기
클라이언트에서 보내는 요청에는 한 가지 큰 단점이 있습니다. 바로 누가 요청을 보내는지 모른다는 것입니다. 물론 요청을 보내는 IP 주소나 브라우저의 정보를 받아올 수는 있습니다. 하지만 여러 컴퓨터가 공통으로 IP 주소를 갖거나 한 컴퓨터를 여러 사람이 사용할 수도 있습니다.
그렇다면 로그인을 구현하면 되지 않느냐고 생각할 수도 있습니다. 정답입니다. 하지만 로그인을 구현하려면 쿠키와 세션을 알고 있어야 합니다. 여러분이 웹 사이트에 방문해서 로그인할 때 내부적으로는 쿠키와 세션을 사용하고 있습니다. 로그인한 후에는 새로 고침(새로운 요청)을 해도 로그아웃되지 않지요? 바로 클라이언트가 서버에 여러분이 누구인지를 지속적으로 알려주고 있기 때문입니다.
여러분이 누구인지 기억하기 위해 서버는 요청에 대한 응답을 할 때 쿠키라는 것을 같이 보냅니다. 쿠키는 유효 기간이 있으며 name=zerocho와 같이 단순한 ‘키-값’의 쌍입니다. 서버로부터 쿠키가 오면, 웹 브라우저는 쿠키를 저장해뒀다가 다음에 요청할 때마다 쿠키를 동봉해서 보냅니다. 서버는 요청에 들어 있는 쿠키를 읽어서 사용자가 누구인지 파악합니다.
브라우저는 쿠키가 있다면 자동으로 동봉해서 보내주므로 따로 처리할 필요가 없습니다. 서버에서 브라우저로 쿠키를 보낼 때만 여러분이 코드를 작성해 처리하면 됩니다.
▲ 그림 4-14 쿠키
즉, 서버는 미리 클라이언트에 요청자를 추정할 만한 정보를 쿠키로 만들어 보내고, 그다음부터는 클라이언트로부터 쿠키를 받아 요청자를 파악합니다. 쿠키가 여러분이 누구인지 추적하고 있는 것입니다. 개인정보 유출 방지를 위해 쿠키를 주기적으로 지울 것을 권고하는 것은 바로 이러한 이유 때문입니다.
쿠키는 요청의 헤더(Cookie)에 담겨 전송됩니다. 브라우저는 응답의 헤더(Set-Cookie)에 따라 쿠키를 저장합니다.