스프링 부트 프로젝트를 생성하면 디폴트로 생성되는 application.properties 대신에 최근에는 가독성이 좋은 YAML 파일인 application.yml을 많이 사용한다. (application.properties와 application.yml이 둘다 존재하면 yml 파일이 적용된다.)
spring:
config:
activate:
on-profile: local
my.custom.value: "local"
---
spring:
config:
activate:
on-profile: dev
my.custom.value: "dev"
테스트를 위해 각 profile의 my.custom.value 값을 주입받아 /profile-test에 profile만 local과 dev로 구분하여 요청해본다.
@RestController
public class TestController {
private static final Logger log = LoggerFactory.getLogger(TestController.class);
@Value("${my.custom.value}")
private String profile;
@GetMapping("/profile-test")
public String profileTest() {
log.info("profile: {}", profile);
return "ok";
}
}
//local
2024-12-08 22:05:33.785 [http-nio-8080-exec-2] [INFO] c.s.c.TestController - profile: local
//dev
2024-12-08 22:10:01.204 [http-nio-8080-exec-2] [INFO] c.s.c.TestController - profile: dev
applicaton-{profile}.yml으로 profile마다 따로 설정 파일을 생성하면 별도의 작업없이도 애플리케이션을 실행할 때 -Dspring.profiles.active={profile}을 입력하면 해당하는 applicaton-{profile}.yml이 적용된다. 이때 우선적으로 application.yml이 적용되고 application-{profile}.yml이 덮혀쓰여진다.

다음과 이미지에서 처럼 기존의 application.yml이 존재하는 /resources 경로가 아닌 /resources/test와 같이 다른 경로에 존재하는 컨피그 파일을 사용할 수 도 있다.

외부 컨피그 파일을 임포트하기 위해서는 application.yml에 다음과 같이 작성한다.
spring:
config:
import:
- classpath:/test/app-config.yml