java 로 web application server 를 개발할때 주로 사용하는 was 로는 tomcat 과 jetty 가 있다.
이들은 사용자 세션 관리 환경을 제공하여 사용자별로 개인화된 데이터 관리가 가능하게끔 설계 되어 있다.
그리고 이들은 '서블릿 표준 세션 인터페이스'인 jakarta.servlet.http.HttpServletRequest 의 getSession() 함수를 이용하여 jakarta.servlet.http.HttpSession 의 인스턴스를 취할 수 있다.
그런데 위 표준 인터페이스 외에 다른 형태의 세션 인터페이스가 있는지 궁금하였고, gpt 에게 그것을 물어보게 되었는데 각 was 들은 표준 세션 인터페이스의 구현체로 별도의 내장 클래스가 존재 하는 것을 알게 되었다.
다음은 주요 웹 어플리케이션 서버들에 대한 내장 세션 클래스 목록이다.
서버 종류 | 세션 클래스 (일반적) | 비고 |
Tomcat | org.apache.catalina.session.StandardSession | 가장 널리 사용되는 오픈 소스 서버 |
Jetty | org.eclipse.jetty.server.session.Session | Eclipse 프로젝트에서 개발된 경량형 서버 |
Undertow | io.undertow.servlet.spec.HttpSessionImpl | WildFly의 기본 서블릿 컨테이너 |
Spring Boot 내장 서버 (Tomcat, Jetty, Undertow 등) | Spring Session에서 관리 | Spring Session을 이용하여 통합 관리 |
그 외에 GlassFish, Payara, WildFly(JBoss) 서버들이 있는데 위와 유사하다.
위 서버들의 세션 클래스들은 내장된 고유의 클래스들로써 표준 인터페이스를 구현한 구현체이기 때문에 해당 내장 객체를 개발자가 직접 제어하는 경우는 흔치 않다고 한다.
그래서 위에 나오는 서버들은 모두 '서블릿 표준 세션 인터페이스'를 사용하여 세션 객체에 접근하여 제어하면 된다.
하지만 '서블릿 표준 세션 인터페이스'를 지원하지 않아서 getSession() 사용이 불가한 was도 있다고 gpt가 알려주었다.
그래서 getSession() 함수가 불가한 was 또는 경우를 물어보니 다음의 경우는 사용이 불가하다고 한다.
getSession() 사용 불가 또는 제한
일반적으로 모든 Servlet 기반 WAS에서 지원되지만, 다음과 같은 경우 getSession()이 정상적으로 동작하지 않을 수 있습니다.
- Session 관리가 비활성화된 경우
- web.xml 또는 application.properties에서 session-config가 비활성화되어 있는 경우
- Spring Boot에서 server.servlet.session.timeout=0 설정 시
- Undertow가 Servlet 모드가 아닌 경우
- Undertow는 기본적으로 Non-Blocking 서버로 동작하며, servlet 모듈을 명시적으로 추가해야 getSession() 사용 가능
- Gradle에서 아래처럼 추가해야 함:
dependencies {implementation("io.undertow:undertow-servlet")}
- Netty 기반 서버 사용 시
- Netty는 Servlet 기반이 아니므로 getSession()을 직접 사용할 수 없음
- Micronaut, Helidon 등 Netty 기반 프레임워크에서는 getSession()이 없는 자체적인 세션 관리 방식 사용
위와 같은 was 환경들의 세션에 대해 조사한 이유는 사용자 세션을 제어하는 데에 공통된 인터페이스가 필요하게 되었고,
내가 지금까지 습관적으로 사용했던 'jakarta.servlet.http.HttpServletRequest.getSession(true)' 코드가 어디까지 허용되는지 궁금했었다.
앞으로도 그냥 별 생각없이 getSession() 하면 된다는 것을 알게 되었다. ^^
'Programing' 카테고리의 다른 글
오랜만의 serlvlet, jsp 삽질 - 2nd (0) | 2024.07.21 |
---|---|
오랜만의 servlet, jsp 삽질 (0) | 2024.07.20 |
웹서비스 가이드를 위한 온보딩 라이브러리 (사용자 가이드 툴) (0) | 2024.06.15 |
다시 초심으로 돌아갔다(눈뜬 장님이 된 기분) (0) | 2023.11.11 |