[java] Guice를 이용한 Java 서블릿에서 세션 공유하기

Guice는 Java에서 의존성 주입(Dependency Injection)을 쉽게 구현할 수 있는 프레임워크입니다. 이를 이용하면 Java 서블릿에서 세션을 쉽게 공유할 수 있습니다. 이번 포스트에서는 Guice를 사용하여 Java 서블릿에서 세션 공유하는 방법에 대해 알아보겠습니다.

Guice 의존성 추가

먼저, 프로젝트에 Guice를 추가해야 합니다. Maven을 사용한다면 pom.xml 파일에 다음과 같이 의존성을 추가합니다:

<dependencies>
  <!-- Guice -->
  <dependency>
    <groupId>com.google.inject</groupId>
    <artifactId>guice</artifactId>
    <version>4.2.3</version>
  </dependency>
</dependencies>

Gradle을 사용하는 경우, build.gradle 파일에 다음과 같이 의존성을 추가합니다:

dependencies {
  // Guice
  implementation 'com.google.inject:guice:4.2.3'
}

Guice 모듈 생성

다음으로, Guice 모듈을 생성해야 합니다. Guice 모듈은 의존성 주입을 처리하는 설정 파일입니다. 아래와 같이 SessionModule.java 파일을 생성합니다:

import com.google.inject.AbstractModule;
import javax.servlet.http.HttpSession;

public class SessionModule extends AbstractModule {
  private final HttpSession session;

  public SessionModule(HttpSession session) {
    this.session = session;
  }

  @Override
  protected void configure() {
    bind(HttpSession.class).toInstance(session);
  }
}

위 코드에서는 HttpSession 객체를 Guice의 인스턴스에 바인딩합니다.

Guice를 이용한 서블릿 생성

마지막으로, Guice를 이용하여 서블릿을 생성하고 세션을 공유합니다. 아래와 같이 MyServlet.java 파일을 생성합니다:

import javax.inject.Inject;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class MyServlet extends HttpServlet {
  private final HttpSession session;

  @Inject
  public MyServlet(HttpSession session) {
    this.session = session;
  }

  @Override
  protected void doGet(HttpServletRequest request, HttpServletResponse response) {
    // 세션 사용 예시
    String username = (String) session.getAttribute("username");

    // 세션에 값을 저장
    session.setAttribute("username", "John Doe");

    // 출력
    response.getWriter().println("Hello, " + username);
  }
}

위 코드에서는 Guice의 @Inject 어노테이션을 이용하여 HttpSession 객체를 주입받아 사용합니다. doGet() 메소드에서는 세션을 사용하여 값을 저장하고 읽어올 수 있습니다.

Guice 설정

마지막으로, Guice를 설정해야 합니다. 웹 애플리케이션의 web.xml 파일에서 Guice의 GuiceServletContextListener 클래스를 구현한 리스너를 등록합니다:

<web-app>
  <!-- ... -->

  <listener>
    <listener-class>com.google.inject.servlet.GuiceServletContextListener</listener-class>
  </listener>

  <!-- ... -->
</web-app>

결론

이제 Guice를 이용하여 Java 서블릿에서 세션을 공유하는 방법을 알아보았습니다. Guice를 사용하면 의존성 주입을 통해 객체를 쉽게 공유할 수 있으며, 코드의 유지 보수성과 테스트 용이성을 향상시킬 수 있습니다.

참고 자료