[java] Guice를 사용하여 Java 서블릿에서 데이터베이스 연결 설정하기

이번 포스트에서는 Java 서블릿에서 Guice를 사용하여 데이터베이스 연결 설정을하는 방법에 대해 알아보겠습니다. Guice는 Google에서 제공하는 의존성 주입 프레임워크로, 객체 간의 의존성을 관리하는 데 도움이 됩니다.

Guice 설정하기

먼저, 프로젝트에 Guice를 추가해야 합니다. Maven을 사용한다면 pom.xml 파일에 다음 종속성을 추가합니다.

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

Gradle을 사용한다면 build.gradle 파일에 다음 종속성을 추가합니다.

implementation 'com.google.inject:guice:4.2.3'

데이터베이스 연결 설정하기

먼저, 데이터베이스 연결을 처리할 클래스를 생성해야 합니다. 다음과 같이 DatabaseConnection 클래스를 작성해보겠습니다.

public class DatabaseConnection {
    private Connection connection;

    public DatabaseConnection() {
        // 데이터베이스 연결 설정을 여기에 작성합니다.
    }

    public Connection getConnection() {
        return connection;
    }
}

이제 Guice의 AbstractModule 클래스를 상속하는 모듈을 작성합니다. 이 모듈은 데이터베이스 연결 설정을 담당합니다. 다음과 같이 DatabaseModule을 작성해보겠습니다.

public class DatabaseModule extends AbstractModule {
    @Override
    protected void configure() {
        bind(DatabaseConnection.class).toInstance(new DatabaseConnection());
    }
}

configure 메소드에서 bind 메소드를 사용하여 DatabaseConnection 클래스를 DatabaseConnection 인스턴스에 바인딩합니다.

Guice Servlet 설정하기

이제 Servlet의 GuiceServletContextListener 클래스를 상속하는 클래스를 작성하여 Guice를 설정해야 합니다. 다음과 같이 MyServletConfig 클래스를 작성해보겠습니다.

public class MyServletConfig extends GuiceServletContextListener {
    @Override
    protected Injector getInjector() {
        return Guice.createInjector(new DatabaseModule());
    }
}

GuiceServletContextListener 클래스를 상속하고 getInjector 메소드를 구현합니다. 이 메소드에서 Guice의 createInjector 메소드를 사용하여 DatabaseModule을 등록한 인젝터를 생성합니다.

이제 web.xml 파일에 서블릿 및 Guice 설정을 추가해야 합니다. 다음과 같이 web.xml 파일을 수정해보겠습니다.

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns="http://java.sun.com/xml/ns/javaee"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
         version="3.0">
    <display-name>MyServletApp</display-name>
    
    <listener>
        <listener-class>com.example.MyServletConfig</listener-class>
    </listener>
    
    <servlet>
        <servlet-name>my-servlet</servlet-name>
        <servlet-class>com.example.MyServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>my-servlet</servlet-name>
        <url-pattern>/my-servlet</url-pattern>
    </servlet-mapping>
</web-app>

<listener> 태그를 사용하여 MyServletConfig 클래스를 등록하고, <servlet> 태그를 사용하여 사용자 정의 서블릿인 MyServlet을 등록합니다.

데이터베이스 연결 사용하기

이제 MyServlet에서 Guice를 사용하여 데이터베이스 연결을 주입받아 사용할 수 있습니다. 다음과 같이 MyServlet을 작성해보겠습니다.

public class MyServlet extends HttpServlet {
    @Inject
    private DatabaseConnection databaseConnection;

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 데이터베이스 연결 사용 예시
        Connection connection = databaseConnection.getConnection();
        // 여기서부터 데이터베이스 연결을 사용하여 작업을 수행합니다.
    }
}

@Inject 어노테이션을 사용하여 DatabaseConnection 객체를 주입받습니다. databaseConnection을 사용하여 데이터베이스 연결을 얻고 작업을 수행할 수 있습니다.

이제 Java 서블릿에서 Guice를 사용하여 데이터베이스 연결 설정을 할 수 있습니다. Guice를 사용하면 객체 간의 의존성을 더욱 관리하기 쉽고 유지보수하기도 편리해집니다.

참고 자료