[java] Guice의 데이터베이스 연동

Guice는 자바의 의존성 주입(Dependency Injection) 프레임워크로, 개발자가 객체 간의 의존 관계를 설정하고 주입을 통해 객체를 생성하는 것을 도와줍니다. 이번 포스트에서는 Guice를 사용하여 데이터베이스와의 연동을 어떻게 할 수 있는지 살펴보겠습니다.

데이터베이스 연결 설정

먼저 데이터베이스에 연결하기 위한 설정을 만들어야 합니다. Guice에서는 Module이라는 인터페이스를 사용하여 의존성 주입 설정을 관리합니다. 아래는 데이터베이스 연결 설정을 위한 예제입니다.

public class DatabaseModule extends AbstractModule {
    @Override
    protected void configure() {
        bind(DatabaseConfig.class).toInstance(new DatabaseConfig("jdbc:mysql://localhost:3306/mydb", "username", "password"));
    }
}

위 예제에서는 DatabaseConfig라는 클래스를 바인딩하는데, 해당 클래스는 데이터베이스 연결에 필요한 정보를 담고 있습니다. bind 메서드를 사용하여 DatabaseConfig 클래스를 toInstance 메서드로 인스턴스화하여 바인딩합니다.

데이터베이스 연결 인터페이스

다음으로 데이터베이스와의 실제 연결을 담당할 인터페이스를 만들어야 합니다. 이 인터페이스는 Guice를 통해 주입되어 실제 데이터베이스 연결을 처리하는 구현체를 사용할 수 있도록 합니다. 아래는 데이터베이스 연결 인터페이스의 예제입니다.

public interface DatabaseConnection {
    void connect();
    void disconnect();
    // ...
}

위 예제에서는 connect 메서드와 disconnect 메서드를 정의한 인터페이스입니다. 구현체는 이 인터페이스를 구현하여 데이터베이스에 대한 실제 연결 및 연결 해제 작업을 수행합니다.

데이터베이스 연결 구현

마지막으로 데이터베이스 연결 인터페이스를 구현하는 클래스를 작성해야 합니다. 아래는 데이터베이스 연결 구현 예제입니다.

public class DatabaseConnectionImpl implements DatabaseConnection {
    private final DatabaseConfig config;

    @Inject
    public DatabaseConnectionImpl(DatabaseConfig config) {
        this.config = config;
    }

    @Override
    public void connect() {
        // 데이터베이스 연결 로직 구현
        // config 정보를 사용하여 연결 처리
    }

    @Override
    public void disconnect() {
        // 데이터베이스 연결 해제 로직 구현
    }
}

위 예제에서는 DatabaseConnection 인터페이스를 구현한 DatabaseConnectionImpl 클래스입니다. DatabaseConfig 객체를 생성자를 통해 주입 받아 사용합니다. @Inject 어노테이션을 사용하여 Guice에게 주입을 요청합니다.

Guice 모듈 등록

마지막으로 Guice 모듈에 위에서 만든 클래스들을 등록해야 합니다. 아래는 Guice 모듈 등록 예제입니다.

public class MyAppModule extends AbstractModule {
    @Override
    protected void configure() {
        // 데이터베이스 모듈 등록
        install(new DatabaseModule());
        
        // 데이터베이스 연결 인터페이스 바인딩
        bind(DatabaseConnection.class).to(DatabaseConnectionImpl.class);
    }
}

위 예제에서는 DatabaseModule을 Guice 모듈로 등록하고, DatabaseConnection 인터페이스와 DatabaseConnectionImpl 클래스를 바인딩합니다.

이제 Guice를 사용하여 데이터베이스와 연결할 수 있는 환경이 구성되었습니다. 이제 필요한 곳에서 DatabaseConnection을 주입 받아 사용할 수 있습니다. Guice는 의존성을 자동으로 주입하여 객체를 생성하므로, DatabaseConnectionImpl에 설정한 DatabaseConfig 객체도 자동으로 주입될 것입니다.