티스토리 뷰
FlywayConnectionDetails 개요
FlywayConnectionDetails는 Spring Boot 3.1부터 추가된 인터페이스로, Flyway의 데이터베이스 연결 정보를 제공하는 역할을 합니다.
이 인터페이스를 활용하면 Spring Boot 설정과 별개로 Flyway 전용 데이터베이스 연결을 구성할 수 있습니다.
기존에는 Flyway가 spring.datasource의 설정을 자동으로 사용했지만, 별도의 Flyway 데이터베이스를 사용할 경우 설정이 번거로웠습니다.
Spring Boot 3.1 이후부터는 FlywayConnectionDetails를 구현하여 Flyway 전용 설정을 분리할 수 있습니다.
1. 주요 역할
FlywayConnectionDetails의 역할은 다음과 같습니다.
- Flyway 전용 데이터베이스 연결 설정 제공
- 애플리케이션이 사용하는 spring.datasource와 다른 데이터베이스에 마이그레이션을 적용할 수 있음
- 커스텀 데이터베이스 설정 가능
- JDBC URL, 사용자명, 비밀번호 등을 별도로 설정할 수 있음
- 구성 방식 확장 가능
- application.yml 또는 커스텀 구현체를 만들어 동적으로 연결 정보 설정 가능
2. 기본적인 사용 방법
1) 기본적인 Flyway 설정 (application.yml)
기본적으로 Flyway는 spring.datasource 설정을 자동으로 사용합니다.
spring:
datasource:
url: jdbc:mysql://localhost:3306/main_db
username: main_user
password: main_password
flyway:
enabled: true
이 경우, Flyway는 spring.datasource의 설정을 그대로 사용하여 마이그레이션을 수행합니다.
2) Flyway 전용 데이터베이스 설정
하지만 Flyway가 애플리케이션과 다른 데이터베이스를 사용해야 하는 경우에는 spring.flyway.url을 설정해야 합니다.
spring:
flyway:
url: jdbc:mysql://localhost:3306/flyway_db
user: flyway_user
password: flyway_password
이 설정을 적용하면 Flyway는 flyway_db 데이터베이스를 사용하고, 애플리케이션은 main_db를 사용하게 됩니다.
3. FlywayConnectionDetails 인터페이스 구현
Spring Boot 3.1 이후에는 FlywayConnectionDetails 인터페이스를 직접 구현하여 Flyway 전용 연결 설정을 동적으로 제공할 수 있습니다.
import org.springframework.boot.autoconfigure.flyway.FlywayConnectionDetails;
import org.springframework.boot.jdbc.BasicJdbcConnectionDetails;
import org.springframework.stereotype.Component;
@Component
public class CustomFlywayConnectionDetails implements FlywayConnectionDetails {
private final BasicJdbcConnectionDetails connectionDetails;
public CustomFlywayConnectionDetails() {
this.connectionDetails = new BasicJdbcConnectionDetails(
"jdbc:mysql://localhost:3306/flyway_db",
"flyway_user",
"flyway_password"
);
}
@Override
public String getJdbcUrl() {
return connectionDetails.getJdbcUrl();
}
@Override
public String getUsername() {
return connectionDetails.getUsername();
}
@Override
public String getPassword() {
return connectionDetails.getPassword();
}
}
설명
- FlywayConnectionDetails를 구현하여 Flyway 전용 데이터베이스 정보를 설정함
- getJdbcUrl(), getUsername(), getPassword() 메서드를 오버라이드하여 JDBC 정보를 제공
- BasicJdbcConnectionDetails를 사용하여 쉽게 JDBC 정보를 설정 가능
이제 Spring Boot는 FlywayConnectionDetails 구현체를 자동으로 감지하여 Flyway 전용 데이터베이스를 사용할 수 있습니다.
4. 기존 방식과의 차이점
설정 방식 설명 사용 가능 버전
spring.flyway.url 설정 | application.yml에서 Flyway 전용 DB를 설정 | Spring Boot 2.x ~ |
FlywayConnectionDetails 인터페이스 구현 | Java 코드에서 Flyway DB 설정을 동적으로 관리 | Spring Boot 3.1 ~ |
FlywayConnectionDetails를 사용하면 설정을 코드로 관리할 수 있어 동적인 환경에서도 유연하게 Flyway 연결을 변경할 수 있습니다.
5. 정리
- FlywayConnectionDetails는 Spring Boot 3.1부터 제공되는 Flyway 전용 데이터베이스 설정 인터페이스입니다.
- 기존에는 spring.flyway.url 설정을 사용했지만, 이제 코드 기반으로 설정을 커스터마이징할 수 있습니다.
- 이를 통해 애플리케이션 데이터베이스와 Flyway 데이터베이스를 분리하여 운영할 수 있습니다.
- BasicJdbcConnectionDetails를 활용하면 쉽게 JDBC 정보를 설정할 수 있습니다.