-
Spring Boot의 프로필(Profile) 기능
특정 프로필이 활성화되었을 때만 해당 설정을 적용
1. Spring Profile 이란?
* 애플리케이션을 실행하는 환경(예: 로컬 개발, 개발 서버, 운영 서버)마다 다른 설정을 적용해야 할 때가 많습니다.
* 예를 들어,
* 로컬 환경(`local`): 내 컴퓨터의 데이터베이스에 접속하고, 서버 포트는 8080을 사용.
* 개발 환경(`dev`): 팀이 공유하는 개발용 데이터베이스에 접속하고, 포트는 8090을 사용.
* 운영 환경(`prod`): 실제 서비스용 데이터베이스에 접속하고, 로그 레벨을 더 높게 설정.
* 이렇게 환경별로 설정 파일을 분리하여 관리할 수 있게 해주는 기능이 바로 Spring Profile입니다.
2. `application.yml`에서의 프로필 설정
* 과거에는 application-local.yml, application-prod.yml 처럼 여러 파일을 만들어서 관리했습니다.
* Spring Boot 2.4 버전부터는 --- 구분자를 사용하여 하나의 application.yml 파일 안에 여러 프로필 설정을 함께 넣을 수 있게 되었습니다.
* 이때 어떤 설정 블록이 어떤 프로필에 해당하는지를 지정하는 것이 바로 spring.config.activate.on-profile 입니다.
스프링 어플리케이션 실행 시 해당 프로필이 적용되지 않는 문제
인텔리제이 유료버전은 상단에 실행설정에 Edit Configuration 눌러서 Active profiles에 입력해주면 되는데
나는 커뮤니티 버전이라서
똑같이 컨피그에 들어간 후
Modify options - Add VM options - '
-Dspring.profiles.active=local
'
입력해서 local 프로필을 활성화했음.
왜 멀티모듈에서 이런 문제가 발생할까?
Spring Boot는 애플리케이션이 실행될 때, 실행되는 모듈(executable module)의 `classpath`에서 application.yml 또는 application.properties 파일을 찾습니다.
멀티모듈 프로젝트에서는 보통 다음과 같은 구조로 나뉩니다.
* `api` 또는 `app` 모듈: 실제 @SpringBootApplication 어노테이션과 main 메소드가 있어서 실행을 담당하는 모듈.
* `core` 또는 `domain` 모듈: 공통 로직, 엔티티, 비즈니스 규칙 등이 담긴 라이브러리 성격의 모듈. api 모듈이 이 모듈을 의존성으로 포함합니다.
문제의 핵심은, 사용자가 `application.yml` 파일을 `core` 같은 라이브러리 모듈에 두었을 때 발생합니다.
api 모듈을 실행하면, Spring Boot는 api 모듈의 src/main/resources 폴더만 직접적으로 탐색합니다. core 모듈의 resources는 core.jar 파일 안에 패키징되어 포함되기 때문에, Spring Boot가 시작 시점에 기본적으로 읽는 설정 파일 위치로 간주하지 않습니다.