[IT]Zero-MG
[Spring Boot] application.properties [local, dev, prod] 나누기 본문
[Spring Boot] application.properties [local, dev, prod] 나누기
민1009 2023. 10. 3. 02:47해당 포스팅을 쓰게된 계기는 .yml 로 나눠서 빌드 하는 설명은 정말 많은데
Gradle과 .properties를 사용하여 나눠서 빌드(build)하는 설명 내용은 절망적으로 없기에 작성하려고 한다.
필자의 경우는 아래와 같이 모듈화로 구성된 MSA (Micro Service Architecture) 방식의 개인 프로젝트 이다.
(사실 알필요는 없다 :: 참고사항)
위와 같이 application.properties를 3개 만들어 두었다.
필자는 dev는 없고 local로 개발을 진행하는 터라 local, prod 두가지로 설명하려고 한다.
첫번째로 Spring Boot 버전이 중요하다.
요즘 기본적으로 2.4.0 버전 이상일테지만, 따라 하는거라면 2.4.0 버전 이상으로 해야한다.
필자는 2.7.8 버전이다.
(버전확인은 'build.gradle'을 보면 된다.)
첫번째,
우선 'build.gradle'를 찾아서 들어간 뒤
맨 하단에 (제일 맨 아래 끝쪽) 아래 설정을 복붙한다.
bootRun {
String activeProfile = System.properties['spring.profiles.active']
systemProperty "spring.profiles.active", activeProfile
}
(맨 아래 해야지 이상한 오류들이 안뜬다.)
(만약 build.gradle 에서 적용시 오류가 나온다면 해결해보거나 생략하고 시도해보길 바란다..)
두번째,
'src/main/resources' 경로에서
기존에 있는'application.properties'는 그대로 놔두고 새로 만들면 된다.
(application.properties 파일을 통째로 복붙하던 새로 properties 파일을 만들던 자유롭게)
꼭 짚고 넘어가기!,
만들 때 spring에서 지원하는 명명 규칙이 있는데
'application-local.properties'
-local 부분에 - (하이픈)을 꼭 넣고 원하는 profile 명을 넣어주면 된다.
예) dev로 만들고 싶으면 파일명을 'application-dev.properties' 로 만들어주면 된다.
(Tip. 이 외에도 본인이 넣고싶은 문자를 넣어서 만들어도 된다)
만들었다면 위 이미지처럼 저런 형태로 파일이 나열될 것이다.
이제 새로 만들어 준 properties 파일들의 특성에 맞게 각각 내부 내용을 셋팅한다.
(server port나 DB connect, JPA 셋팅 등등.. 필요한거 자유롭게)
local과 prod 환경 설정을 나눠서 설정을 넣어뒀다면,
'application.properties'를 들어가서
spring에서 지원하는 구문을 최 상단에 적용할것이다.
spring.profiles.active=prod
위 구문을 1번 라인에 'spring.profiles.active'를 사용해서 위에서 명명한 문자를 적어주면 된다. (복붙하세요!)
필자는 배포할 때 prod 설정으로 말기 위해 'prod'로 적어뒀다.
이렇게 한 뒤 구동시켜주면
'spring.profiles.active'로 설정한 profile의 이름을 알아서 확인해서 properties를 바라보고 읽어준다.
배포 설정이 바뀌면 해당 부분을 바꿔줘야하는 불편함이 있지만 현재로썬 최선인 것 같다.
(더 잘 아시는 분께서 댓글로 좋은 예시가 될 좌표 링크를 써줄거란 기대를 걸어본다.)
해당 설정을 한뒤 주위할 점은,
local 기동시에도 prod.properties를 읽게 될것이다.
이 때 필수적으로 해당 설정을 해줘야한다.
intelliJ 우측 상단에 보면 툴바같은 것이 있는데 클릭하면 아래 매뉴 리스트가 펼쳐진다.
해당 매뉴에서 'Edit Configurations...'를 클릭해준다.
이런 창이 뜨면 각 묘듈 마다 Active profiles를 local로 바라보게 변경해주어야 한다.
모듈 프로젝트가 아니라면 구동하는 Application을 선택해서 위와같이 'local'로 변경해주면 된다.
( 만약 application-local.properties를 만들지 않았다면 만들고 local properties 셋팅 후 진행해주길 바란다. )
이렇게 하면 로컬 기동할 때는 local properties를 보게되고 배포 빌드될 때는 prod properties를 자동으로 보게된다.
만약 dev로 배포할 때는
'application-dev.properties'를 만들어서 dev 설정으로 채우고
'application.properties' 에서 'spring.profiles.active=dev' 로 수정하고 배포하길 바란다.
많은 분들께 도움이 되길 바라며 이만 포스팅을 마치겠다.
