웹 프로그래밍/Servlet & JSP

Servlet 상태정보 유지(Cookie, ServletContext, HttpSession, HttpServletRequest)

kgvovc 2021. 3. 12. 15:39
반응형

상태정보 유지

웹에서 사용하는 HTTP 프로토콜의 통신 방식은 클라이언트와 서버 간의 연결을 클라이언트로부터 요청이 있을 때마다 매번 새롭게 연결하는 방식입니다. 요청이 있을 때마다 연결 작업이 새롭게 이루어지고, 서버가 클라이언트에게 응답을 보내는 즉시 끊어집니다. 이처럼 클라이언트와 서버 간에 연결상태가 유지되지 않는 통신 방식을 '무상태(Stateless)'라고 합니다.

 

무상태 통신 방식의 특징은 연결이 유지되지 않기 때문에 서비스를 요청한 클라이언트에 대한 정보가 유지되지 않습니다. 동일한 클라이언트의 요청이더라도 요청 단위로 연결이 맺어져서 이전의 작업은 지금의 연결 작업과는 아무런 관계가 없습니다. 그래서 클라이언트가 이전 요청에서의 처리결과를 계속해서 다른 요청에서도 사용하고 싶다면 서버 측이든, 클라이언트 측이든 어딘가에 저장해서 정보를 유지해야 합니다.

 

이처럼 클라이언트나 서버에 계속된 요청에서 사용할 수 있도록 저장한 정보들을 '상태정보(State Information)'라고 합니다.

 

다음은 상태정보 유지 기술들을 저장 위치와 저장 기간에 따라 분류한 것입니다.

 

저장 위치 분류

정보를 저장하는 위치에 따라 상태정보 유지 기술을 분류하면 다음과 같습니다.

 

  • 클라이언트 측에 저장 기술

    웹에서 클라이언트는 웹 브라우저를 의미합니다. 그래서 클라이언트 측에 저장한다는 것은 웹 브라우저에 저장하는 것을 의미합니다. 웹 브라우저가 종료되기 전까지 정보를 유지할 수도 있고, 또는 웹 브라우저가 종료된 이후에도 계속 유지하게 할 수도 있습니다. 이처럼 클라이언트 측에 정보를 유지하는 기술에는 쿠키(Cookie)가 있습니다. 다음은 서블릿에서 쿠키 기능이 있는 객체입니다.

     

    • javax.servlet.http.Cookie

 

 

  • 서버 측에 저장 기술

    서버 측에 저장한다는 것은 서버의 힙 메모리 영역에 만들어진 객체에 상태정보를 저장(등록)하는 것을 의미합니다. 상태정보가 저장된 객체가 힙 메모리 영역에 존재하는 한 등록된 상태정보는 계속해서 사용할 수 있습니다. 다음은 서블릿에서 서버 측에 상태정보를 저장할 수 있는 객체입니다.

     

    • javax.servlet.ServletContext
    • javax.servlet.http.HttpSession
    • javax.servlet.http.HttpServletRequest

 

 

유지 기간 분류

클라이언트나 서버 측에 저장된 정보들은 무한정 유지되는 것이 아니라 기간이 한정되어 있습니다. 정보가 저장되어 유지되는 기간을 기준으로 상태정보 유지 기술을 분류하면 다음과 같습니다.

 

  • 웹 애플리케이션 단위 유지

    웹 애플리케이션 단위로 유지한다는 것은 웹 애플리케이션이 서비스되고 있는 동안 유지하는 것을 의미합니다. 생명주기가 웹 애플리케이션과 같은 객체는 ServletContext입니다. ServletContext 객체는 웹 애플리케이션 서비스가 시작될 때 생성되고 종료될 때 소멸합니다. 그래서 ServletContext 객체에 상태정보를 저장하면 웹 애플리케이션이 서비스되고 있는 동안은 계속해서 사용할 수 있습니다.

     

    • javax.servlet.ServletContext

 

 

  • 클라이언트 단위 유지

    클라이언트 단위로 유지한다는 것은 클라이언트별로 구분해서 상태정보를 유지한다는 의미입니다. 예를 들어, A 클라이언트가 계속해서 사용하고자 하는 상태정보가 있는데, 이 상태정보를 다른 클라이언트는 사용할 수 없어야 할 때 클라이언트 단위로 유지해야 합니다. 대표적인 예가 로그인 작업입니다.

     

    쿠키는 클라이언트 측에 상태정보를 유지하는 기술이어서 당연히 클라이언트 단위로 상태정보가 유지되어 사용되며, 서버 측에서는 클라이언트별로 생성되는 HttpSession 객체를 통해 클라이언트 단위로 상태정보를 유지할 수 있습니다.

     

    • javax.servlet.http.Cookie

    • javax.servlet.http.HttpSession

       

 

  • 요청 단위 유지

    요청 단위로 유지한다는 것은 클라이언트의 서비스 요청 단위로 유지한다는 것입니다. 웹에서는 클라이언트로부터 요청이 있을 때마다 새로운 연결 작업이 이루어지며, 클라이언트로 응답이 이루어지면 연결은 해제됩니다. 이렇게 하나의 요청에서만 상태정보를 유지하고자 할 때 HttpServletRequest 객체를 통해 할 수 있습니다.

     

    • javax.servlet.http.HttpServletRequest
반응형