쿠키나 세션에 대해 알아보기 전에, 왜 이러한 보조 장치가 필요했는지에 대한 이해가 필요하다. 대부분 사용하는 HTTP 프로토콜은 기본적으로 상태를 저장하지 않는다. 동일한 사용자가 서버에게 요청을 하더라도 이 요청이 이전에 접근했던 사용자인지, 새로운 사용자인지 구분할 수 있는 정보가 없다. 하지만 서비스를 개발하다보면 사용자에게 맞는 서비스를 제공해야 하는 경우가 발생하기 때문에 이를 보완하기 위해 쿠키나 세션같은 다른 장치가 필요하다.

연결을 계속해서 유지하는 방법도 있으나 이는 서버의 성능을 떨어뜨리는 방식이기도 하면서, 모든 경우에 적용할 수는 없다.

Cookie(쿠키)

사용자를 식별하기 위한 방법으로 사용자의 PC 에 특정 정보를 기록해둔다. 이 방식을 쿠키라고 한다.

결국은 서비스하는 곳에서 사용자를 식별하기 위한 정보이므로 서비스를 제공하는 서버에서 사용자에 대한 정보를 생성한 후 이를 클라이언트에서 저장한다. 이 방식으로 서버는 사용자 식별 정보를 저장하는 과정없이 사용자를 구분할 수 있게 된다.

  1. 클라이언트가 요청한다.
  2. 웹 서버는 쿠키를 생성한다.
  3. 클라이언트에게 응답 시 쿠키도 함께 응답한다.
  4. 클라이언트는 쿠키를 저장하고 있다가 이후의 요청에 쿠키도 같이 전송한다.
  5. 서버는 클라이언트에게 온 쿠키를 가지고 사용자를 식별한다.

하지만 쿠키는 크기나 개수 제한도 있고, 로컬 PC 에 저장되기 때문에 보안에 취약하여 민감한 정보를 저장할 수 없다.

Session(세션)

쿠키를 이용하여 사용자의 PC 에 정보를 저장하는 것은 동일하나, 두 가지 차이점이 있다.

브라우저의 유지 여부에 따라 세션이 유지되는 특성을 이용하여 주로 로그인 여부를 저장하는 경우에 사용한다. 또한 쿠키는 로컬 PC 에서 정보를 확인할 수 있으나 세션은 세션 아이디만 저장한다. 쿠키보다는 보안면에서 세션이 더 우수하다.

  1. 클라이언트가 요청한다.
  2. 웹 서버는 세션 아이디가 있는지 확인한다.
  3. 세션 아이디가 없으면 생성 후 서버에 저장하고, 있으면 세션 아이디를 식별한다.
  4. 클라이언트에게 응답한다.