티스토리 뷰

1) 상태정보란?

웹에서의 상태 유지 기술

  • HTTP프로토콜은 상태 유지가 안되는 프로토콜입니다이전에 무엇을 했고, 지금 무엇을 했는지에 대한 정보를 갖고 있지 않습니다웹 브라우저(클라이언트)의 요청에 대한 응답을 하고 나면 해당 클라이언트와의 연결을 지속하지 않습니다.
  • 상태 유지를 위해 Cookie Session기술이 등장합니다, 클라이언트가 두 번째, 세 번째 요청을 했을 때에는 이 클라이언트가 누구이구나라는 정보를 알게 한다거나 등등 여러 가지의 이런 상태를 유지해 주기 위한 기술인 Cookie Session이 등장하게 됩니다.

쿠키(Cookie)와 세션(Session)

  • 쿠키
    • 사용자 컴퓨터에 저장. 유지해야 할 정보를 사용자 컴퓨터에 저장하게 하는 기술
    • 저장된 정보를 다른 사람 또는 시스템이 볼 수 있는 단점
    • 유효시간이 지나면 사라짐
  • 세션
    • 서버에 저장
    • 서버가 종료되거나 유효시간이 지나면 사라집니다.

쿠키(Cookie) 동작 이해 1/2

  • 쿠키가 어떻게 동작을 하냐면 일단 클라이언트가 서버 쪽에 요청을 보냅니다.
  • 이때 유지해야 될 정보가 있다면 서버는 유지할 정보를 가지고 쿠키를 생성하게 될 겁니다이때 쿠키는 이름과 값으로 구성이 되어 있고 유지 시간 등의 정보를 가지게 됩니다.
  • 이렇게 만들어진 쿠키는 반드시 응답 결과에 포함되어서 클라이언트한테 보내져야 됩니다그러면 만들어진 쿠키는 클라이언트가 갖고 있게 될 겁니다.

쿠키(Cookie) 동작 이해 2/2

  • 그리고 나서 서버에게 뭔가를 요청할 때, 갖고 있는 쿠키를 항상 같이 포함시켜서 서버에게 보냅니다.
  • 그럼 서버는 내가 저번에 만들어준 쿠키가 있나 이 부분을 찾아서 검사를 하고 해당 쿠키가 있다면 해당 사용자가 전에 접속한 사실이나 해당 사용자가 유지해야 되는 정보가 무엇인지 알아낼 수 있게 됩니다.
  • 이런 동작을 거쳐서 쿠키는 이용할 수가 있습니다.

세션의 동작 이해 1/2

  • 우선 클라이언트가 요청을 합니다.
  • 그리고 유지해야 되는 정보가 있다면 서버는 세션키를 만듭니다.
  • 그리고 세션키를 이용한 저장소를 하나 생성합니다. 이 저장소에다가 유지해야 되는 정보들을 저장하게 돼요그런데 저장소만 만들어놓고 그냥 끝나버리면 다시 클라이언트가 요청을 하게 됐을 때 이 클라이언트의 저장소가 어떤 곳인지 서버는 알아낼 길이 없겠죠.
  • 그렇기 때문에 서버는 세션키를 가지고 있는 쿠키를 하나 만듭니다.
  • 그리고 세션키를 담은 이 쿠키를 클라이언트한테 응답으로 보냅니다.

세션의 동작 이해 2/2

  • 그러면 이 클라이언트는 다시 요청할 때마다 이 서버가 만들어서 보낸 쿠키를 가지고 매번 들어올 겁니다.
  • 그럼 서버는 이 쿠키로부터 세션키를 얻어내겠죠그리고 이 세션키에 해당하는 저장소를 찾아서 이 저장소에 들어있는 정보를 사용하거나 또는 저장소에다가 원하는 정보를 저장하는 이런 일을 수행을 하게 됩니다.
  • 이때 세션의 정보를 담기 위해 생성되는 객체가 HttpSession이라는 객체를 이용하게 되는 거죠.

생각해보기

  • HTTP프로토콜은 상태가 유지 안 되는 프로토콜이라고 합니다. 웹 클라이언트가 서버와 연결을 지속하지 않기 때문인데요. 상태가 유지되는 프로토콜엔 어떤 것이 있을까요?

참고 자료

[참고링크] Cookie (Servlet API Documentation)
https://tomcat.apache.org/tomcat-5.5-doc/servletapi/javax/servlet/http/Cookie.html

[참고링크] Interface HttpSession
https://tomcat.apache.org/tomcat-5.5-doc/servletapi/javax/servlet/http/HttpSession.html

[참고링크] Cookies in Servlet      https://www.javatpoint.com/cookies-in-servlet

[참고링크] HttpSession interface https://www.javatpoint.com/http-session-in-session-tracking

 

Comments