스프링 설정파일(application.yml, application.properties) 로드 시점

dev. 그니·2022년 9월 21일
0
post-thumbnail

스프링 설정파일(application.yml, application.properties)은 컴파일이 아닌 런타임 시점에 로드된다.

직접 테스트 해본 결과 아래와 같다.
설정파일이 올바르지 않으면 실행할 수 없는 애플리케이션이다.

참고로 설정파일은 app 외부의 config/ 디렉토리에 정의되어있다.

  1. 설정파일 삭제
  2. bootJar 생성 -> 성공
  3. bootJar 실행(java -jar ...) -> 실패
  4. 설정파일 복구
  5. bootJar 실행(java -jar ...) -> 성공

따라서 실행 시점의 프로파일을 달리하고 싶으면 재빌드할 필요없이 아래와 같이 하면 된다.

	./gradlew clean app:bootJar
    
	java -jar -Dspring.profiles.active=DEV app.jar

	java -jar -Dspring.profiles.active=LOCAL app.jar

config/ 에 설정파일이 정의된 경우, 빌드 서버와 실행 서버가 다르다면 jar 파일 COPY 시에 설정파일도 함께 COPY 해야한다.


/config/application.yml 이 아닌, app/src/main/resources/applcation.yml 의 경우에는 어떨까

  • 설정파일이 컴파일 시에 jar 파일 안에 함께 패키징 된다.
  • 빌드 후에 jar 파일 외에 전부 삭제하고 실행해도 빌드 전의 application.yml 을 사용한다.
  • 설정파일을 빌드 후에 수정해도 변경되지 않는다.
  • 빌드 시에 특정 profile 이 설정되어 있더라도 application-*.yml 을 전부 jar 에 패키징한다.

하지만 설정파일이 jar 안에 함께 패키징된다 하더라도, 여전히 application.yml 을 불러오는 것은 런타임 시점이다. bootJar 후에 profile 을 바꿔가며 실행하면, 그에 맞는 설정파일이 로드된다.


번외)
app/src/main/resources/applcation.yml 은 컴파일 시에 jar 안에 함께 패키징되지만, 실행 시 config/application.yml 파일이 있다면 이로 덮어씌워진다.

config/application.yml 은 컴파일 시에 jar 안에 패키징되지 않는다.

해당 내용은 직접 테스트해보며 확인해본 것이나 잘못된 내용이 있을 수도 있습니다. 혹시나 잘못된 내용을 발견하셨을 경우, 알려주시면 정정하겠습니다.

profile
백엔드 엔지니어 dev. 그니입니다.

0개의 댓글