Querydsl은 Java 기반의 동적 쿼리 생성 프레임워크로, 데이터베이스에 대한 타입 안전한 쿼리를 작성할 수 있게 해줍니다. 이번 포스트에서는 Querydsl을 사용하여 다중 데이터베이스를 연동하는 방법을 알아보겠습니다.
1. Querydsl 설정
먼저, 프로젝트의 의존성에 Querydsl 관련 라이브러리를 추가해야 합니다. Gradle을 사용하는 경우, build.gradle 파일에 다음과 같이 의존성을 추가합니다.
dependencies {
implementation 'com.querydsl:querydsl-core:<version>'
implementation 'com.querydsl:querydsl-jpa:<version>'
}
위의 예시에서 <version>
은 사용하고 있는 Querydsl 라이브러리의 버전을 입력해야 합니다.
2. 다중 데이터베이스 연동 설정
다중 데이터베이스 연동을 위해서는 여러 데이터베이스에 대한 설정이 필요합니다. Querydsl에서는 SQLTemplates
라는 클래스를 활용하여 각 데이터베이스의 방언(Dialect) 설정을 할 수 있습니다.
public class DatabaseConfig {
@Bean
public SQLTemplates sqlTemplates() {
return new H2Templates(); // 예시로 H2 데이터베이스를 사용합니다.
}
@Bean
public EntityManagerFactory entityManagerFactory() {
// EntityManagerFactory를 생성하는 코드 작성
}
@Bean
public JPAQueryFactory queryFactory(EntityManager entityManager, SQLTemplates sqlTemplates) {
JPAQueryFactory queryFactory = new JPAQueryFactory(sqlTemplates, entityManager);
return queryFactory;
}
}
위의 예시에서는 H2 데이터베이스를 사용하도록 SQLTemplates
를 설정하였습니다. 실제로 사용중인 데이터베이스에 맞게 SQLTemplates
를 설정해주면 됩니다.
3. 다중 데이터베이스 활용
다중 데이터베이스 활용을 하기 위해선 각각의 데이터베이스에 대한 EntityManager
를 생성해야 합니다. 이후 Querydsl에서 각각의 데이터베이스에 접근하여 쿼리를 실행할 수 있습니다.
@Repository
public class UserRepository {
@PersistenceContext(unitName = "primaryUnit") // primary 데이터베이스에 대한 EntityManager
private EntityManager primaryEntityManager;
@PersistenceContext(unitName = "secondaryUnit") // secondary 데이터베이스에 대한 EntityManager
private EntityManager secondaryEntityManager;
public List<User> getUsersFromPrimary() {
JPAQueryFactory queryFactory = new JPAQueryFactory(primaryEntityManager);
QUser user = QUser.user;
return queryFactory.selectFrom(user)
.where(user.active.isTrue())
.fetch();
}
public List<User> getUsersFromSecondary() {
JPAQueryFactory queryFactory = new JPAQueryFactory(secondaryEntityManager);
QUser user = QUser.user;
return queryFactory.selectFrom(user)
.where(user.role.eq("ADMIN"))
.fetch();
}
}
위의 예시에서는 primary 데이터베이스와 secondary 데이터베이스에 대한 EntityManager
를 주입받아, 각각의 데이터베이스에 적합한 쿼리를 작성하여 실행합니다.
마무리
이번 포스트에서는 Java Querydsl을 사용하여 다중 데이터베이스를 연동하는 방법에 대해 알아보았습니다. Querydsl의 강력한 기능을 활용하여 다양한 데이터베이스를 연동해보세요.
더 자세한 내용은 Querydsl 공식 문서를 참고하시기 바랍니다.
참고: 이 포스트에서는 Java와 Spring Framework 환경을 기준으로 작성되었습니다.