[java] 자바 ORM에서의 다중 데이터소스 사용 방법

이번 포스트에서는 자바 ORM(Object-Relational Mapping)에서 다중 데이터소스(multiple data sources)를 사용하는 방법에 대해 알아보겠습니다. 다중 데이터소스를 사용하면 여러 데이터베이스 또는 데이터 저장소에 대한 연결을 관리할 수 있어 유연성과 성능을 향상시킬 수 있습니다.

1. 데이터 소스 구성

다중 데이터소스를 사용하기 위해서는 우선 각 데이터 소스에 대한 설정이 필요합니다. 일반적으로 application.propertiesapplication.yml 파일을 사용하여 각 데이터 소스에 대한 연결 정보를 구성합니다.

예를 들어, Spring 프레임워크에서는 application.properties 파일을 통해 다음과 같이 두 개의 데이터 소스를 설정할 수 있습니다:

# Primary 데이터 소스
spring.datasource.url=jdbc:mysql://localhost:3306/primary
spring.datasource.username=primaryuser
spring.datasource.password=primarypass
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

# Secondary 데이터 소스
secondary.datasource.url=jdbc:mysql://localhost:3306/secondary
secondary.datasource.username=secondaryuser
secondary.datasource.password=secondarypass
secondary.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

2. ORM 프레임워크 설정

ORM 프레임워크를 사용하는 경우, 각 데이터 소스에 대한 설정이 필요합니다. 예를 들어, Hibernate를 사용하는 경우, SessionFactoryEntityManager를 각각의 데이터 소스에 매핑해주어야 합니다.

Spring Data JPA를 사용하는 경우에는 @Configuration 어노테이션을 사용하여 EntityManager를 다중 데이터 소스에 매핑할 수 있습니다.

@Configuration
@EnableJpaRepositories(basePackages = "com.example.primaryrepository",
        entityManagerFactoryRef = "primaryEntityManagerFactory",
        transactionManagerRef = "primaryTransactionManager")
public class PrimaryDataSourceConfig {
    
    @Primary
    @Bean(name = "primaryEntityManagerFactory")
    public LocalContainerEntityManagerFactoryBean primaryEntityManagerFactory(
        EntityManagerFactoryBuilder builder, @Qualifier("primaryDataSource") DataSource dataSource) {
        // Primary 데이터 소스에 대한 설정
    }

    @Primary
    @Bean(name = "primaryTransactionManager")
    public PlatformTransactionManager primaryTransactionManager(
        @Qualifier("primaryEntityManagerFactory") EntityManagerFactory entityManagerFactory) {
        // Primary 데이터 소스에 대한 트랜잭션 매니저 설정
    }
}

3. 데이터베이스 연동

마지막으로, 다중 데이터소스를 사용하는 애플리케이션에서는 각각의 데이터 소스를 명시적으로 지정하여 데이터베이스 연동을 처리해야 합니다. ORM 프레임워크를 사용하는 경우에는 각각의 Repository 또는 DAO에서 어떤 데이터 소스를 사용할지를 명시적으로 지정해주어야 합니다.

@Repository
public class PrimaryUserRepository {

    @PersistenceContext(unitName = "primaryEntityManagerFactory")
    private EntityManager entityManager;

    // Primary 데이터 소스를 사용하는 Repository 기능 구현
}

@Repository
public class SecondaryUserRepository {

    @PersistenceContext(unitName = "secondaryEntityManagerFactory")
    private EntityManager entityManager;

    // Secondary 데이터 소스를 사용하는 Repository 기능 구현
}

결론

다중 데이터소스를 사용하여 자바 ORM에서 여러 데이터 소스를 관리하는 방법에 대해 알아보았습니다. 각 데이터 소스에 대한 설정, ORM 프레임워크 설정, 그리고 데이터베이스 연동을 통해 다중 데이터소스를 효과적으로 활용할 수 있습니다.

참고 자료:

다음 포스트에서는 다중 데이터소스를 사용하는 과정에서 발생할 수 있는 문제 해결 방법에 대해 자세히 살펴보도록 하겠습니다.