티스토리 뷰
앞에 개인적인 이야기 많아서, Maven Profile 설정한 부분은 아래에 있습니다. 필요한 부분만 보세요 !
경험
Spring을 올해 처음 학습하기 시작했는데, 그러다보니 빌드 도구에 있어 Gradle에만 익숙하고 Maven은 사용해본 적이 없었다.
- 사실 여러 이야기를 들었을 때 Gradle이 더 관리하기 좋다고들 해서, Maven은 과거의 유물... 같은 느낌으로 보고 있었다.
그러다보니 당연히도 gradle로만 빌드하고 있었는데, Spring cloud function, Spring native 같은 최근 나온 기술들에 대한 문서들을 읽으니 빌드 구성에 있어 Maven을 더 활용하기도 하고, 해당 기술들을 다룰 땐 Maven이 더 적합하다는 말도 있었다.
나는 "그래도 gradle로 가보자"라는 마음으로 도전했으나, gradle도 제대로 이해하면서 사용하는 것도 아니였고, 아예 Maven을 사용해서만 빌드 구성방법이 작성되어 있는 부분이 있었다. 그러다보니 Maven도 학습해볼겸 사용해보자라는 마음이 섰다. 하지만 역시 이해 안가는 것이 많았다. 뭐,... 지금은 하나씩 넘어가고 있긴하다.
아무튼 Spring cloud function/Spring native를 둘 다 사용하는 프로젝트 다 보니 (Spring native로 인해) jvm을 사용하는 것이 아닌 graalVM의 native-image를 통해서 빌드를 하는데 profile 설정이 제대로 먹지 않았다. 그래서 maven package 할 때 profile을 설정해보고자 했다.
앗 방법에 대해 먼저 설명하기 전에 나는 일단 application-local.yml, application-dev.yml, application-prd.yml 로 profile마다 프로퍼티 파일들을 구분해놓은 프로젝트를 개발 중이었다.
보통 이런식으로 Profile을 설정해서 빌드하지 않는가?
java -jar project.jar -Dspring.profiles.active=dev
적어도 나는 위 방식에 너무 익숙해져있었다.
그래서 ... maven package 때에도 똑같이 도전했다 🤣
./mvnw clean package -P native-image -Dspring.profiles.active=dev
(native-image는 내가 따로 설정한 Profile을 activate 하는 부분이다)
위처럼 하면,,,,,,,,,,,, 당연히도 안된다.
그래서 잠시 멀뚱멀뚱 생각해보니 Maven은 빌드하는 과정이고, java -jar은 빌드 결과물을 실행시키는 과정이 아닌가! 하는 생각이 들었다. 그래서 native-image profile 부분에 따로 profile 설정 부분을 넣어봤는데도 작동을 안했다.
앞서 말했지만 나는 java -jar를 활용하지 않는 환경이었기에 다른 방법이 필요했다.
구글에 여러 자료를 찾아봐도 나와 같은 환경을 구성하고자 하는 사람은 없을 뿐더러 Maven profile을 구성하는 자료들은 진짜 다 옛날 자료였다 (Maven의 현실...)
그래서 어떻게 적용했는가?
위에 글은 그냥 하소연이었고, 여러 방안을 적용해보다 찾은 방안은 다음과 같다.
일단 maven에서 resources 파일을 빌드 시에 가져올 수 있도록 resources 태그를 추가하자.
<build>
<resources>
<resource>
<directory>src/resources</directory>
</resource>
</resources>
...
</build>
그리고 application.yml을 생성하자.
아래와 같이 작성하면 기본 값으로는 local 환경을 사용하고, 나머지의 경우엔 환경변수를 통해 profile을 설정하겠다는 뜻이다.
spring.profiles.active: ${SPRING_PROFILES_ACTIVE:local}
위에도 나와있듯 나는 현재 application.yml 은 없고, application-local / application-dev / application-prd 만 있는 상황이었다.
application-local을 application으로 수정하면 되는 것 아니냐고 할 수 있는데, 위 구성은 팀 컨벤션이기도 하고, 다른 환경에 가서 동적으로 변경될 수 있는 환경을 구축해야만 했다.
그리고 환경변수를 추가하자. 원하는 환경에 따라 다르게 설정하자.
리눅스 환경이라면 다음과 같이 쉽게 환경변수를 추가할 수 있다.
export SPRING_PROFILES_ACTIVE=local
export SPRING_PROFILES_ACTIVE=dev
export SPRING_PROFILES_ACTIVE=prd
AWS Lambda 같은 서비스를 사용한다면, Configuration에서 쉽게 환경변수를 추가할 수 있다.
끝 !
근데 보통.... 사실 jvm을 사용하니깐...
java -jar project.jar -Dspring.profiles.active=dev
대부분 위와 같이 한다..... 나와 같은 특이 상황이 아니라면....
'Development > Java, Kotlin, Frameworks' 카테고리의 다른 글
Java vm -Xmx -Xms option (2) | 2021.06.30 |
---|---|
[Spring Boot] Container image 만들기 ! (0) | 2021.06.24 |
[Spring Reactive] WebClient (2) | 2021.04.24 |
Intellij GET/POST HTTP (0) | 2021.04.10 |
Spock Test (Mock, Stub) (0) | 2021.04.06 |
- Total
- Today
- Yesterday
- 클린 아키텍처
- Istio
- WebFlux
- container
- Spring
- c++
- Clean Architecture
- 로그
- hexagonal architecture
- Kubernetes
- docker
- Algorithm
- gradle
- HTTP
- tag
- jasync
- Log
- 비동기
- 알고리즘
- k8s
- Intellij
- 하루
- boj
- java
- 백준
- python
- 쿠버네티스
- Spring boot
- 일상
- MySQL
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |