Spring 프로필은 애플리케이션 구성의 일부를 분리하고 특정 환경에서만 사용할 수 있도록 하는 강력한 방법을 제공합니다. 이 기능은 코드를 변경하지 않고 개발, 테스트 및 프로덕션 환경의 다양한 구성을 처리하는 데 특히 유용합니다.
Spring Profile을 사용하면 활성 프로필에 따라 빈을 조건부로 등록할 수 있습니다. 이는 동일한 유형의 여러 Bean을 정의하고 주어진 환경에서 어떤 Bean을 활성화해야 하는지 지정할 수 있음을 의미합니다.
Spring Boot는 구성을 위해 application-{profile}.properties 또는 application-{profile}.yml 파일 세트를 사용합니다. 이러한 파일에는 프로필별 구성이 포함되어 있으며 활성 프로필을 기반으로 로드됩니다.
spring: application: name: MySpringApp server: port: 8080 # Default port
spring: datasource: url: jdbc:h2:mem:devdb username: sa password: "" driver-class-name: org.h2.Driver jpa: hibernate: ddl-auto: update show-sql: true server: port: 8081 # Development port
spring: datasource: url: jdbc:mysql://prod-db-server:3306/proddb username: prod_user password: prod_password driver-class-name: com.mysql.cj.jdbc.Driver jpa: hibernate: ddl-auto: validate show-sql: false server: port: 8082 # Production port
Spring Boot 애플리케이션을 실행할 때 --spring.profiles.active 매개변수를 사용하여 프로필을 활성화할 수 있습니다.
java -jar my-spring-app.jar --spring.profiles.active=dev
또는 application.yml 파일에서 활성 프로필을 지정할 수 있습니다.
spring: profiles: active: dev # or prod
환경 변수를 사용하여 활성 프로필을 설정할 수도 있습니다.
export SPRING_PROFILES_ACTIVE=dev
Spring은 활성 프로필을 기반으로 Bean을 조건부로 등록하기 위해 @Profile 주석을 제공합니다. 예는 다음과 같습니다.
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Profile; @Configuration public class AppConfig { @Bean @Profile("dev") public DataSource devDataSource() { return new HikariDataSource(); // Development-specific DataSource } @Bean @Profile("prod") public DataSource prodDataSource() { return new HikariDataSource(); // Production-specific DataSource } }
이 예에서 devDataSource 빈은 개발자 프로필이 활성화된 경우에만 생성되고 prodDataSource 빈은 prod 프로필이 활성화된 경우 생성됩니다.
테스트를 작성할 때 @ActiveProfiles 주석을 사용하여 활성화해야 하는 프로필을 지정할 수 있습니다.
import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.ActiveProfiles; @SpringBootTest @ActiveProfiles("dev") public class DevProfileTests { @Autowired private DataSource dataSource; @Test public void testDataSource() { // Test code using the development DataSource } }
때때로 활성 프로필을 기반으로 다양한 속성 파일을 로드해야 할 수도 있습니다. 이를 달성하기 위해 @PropertySource 주석을 사용할 수 있습니다:
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.PropertySource; @Configuration @PropertySource("classpath:application-${spring.profiles.active}.properties") public class PropertyConfig { }
Spring Profiles는 다양한 환경에 대한 다양한 구성을 관리하는 강력하고 유연한 방법입니다. 프로필을 기반으로 구성 속성과 Bean을 분리하면 개발, 테스트, 프로덕션 등 각 환경에서 애플리케이션이 올바르게 작동하는지 확인할 수 있습니다. 이 문서에 설명된 기술을 사용하면 Spring Boot 애플리케이션에서 프로필을 쉽게 설정하고 관리할 수 있습니다.
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3