스프링 프로파일은 애플리케이션 설정 일부를 분리해서 특정 환경에서만 사용할 수 있게 해준다. 다음 예제와 같이 @Component, @Configuration, @ConfigurationProperties를 @Profile로 마킹하면 로드할 빈을 제한할 수 있다.
@ConfigurationProperties 빈을 자동 스캔 대신 @EnaleConfigurationProperties를 통해 등록했다면 @Profile 어노테이션은 @EnableConfigurationProperties 어노테이션을 선언한 @Configuration 클래스에 명시해야한다. @ConfigurationProperties를 스캔한다면 @ConfigurationProperties 클래스 자체에 @Profile을 지정할 수 있다.
spring.profiles.active 프로파일의 순서를 매길 때는 다른 프로퍼티에서와 동일하게 가장 우선 순위가 높은 PropertySource가 이긴다. 다시말해 application.properties에서 활성 프로파일을 지정했을 땐 커맨드라인 스위치로 덮어쓸 수 있다.
애플리케이션에서 정의하고 사용하는 프로파일이 지나치게 세분화되있으면 사용하기가 번거로워진다. 예를들면 데이터베이스와 메시지 처리 기능을 독립적으로 활성화하기 위해 프로파일을 proddb와 prodmq로 세분화할 수 있다.
이럴 때를 위해 스프링부트는 프로파일 그룹이란 것을 지원한다. 프로파일 그룹을 사용하면 관련 프로파일 그룹에 논리적인 이름을 붙일 수 있다.