참조: https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#boot-features-profiles
개발 서버, 테스트 서버, 운영 서버 3곳에 CI/CD를 하고 있다고 가정했을때
동일한 어플리케이션에서 설정만 조금만 달라지는 경우가 있을 것이다.
이때 프로퍼티파일이나 별도의 설정파일을 만들 수도 있지만 이 경우
각각의 설정을 관리하는 것도 어려움이 따른다.
스프링 프로파일은 스프링 3.1부터 포함된 기능으로 환경에 알맞는 프로파일을 사용할 수
있게 하는 기능이다. 미리 프로파일을 정의해놓고 필요시 적절한 프로파일만 활성화하면
된다. 그러면 특정 프로파일에 따라 각 프로퍼티의 값을 다르게 적용하는 것이 가능하며
프로파일에 따라서 특정 빈을 등록하고 등록하지 않는 것도 가능하다.
@Profile
타겟은?
@Configuration
@Component
프로파일 활성화 => spring.profiles.active
2개의 프로파일을 선택하는 예제를 만들어 보자.
1 |
|
1 |
|
프로파일을 선택하기 위해서는 spring.profiles.active
라는 Environment
프로퍼티를
사용한다.
1 | spring.profiles.active=prod |
IDE에서 application.properties
에 작성시 메타정보로 인해서 위의 해당 프로퍼티
의 키값과 밸류값도 자동완성된다. 이것도 결국 프로퍼티이므로 예전에 봤던 우선 순위도
동일하다 이는 커맨드라인의 프로그램 아규먼트로 --spring.profiles.active=test
식으로
주면 우선순위에 따라서 아규먼트로 들어간 프로파일이 활성화된다.
마찬가지로의 우선순위로 프로파일용 프로퍼티가 application.properties
보다
우선순위이다. 프로파일용 프로퍼티의 이름은 application-{profile}.properties
이다.
위의 경우 application-prod.properties
,application-test.properties
2개의
프로파일용 프로퍼티파일을 만들어 놓으면 활성화된 프로파일 이름이 들어간
프로퍼티 파일만이 읽혀지며 이는 application.properties
보다 우선순위이다.
프로파일 추가 => spring.profiles.include
한 프로파일에서 다른 프로파일을 추가 할때 사용할 수 있다.
예를 들어서 위의 예제 같은 경우 DB 프로파일을 prodDB, testDB를 만들고 각각 prod,
test 프로파일에 적용하고 싶을때 사용할 수 있다.
1 | spring.profiles.include=prodDB |
1 | spring.profiles.include=testDB |
이를 사용해서 프로파일의 계층 구조를 만들 수도 있을 것이다.
잘쓰면 좋고 잘못쓰면 약간 고생할 수 있을 수 있는 소재다 ㅋ
Related POST
- [Spring Boot] 13. Spring REST Client
- [Spring Boot] 12. Spring Security
- [Spring Boot] 11. Spring Data
- [Spring Boot] 10. 스프링 웹 MVC-2: Spring HATOAS, CORS
- [Spring Boot] 9. 스프링 웹 MVC-1:
- [Spring Boot] 8. Spring-Boot-Devtools
- [Spring Boot] 7. 테스트(Testing)
- [Spring Boot] 6. 로깅(Logging)
- [Spring Boot] 5. Profiles
- [Spring Boot] 4. 스프링부트 외부설정
- [Spring Boot] 3. 스프링부트 핵심기능
- [Spring Boot] 2. 스프링부트 이해
- [Spring Boot] 1. 스프링부트 시작