Spring Boot를 이용한 다중 데이터베이스 연결

  • 3 minutes to read

안녕하세요, 오늘은 Spring Boot를 이용하여 여러 데이터베이스에 연결하는 방법에 대해 이야기하려고 합니다. 특히, SQL Server, MySQL, PostgreSQL 세 가지 데이터베이스에 연결하는 방법을 설명할 예정입니다.

필요한 의존성 추가

먼저, 프로젝트에 필요한 모든 데이터베이스 드라이버와 Spring Data JPA를 포함하도록 pom.xml 파일을 업데이트해야 합니다.

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    <dependency>
        <groupId>com.microsoft.sqlserver</groupId>
        <artifactId>mssql-jdbc</artifactId>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
    </dependency>
    <dependency>
        <groupId>org.postgresql</groupId>
        <artifactId>postgresql</artifactId>
    </dependency>
</dependencies>

데이터베이스 연결 설정

다음으로, 각 데이터베이스에 연결하기 위한 설정을 application.properties 파일에 추가합니다. 이 예에서는 SQL Server를 기본(Primary) 데이터베이스로, MySQL과 PostgreSQL을 추가로 연결하도록 설정했습니다.

# Primary (SQL Server) database
spring.datasource.url=jdbc:sqlserver://localhost:1433;databaseName=mydb1
spring.datasource.username=username1
spring.datasource.password=password1

# Secondary (MySQL) database
app.datasource2.url=jdbc:mysql://localhost:3306/mydb2
app.datasource2.username=username2
app.datasource2.password=password2

# Tertiary (PostgreSQL) database
app.datasource3.url=jdbc:postgresql://localhost:5432/mydb3
app.datasource3.username=username3
app.datasource3.password=password3

데이터 소스 및 JPA 설정

이제 각 데이터 소스에 대한 설정을 위한 설정 클래스를 생성합니다. 이 클래스에서는 각 데이터베이스의 데이터 소스를 정의하고, 해당 데이터 소스를 사용하는 JPA 리포지토리를 위한 설정을 제공합니다.

@Configuration
public class DataSourceConfig {

    @Primary
    @Bean
    @ConfigurationProperties("spring.datasource")
    public DataSourceProperties dataSourceProperties() {
        return new DataSourceProperties();
    }

    @Primary
    @Bean
    public DataSource dataSource() {
        return dataSourceProperties().initializeDataSourceBuilder().build();
    }

    @Bean
    @ConfigurationProperties("app.datasource2")
    public DataSourceProperties dataSourceProperties2() {
        return new DataSourceProperties();
    }

    @Bean
    public DataSource dataSource2() {
        return dataSourceProperties2().initializeDataSourceBuilder().build();
    }

    @Bean
    @ConfigurationProperties("app.datasource3")
    public DataSourceProperties dataSourceProperties3() {
        return new DataSourceProperties();
    }

    @Bean
    public DataSource dataSource3() {
        return dataSourceProperties3().initializeDataSourceBuilder().build();
    }
}

@Configuration
@EnableJpaRepositories(
    basePackages = "com.example.demo.repository.primary", 
    entityManagerFactoryRef = "entityManagerFactory", 
    transactionManagerRef = "transactionManager"
)
public class PrimaryDBConfig {
    // ...
}

@Configuration
@EnableJpaRepositories(
    basePackages = "com.example.demo.repository.secondary", 
    entityManagerFactoryRef = "entityManagerFactory2", 
    transactionManagerRef = "transactionManager2"
)
public class SecondaryDBConfig {
    // ...
}

@Configuration
@EnableJpaRepositories(
    basePackages = "com.example.demo.repository.tertiary", 
    entityManagerFactoryRef = "entityManagerFactory3", 
    transactionManagerRef = "transactionManager3"
)
public class TertiaryDBConfig {
    // ...
}

이제 세 개의 데이터베이스를 모두 Spring Boot 애플리케이션에 연결했습니다. 각 데이터베이스에 대한 리포지토리는 해당 데이터베이스의 데이터 소스 및 JPA 설정을 사용하도록 구성됩니다.

이 방법을 사용하면, 각 데이터베이스에 대한 트랜잭션을 개별적으로 관리할 수 있습니다. 서로 다른 데이터베이스에 대해 트랜잭션을 전역적으로 관리하려면 분산 트랜잭션을 처리할 수 있는 XA 데이터 소스나 스프링의 JTA를 사용해야 할 수도 있습니다. 분산 트랜잭션은 복잡성과 성능 측면에서 고려해야 할 부분이 많으므로, 가능하면 동일한 트랜잭션에서 여러 데이터베이스를 동시에 사용하는 것을 피하는 것이 좋습니다.

이것으로 Spring Boot를 이용한 다중 데이터베이스 연결에 대한 글을 마칩니다. 본 글이 여러분들에게 도움이 되었길 바랍니다! 다음 번에 뵙겠습니다!

VisualAcademy Docs의 모든 콘텐츠, 이미지, 동영상의 저작권은 박용준에게 있습니다. 저작권법에 의해 보호를 받는 저작물이므로 무단 전재와 복제를 금합니다. 사이트의 콘텐츠를 복제하여 블로그, 웹사이트 등에 게시할 수 없습니다. 단, 링크와 SNS 공유, Youtube 동영상 공유는 허용합니다. www.VisualAcademy.com
박용준 강사의 모든 동영상 강의는 데브렉에서 독점으로 제공됩니다. www.devlec.com