전 글에서 VSCode를 이용해서 spring boot project를 구동해봤습니다.
시작한 김에 기존 project를 local에서 구동해보려고 시도를 했는데….. local 에서 구동이 되지 않는 문제가 발생했습니다.
결론부터 말하면 application 구동시 spring profiles 설정을 하지 않았기 때문입니다.
Spring Profiles
spring boot를 이용해 application 개발시 각종 설정에 대한 정보를 application.yml 에 작성합니다.
어떤 port를 사용할지, logging 전략은 어떤식으로 구성할지, 어떤 DB를 사용하고 해당 db에 대한 접속 정보를 작성하는 등 많은 설정을 작성하게 됩니다. (물론 중요정보가 있는 설정의 경우는 application.yml 에 설정하지 않는것을 지향합니다.)
그리고 해당 설정 정보는 대부분 phase마다 다르게 구성합니다.
spring은 profiles라는 기능을 통해 구동되는 환경에 따라 설정값을 구분 지을 수 있도록 해줍니다.
Profiles가 설정된 application 구동
예전에 개발했던 broker-api를 구동해보겠습니다.
application.yml
- 아래 설정과 같이 local과 prod의 mongodb 접속 설정정보와 application의 port번호가 다르게 설정되어있다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23spring:
profiles: local
data:
mongodb:
username: local
password: local123
database: local
host: 127.0.0.1
port: 27017
server:
port: 8081
spring:
profiles: prod
data:
mongodb:
username: prod
password: prod123
database: prod
host: 127.0.0.1
port: 27018
server:
port: 18081
VSCode에서 Application 구동
applicatin 구동 시키면 아래처럼 logo만 출력되고 application 이 down 되어버림.
debug를 해보면 아래와 같이 java.lang.IllegalArgumentException: Could not resolve placeholder ‘spring.data.mongodb.uri’ in value “${spring.data.mongodb.uri} 오류가 발생합니다.
mongoDB 관련 configuration 에서 해당 정보를 설정 파일에서 가져오지 못하는 문제가 있습니다.
해결
위 설정과 같이 spring profiles를 사용하는 경우 application 구동시 어떤 profiles를 사용할지에 대해 정의 해줘야 합니다.
VSCode는 해당 설정을 launch.json 에서 할 수 있습니다.
args 에 spring profile 설정을 정의하겠습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14{
"configurations": [
{
"type": "java",
"name": "Spring Boot-BrokerApiApplication<broker-api>",
"request": "launch",
"cwd": "${workspaceFolder}",
"console": "internalConsole",
"mainClass": "com.saltlux.brokerapi.BrokerApiApplication",
"projectName": "broker-api",
"args": "--spring.profiles.active=local"
}
]
}application 재기동