Skip to content

Instantly share code, notes, and snippets.

@taekwon-dev
Created May 18, 2022 01:11
Show Gist options
  • Save taekwon-dev/a25f093b2f32a44bfa595aae2a234386 to your computer and use it in GitHub Desktop.
Save taekwon-dev/a25f093b2f32a44bfa595aae2a234386 to your computer and use it in GitHub Desktop.

[5] Servlet Scopes

Servlet, Servlet Container
How the Servlet Container Handles a request
How the Servlet Container Handles multithreading
How to maintain a user state - HttpSession
Servlet Scopes ◀︎ 현재 글

HttpSession 가 특정 기간 내에서만 유효하고, 설정된 기간이 만료되면 HttpSession 객체는 소멸되어 더 이상 해당 객체에 저장된 데이터에 접근 및 활용할 수 없다. 만약 인증 대상이 저장되어 있었다면, 만료 시점 이후에는 로그인 (인증)을 다시 해야 하는 것이다. HttpSession 객체의 생성 ~ 소멸 과정을 우리는 Session Scope 로 표현할 수 있다.

Scope is used to specify the lifespan of an object. Any data stored in object in persisted throughout the scope of object and this data can be accessed any time within the scope as per requirement

위에서 예로 든 HttpSession 을 통해서 Scope 정의를 분석해보자.

Scope 는 객체의 생명주기라고 표현할 수 있다. 객체 어떤 데이터가 저장되어 있다고 가정 할 때 우리는 이 객체가 소멸되기 전 까지만 접근 및 활용할 수 있을 것이다. 따라서 Scope 에서 가장 중요한 키워드는 the lifespan of an object , any data stored in object , this data can be accessed 라고 생각한다.

위 키워드를 기반으로, Scope 를 다룰 때 객체에서 다룰 데이터의 특징과 데이터가 저장된 객체의 생명주기 특징을 모두 고려해서 적절한 Scope 를 찾아서 활용해야 한다.

서블릿 컨테이너는 주요한 Scope 가 세 가지가 있다.

- Request Scope - `HttpServletRequest`  
- Session Scope - `HttpSession`  
- Context Scope - `ServletContext`  

image [ 그림 1 ]

image [ 그림 2 ]

Scope 의 범위를 [그림 1] 에서 확인할 수 있다. 범위가 긴 순서대로 특징을 살펴보자. Context Scope 는 서블릿 컨테이너가 구동 ~ 종료되는 사이에 유효하다. 이런 특징으로 상대적으로 가장 긴 생명주기를 갖는다. 그리고 여러명의 클라이언트 또는 여러 번의 요청 맥락에서도 모두 접근 가능한 데이터가 저장되는 공간이다.

Session ScopeHttpSession 주제인 이전 글에서 언급된 것 처럼 서블릿 컨테이너 설정 파일에서 유효 기간을 설정할 수 있고, 임의로 HttpSession 을 소멸 시키지 않는다면 해당 유효 기간이 만료될 때 까지 유효하다. 세션 객체 마다 고유한 세션 ID를 갖고 있고 따라서 주로 개별 클라이언트의 식별 값을 저장하여 인증 상태를 유지하는 것에 자주 활용된다.

클라이언트의 요청에 대해서 서블릿 컨테이너는 스레드를 할당해서 HttpServletRequest , HttpServletResponse 객체를 생성하고, 클라이언트 요청을 처리할 적절한 서블릿을 찾아 해당 서블릿의 service() 메소드 파라미터로 두 객체를 전달한다. 이 후 요청을 처리하고 응답 값을 생성해서 클라이언트에 응답한다. 이 때 요청 ~ 응답 전 사이가 Request Scope 로 볼 수 있다.


서블릿, 서블릿 컨테이너를 주제로한 이번 시리즈가 마무리 됐다. 각 주제 별로 상세한 내용을 하나씩 다루기 보다는 서블릿, 서블릿 컨테이너를 크게 훑은 느낌으로 진행했다. 이번 시리즈를 시작하게 된 이유는 시리즈 서두에서 언급한 것 처럼 서블릿, 서블릿 컨테이너, 서블릿 필터 등 서블릿과 관련한 토픽이 Spring MVC , Spring Security 를 다루는 과정에서 근간이 된다고 생각했고, 실제로 큰 도움이 됐기 때문이다. 다음 글의 주제는 이 번 시리즈를 기반으로한 두 프레임워크 내부 동작 원리 분석이 될 것 같다. Java / Spring 진영에 계신 모든 분들 파이팅 !

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment