Spring Boot๋ ์ค์ ์ ์ธ๋ถํํ์ฌ ๊ฐ์ ์ ํ๋ฆฌ์ผ์ด์ ์ฝ๋๊ฐ ๋ค๋ฅธ ํ๊ฒฝ๋ค๋ก ์๋๋๊ฒ ํ ์ ์๋ค. Java properties ํ์ผ, YAML ํ์ผ, ํ๊ฒฝ ๋ณ์ ๊ทธ๋ฆฌ๊ณ ๋ช ๋ น์ค(Command-line) ์ธ์ ๊ฐ์ ๋ค์ํ ์ธ๋ถํ ์ค์ ์์ค๋ค์ ์ฌ์ฉํ ์ ์๋ค.
์์ฑ ๊ฐ๋ค์ @Value ์ด๋ ธํ ์ด์ ์ ์ฌ์ฉํ์ฌ Bean์ผ๋ก ์ฃผ์ ๋๊ฑฐ๋ Spring์ Environment ์ถ์ํ๋ฅผ ํตํ์ฌ ์ ๊ทผํ๊ฑฐ๋ @ConfiurationPerperties ์ด๋ ธํ ์ด์ ์ ํตํด ๊ตฌ์กฐํ๋ ๊ฐ์ฒด๋ค๋ก ๋ฐ์ธ๋ฉ๋ ์ ์๋ค.
Spring Boot๋ ๋งค์ฐ ํน๋ณํ PropertySource ์์๋ฅผ ์ฌ์ฉํ๋ฉฐ ๊ฐ๋ค์ ๋ถ๋ณ์๋ ์ค๋ฒ๋ผ์ด๋ฉ์ ํ์ฉํ๋ค.
(์ฐ์ ์์๊ฐ ๋ฎ์ ์๋ก ๋์ ์์์ ๊ฐ์ ์ค๋ฒ๋ผ์ด๋ฉ)
์ฐ์ ์์ | PropertySource |
---|---|
1 | Devtools ์ ์ญ ์ค์ ๋ณ์, %HOME/.config/spring-boot ํด๋ |
2 | @TestPropertySource ์ด๋ ธํ ์ด์ |
3 | ํ ์คํธ์์์ properties ์์ฑ, @SpringBootTest ๋ฐ @...Test ์ด๋ ธํ ์ด์ |
4 | ๋ช ๋ น์ค(Command-line) ์ธ์ |
5 | SPRING_APPLICATION_JSON, ํ๊ฒฝ ๋ณ์๋ ์์คํ ์์ฑ์ ๋ด์ฅ๋ inline JSON |
6 | ServletConfig ์ด๊ธฐํ ํ๋ผ๋ฏธํฐ |
7 | ServletContext ์ด๊ธฐํ ํ๋ผ๋ฏธํฐ |
8 | JNDI ์์ฑ, java:comp/env |
9 | Java ์์คํ ๋ณ์, System.getProperties() |
10 | OS ํ๊ฒฝ ๋ณ์ |
11 | ์ค์ง ramdom.* ๋ง ์์ฑ์ผ๋ก ๊ฐ๋ RandomValueProertySource |
12 | Config data |
13 | @Confiuration ํด๋์ค ๋ด @PropertySource ์ด๋ ธํ ์ด์ |
14 | ๊ธฐ๋ณธ properties, SpringApplication.setDefaultProperties |
๊ธฐ๋ณธ์ ์ผ๋ก SpringApplication์ ๋ช ๋ น์ค ์ต์ ์ธ์๋ค์ property๋ก ๋ณํํ๊ณ Spring Environment์ ์ถ๊ฐํ๋ค. Command Line Properties๋ ํญ์ ํ์ผ property ์์ค ํ์ผ๋ค๋ณด๋ค ๋ ๋์ ์ฐ์ ์์๋ฅผ ๊ฐ๋๋ค.
$ java -jar myproject.jar --server.port=9000
๋ง์ฝ Command Line Properties๋ฅผ Environment์ ์ถ๊ฐ๋์ง ์๊ฒ ํ๋ ค๋ฉด, ๋ค์๊ณผ ๊ฐ์ด ๋นํ์ฑํํ ์ ์๋ค.
SpringApplication.setAddCommandLineProperties(false)
ํ๊ฒฝ ๋ณ์์ ์์คํ ์์ฑ์ ๋ช๋ช ์์ฑ๋ช ์ ์ฌ์ฉํ ์ ์๋ ์ ํ์ด ์๋ค. ์ด๊ฒ์ ํด๊ฒฐํ๊ธฐ ์ํด Spring Boot๋ ๋จ์ผ JSON ๊ตฌ์กฐ๋ก ์์ฑ๋ค์ ์ธ์ฝ๋ฉํ๋๋ก ํด์ค๋ค.
์ ํ๋ฆฌ์ผ์ด์ ์ด ์์๋ ๋, spring.application.json์ด๋ SPRING_APPLICATION_JSON ์์ฑ๋ค์ ํ์ฑ๋๊ณ Environment์ ์ถ๊ฐ๋๋ค.
// ํ๊ฒฝ ๋ณ์
$ SPRING_APPLICATION_JSON='{"my":{"name":"test"}}' java -jar myapp.jar
// ์์คํ
์์ฑ
$ java -Dspring.application.json='{"my":{"name":"test"}}' -jar myapp.jar
// ๋ช
๋ น์ค ์ธ์
$ java -jar myapp.jar --spring.application.json='{"my":{"name":"test"}}'
Spring Boot๋ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์์๋ ๋ ์๋์ ์ผ๋ก ๋ค์์ ์์น์์ application.properties๋ application.yaml ํ์ผ๋ค์ ์ฐพ๊ณ ๋ถ๋ฌ์จ๋ค. ๋ถ๋ ค์ง ํ์ผ๋ค์ ๋ด์ฉ๋ค์ Spring Environment์ PropertySources๋ก ์ถ๊ฐ๋๋ค.
์ฐ์ ์์ | ์์น |
---|---|
1 | /config ํ์ ํด๋์ ์์ ํด๋ |
2 | ํ์ฌ ํด๋์ /config ํ์ ํด๋ |
3 | ํ์ฌ ํด๋ |
4 | classpath /config ํจํค์ง |
5 | classpath root |
๋ง์ฝ "application" ์ด๋ฆ์ผ๋ก ์ค์ ํ์ผ๋ช ์ ์ฌ์ฉํ๊ธฐ ์ซ๋ค๋ฉด, spring.config.name ํ๊ฒฝ ์์ฑ์ ์ฌ์ฉํ์ฌ ๋ฐ๊ฟ ์ ์๋ค.
$ java -jar myproject.jar --spring.config.name=myproject
spring.config.location ํ๊ฒฝ ์์ฑ์ ์ฌ์ฉํ์ฌ ๋ช ์์ ์์น๋ฅผ ์ฐธ์กฐํ ์ ๋ ์๋ค.
$ java -jar myproject.jar --spring.config.location=\
optional:classpath:/default.properties,\
optional:classpath:/override.properties
Spring Boot๋ application.properties ํ์ผ ๋ฟ๋ง ์๋๋ผ application-{profile} ๋ช ๋ช ๊ท์น์ ์ฌ์ฉํ์ฌ profile-specific ํ์ผ๋ค์ ๋ถ๋ฌ์จ๋ค. profile-specific properties๋ application.properties์ ๊ฐ์ ์์น์์ ๋ถ๋ฌ์ค๋ฉฐ, application.properties๋ฅผ ํญ์ ์ค๋ฒ๋ผ์ด๋ฉํ๋ค.
์๋์ ๊ฐ์ด ํน์ properties๋ฅผ ํ์ฑํ ํ ์ ์๋ค.
spring.config.activate.on-profile=prod
Spring Boot๋ Properties ์ํธํ์ ๋ํ ๋ด์ฅ ๊ธฐ๋ฅ์ ์ง์ํ์ง ์์ง๋ง, Spring Environment ์์ ํฌํจ๋ ๊ฐ๋ค์ ์์ ํ ๋ ํ์ํ "hook points"๋ฅผ ์ง์ํ๋ค. "EnvironmentPostProcessor" ์ธํฐํ์ด์ค๋ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์์ํ๊ธฐ ์ ์ Environment๋ฅผ ์กฐ์ํ ์ ์๋๋ก ํด์ค๋ค.
๋ง์ฝ ์๊ฒฉ(credentials)์ด๋ ์ํธ๋ค์ ์ ์ฅํ๋ ์์ ํ ๋ฐฉ๋ฒ์ ์ฐพ๋๋ค๋ฉด, Spring Cloud Valut ํ๋ก์ ํธ๋ "HashiCorp Vault"์ผ๋ก ์ธ๋ถํ๋ ์ค์ ์ ์ ์ฅํ๋ค.
RandomValuePropertySource๋ ๋๋คํ ๊ฐ๋ค์ ์ฃผ์ ํ๊ธฐ์ ์ ์ฉํ๋ค. Interger, Long, UUID ํน์ String์ผ๋ก ์์ฐํ ์ ์๋ค.
my.secret=${random.value}
my.number=${random.int}
my.bignumber=${random.long}
my.uuid=${random.uuid}
my.number-less-than-ten=${random.int(10)}
my.number-in-range=${random.int[1024,65536]}
Spring Boot๋ ํ๊ฒฝ ๋ณ์๋ฅผ ์ํ prefix ์ค์ ์ ์ง์ํ๋ฉฐ SpringApplication ํด๋์ค์ ์ง์ ์ ์ผ๋ก ์ค์ ํ ์ ์๋ค. ์ด ์ค์ ์ ์์คํ ํ๊ฒฝ์ด ๋ค๋ฅธ ์ค์ ์๊ตฌ์ฌํญ์ ๊ฐ์ง ์ฌ๋ฌ Spring Boot ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ณต์ ๋๋ค๋ฉด ์ ์ฉํ๋ค.
์๋ฅผ ๋ค์ด, 'input'์ผ๋ก prefix๋ฅผ ์ค์ ํ๋ฉด, remote.timeout ๊ฐ์ ์์ฑ์ input.remote.timeout์ผ๋ก ์์คํ ํ๊ฒฝ์ ํ ๋น๋๋ค.
@Value("${property}") ์ด๋ ธํ ์ด์ ์ผ๋ก ๊ตฌ์ฑ ์์ฑ์ ์ฃผ์ ํ๋ ๊ฒ์ ๋๋๋ก ๋ฒ๊ฑฐ๋ก์ธ ์ ์๋ค. ํนํ ๋ค์์ ์์ฑ๋ค๋ก ์์ ํ๊ฑฐ๋ ๋ฐ์ดํฐ๊ฐ ๊ณ์ธต์ ์ธ ๊ฒฝ์ฐ ๋์ฑ ๊ทธ๋ฌํ๋ค. Spring Boot๋ Properties๋ก ์์ ํ๋ ๋์ฒด ๋ฐฉ๋ฒ์ ์ ๊ณตํ๋ฉฐ, ๊ฐ๋ ฅํ๊ฒ ์ ํํ๋ Bean์ผ๋ก ์ ์ดํ๊ณ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ค์ ์ ๊ฒ์ฌํ๋ค.