개인 프로젝트를 진행하던 중 properties 파일 여러개를 적용해야하는 상황이 생겼다. 책에서 설명하는 properties 적용 방법도 달라지고 해서 블로그에 정리하려고 함.
application.properties 파일은 스프링 부트가 어플리케이션을 구동할 때 자동으로 로딩하여 참조하는 파일이다. 스프링의 설정 파일이라고 할 수 있으며, 형식에 맞게 Key - value 값을 정의하면 해당 설정을 자동으로 참조한다.
이러한 properties 혹은 yml 파일을 보안상의 이유로 여러개 나누어 사용할 때가 있다. Oauth 설정 값이나 DB 설정 파일들은 계정 보안에 아주 중요한 정보들을 담고있기 때문에 따로 properties 파일을 만들어 Git에 푸시하지 않고 관리하게 된다.
필자는 resources 폴더에 다음과 같이 4개의 properties가 있다. 스프링 부트 구동시 properties 를 적용하는 방법은 여러가지가 있는데, 그 중에서도 내가 사용했던 방법들에 대해 소개하고자 한다.
1. @PropertySource
첫 번째 방법은 프로젝트의 최상단에 있는 SpringApplication 클래스 파일에 @PropertySource 를 적용하는 것이다.
다음과 같이 직접 classpath에 properteis 파일들을 추가해주면 된다. 이후 스프링 부트 프로젝트 구동시 알아서 classpath로 지정한 properties 파일들이 적용된다.
이렇게 사용해도 별 문제는 없었지만 이 방법은 자바 소스 파일 내부에 설정 정보가 들어가있는 형태라 유지보수하기 좋지 않겠다는 생각이 들었다.
2. application.properties 파일에서 관리하기
application.properties 파일에 다음의 코드를 추가한다.
spring.config.import 설정에 classpath에 파일들을 지정해주면 된다. 마찬가지로 스프링 부트 프로젝트 구동시 알아서 classpath로 지정한 properties 파일들이 적용된다.
3. Profile Group을 만들어서 관리하자.
앞서 적용했던 properties를 그룹으로 묶어서 관리할 수 있다.
spring.profiles.group.local 에서 local은 profile을 대표하는 그룹 이름이고, '=' 뒤에 따라오는 이름들은 application-real.properties, application-oauth.properties, application-real-db.properties 를 나타낸다.
spring.profiles.active에 해당 그룹명을 적어 profile을 활성화 시켜주면 앞서 보았던 properties가 전부 적용된다.
그룹을 여러개 지정해도 상관 없으며, 서버나 터미널, 리눅스 등의 환경에서 Jar 파일로 실행 시 -Dspring.profiles.active=local 옵션을 지정하면 그룹으로 지정한 profile들이 적용된다. (옵션 지정이 우선순위가 더 높다. 기존 설정들이 Override 됨)
다른 profiles 설정값은 Spring boot 공식 API 문서에서 확인할 수 있다.
참고
- https://gaemi606.tistory.com/entry/Spring-Boot-profile%EC%84%A4%EC%A0%95
- https://sloth.tistory.com/54?category=971639
- https://velog.io/@max9106/Spring-Boot-%EC%99%B8%EB%B6%80%EC%84%A4%EC%A0%95-uik69crax3