[java] Guice를 활용한 서블릿 세션(Session) 관리

서블릿 세션은 웹 애플리케이션에서 사용자의 상태를 유지하고 다양한 정보를 저장하는 데 사용됩니다. Guice는 의존성 주입(Dependency Injection) 프레임워크로, 서블릿 세션 관리를 편리하게 구현할 수 있도록 도와줍니다.

이번 블로그 포스트에서는 Guice를 활용하여 서블릿 세션을 관리하는 방법에 대해 알아보겠습니다.

Guice를 활용한 의존성 주입 설정

먼저, Guice를 사용하기 위해 프로젝트에 아래 의존성을 추가해야 합니다.

<dependency>
    <groupId>com.google.inject</groupId>
    <artifactId>guice</artifactId>
    <version>4.2.3</version>
</dependency>

그리고 Guice를 사용하여 세션을 관리할 세션 매니저 클래스를 만들어보겠습니다. 여기서는 SessionManager라는 이름을 사용합니다.

public class SessionManager {
    private Map<String, Object> sessionMap;

    @Inject
    public SessionManager() {
        sessionMap = new HashMap<>();
    }

    public void put(String key, Object value) {
        sessionMap.put(key, value);
    }

    public Object get(String key) {
        return sessionMap.get(key);
    }

    public void remove(String key) {
        sessionMap.remove(key);
    }
}

위의 코드에서 SessionManager 클래스는 Map을 사용하여 세션 데이터를 저장하고 관리합니다. put, get, remove 메서드를 통해 세션 데이터를 조작할 수 있습니다.

Guice 모듈 설정하기

다음으로 Guice 모듈을 설정해야 합니다. Guice 모듈은 의존성 주입을 위한 바인딩과 설정을 정의하는 곳입니다. 이를 위해 아래와 같은 모듈 클래스를 생성해보겠습니다.

public class AppModule extends AbstractModule {
    @Override
    protected void configure() {
        bind(SessionManager.class).in(Singleton.class);
    }
}

위의 코드에서 AppModule 클래스는 AbstractModule을 상속받아 Guice 모듈을 정의합니다. configure 메서드에서 SessionManager 클래스를 Singleton scope로 바인딩하고 있습니다. 이렇게 하면 단일 인스턴스를 유지하면서 세션 관리를 할 수 있습니다.

Guice를 통한 세션 주입

마지막으로, Guice를 사용하여 서블릿에서 세션을 주입받아 사용할 수 있도록 설정해야 합니다. 이를 위해 ServletModule을 상속받은 아래와 같은 모듈 클래스를 생성해보겠습니다.

public class ServletConfigModule extends ServletModule {
    @Override
    protected void configureServlets() {
        serve("/example").with(ExampleServlet.class);
    }
}

위의 코드에서 ServletConfigModule 클래스는 ServletModule을 상속받아 서블릿 관련 설정을 정의합니다. configureServlets 메서드에서 /example 경로에 대한 요청을 ExampleServlet 클래스로 처리하도록 설정하고 있습니다. 이때, ExampleServlet 클래스에서 SessionManager를 주입받아 사용할 수 있습니다.

결과 확인

모든 설정이 완료되었으면 실행해보겠습니다. ExampleServlet 클래스에서 SessionManager를 주입받아 사용하여 세션 데이터를 조작하는 로직을 작성하고, 웹 브라우저를 통해 /example 경로에 접속하여 동작을 확인해보세요.

위의 예제에서는 Guice를 활용하여 서블릿 세션을 편리하게 관리하고 주입하는 방법을 알아보았습니다. Guice는 다양한 의존성 주입 기능을 제공하므로, 프로젝트에 적절하게 활용하여 개발 생산성을 높일 수 있습니다.

참고 자료: