[스프링] JPA와 멀티 데이터 소스

이번 포스트에서는 스프링 부트 어플리케이션에서 JPA와 멀티 데이터 소스를 설정하는 방법에 대해 알아보겠습니다.

멀티 데이터 소스 구성

일반적으로 스프링 어플리케이션에서 하나의 데이터 소스로만 작업하는 경우가 많지만, 때로는 다수의 데이터베이스를 사용해야 하는 경우도 있습니다. 멀티 데이터 소스를 사용하면 한 어플리케이션에서 여러 데이터베이스를 동시에 사용할 수 있습니다.

JPA 설정

@Entity
@Table(name = "employees")
public class Employee {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;
    // 다른 필드들...
}

위의 코드는 Employee 엔티티를 정의하는 코드입니다. @Entity 애노테이션은 해당 클래스를 JPA 엔티티로 지정하고, @Table 애노테이션은 엔티티가 매핑될 테이블을 지정합니다.

멀티 데이터 소스 설정

@Configuration
@EnableTransactionManagement
public class DataSourceConfig {

    @Bean
    @ConfigurationProperties(prefix="datasource1")
    public DataSource dataSource1() {
        return DataSourceBuilder.create().build();
    }

    @Bean
    @ConfigurationProperties(prefix="datasource2")
    public DataSource dataSource2() {
        return DataSourceBuilder.create().build();
    }

    @Bean
    @Primary
    public JdbcTemplate jdbcTemplate1(DataSource dataSource1) {
        return new JdbcTemplate(dataSource1);
    }

    @Bean
    public JdbcTemplate jdbcTemplate2(DataSource dataSource2) {
        return new JdbcTemplate(dataSource2);
    }
}

위의 코드는 스프링 부트 어플리케이션에서 두 개의 데이터 소스를 설정하는 코드입니다. @Configuration 애노테이션은 이 클래스가 설정 클래스임을 나타내고, @EnableTransactionManagement 애노테이션은 트랜잭션 관리를 활성화합니다.

JPA와 멀티 데이터 소스 통합

@Configuration
@EnableJpaRepositories(
        basePackages = "com.example.repository1",
        entityManagerFactoryRef = "entityManagerFactory1",
        transactionManagerRef = "transactionManager1")
public class JpaConfig1 {
    //...
}

@Configuration
@EnableJpaRepositories(
        basePackages = "com.example.repository2",
        entityManagerFactoryRef = "entityManagerFactory2",
        transactionManagerRef = "transactionManager2")
public class JpaConfig2 {
    //...
}

JpaConfig1JpaConfig2 클래스는 각각 두 개의 JPA 리포지토리를 설정합니다. @EnableJpaRepositories 애노테이션은 JPA 리포지토리 스캔을 활성화하고, 각각의 entityManagerFactoryReftransactionManagerRef 속성은 각각의 엔티티 매니저 팩토리와 트랜잭션 매니저를 지정합니다.

이로써 스프링 어플리케이션에서 JPA와 멀티 데이터 소스를 설정하는 방법에 대해 간단히 알아보았습니다. 이를 통해 하나의 어플리케이션에서 다수의 데이터베이스를 사용하는 작업을 수월하게 진행할 수 있습니다.

더 많은 정보를 원하시면 Spring 공식 문서를 참고하세요.

References: