ํšŒ์‚ฌ์—์„œ ํ”„๋กœ์ ํŠธ ๋ฆฌํŒŒ์ง€ํ† ๋ฆฌ ๋‚ด ์กด์žฌํ•˜๋Š” ํ™˜๊ฒฝ๋ณ„ ์†์„ฑ ํŒŒ์ผ์„ ์ œ๊ฑฐํ•˜๊ณ  ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์ด์šฉํ•˜๊ธฐ๋กœ ์š”๊ตฌ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ ๊ณผ์ •์—์„œ๋Š” ์ธํ…”๋ฆฌ์ œ์ด์˜ EnvFile ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์ด์šฉํ•ด ๋กœ์ปฌ์— ๋งŒ๋“  .env ํŒŒ์ผ์„ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋กœ ์ ์šฉํ•  ์ˆ˜ ์žˆ์—ˆ์ง€๋งŒ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•  ๋•Œ์—๋Š” ๋งค๋ฒˆ ์‹คํ–‰ ํ™˜๊ฒฝ์„ ์ˆ˜์ •ํ•˜๋Š”๊ฒŒ ๋ถˆํŽธํ•ด์„œ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ์‹œ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์ ์šฉํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด์„œ ์ฐพ์•„๋ดค์Šต๋‹ˆ๋‹ค.

spring-dotenv

spring-dotenv๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์†์„ฑ ํŒŒ์ผ์— ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ํ˜•ํƒœ๋กœ ์ ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์†์„ฑ ํŒŒ์ผ์— ๋”ฐ๋ผ ์ž๋™์œผ๋กœ ์ ์šฉ๋˜์ง€๋Š” ์•Š๋Š”๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์Šคํ”„๋ง ๋ถ€ํŠธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ฐฐ๋„ˆ๋ฅผ ์ œ์™ธํ•˜๊ธฐ ์œ„ํ•ด์„œ SPRING_MAIN_BANNERMODE์ด dotenv ํŒŒ์ผ์— ์ •์˜๋˜์–ด ์žˆ์–ด๋„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์†์„ฑ ํŒŒ์ผ์—SPRING_MAIN_BANNERMODE๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ๋ณ„๋„๋กœ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

# dev.env
SPRING_MAIN_BANNERMODE=off

# application.properties
spring.main.banner-mode=${SPRING_MAIN_BANNERMODE:console}

๊ธฐ๋ณธ์ ์œผ๋กœ OS ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋Š” ์ •ํ•ด์ง„ ํŒจํ„ด์— ๋”ฐ๋ผ ์Šคํ”„๋ง ๋ถ€ํŠธ์—์„œ ์ง€์›ํ•˜๋Š” Externalized Configuration์— ๋”ฐ๋ผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์†์„ฑ์œผ๋กœ ๋ฐ˜์˜๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ, ๋„์ปค ์ปดํฌ์ฆˆ ๋˜๋Š” Amazon ECS์—์„œ๋Š” dotenv ํŒŒ์ผ๋กœ ํ™˜๊ฒฝ๋ณ€์ˆ˜๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์ฃ .

Environment๋ฅผ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•ํ•  ์ˆ˜ ์žˆ๋Š” ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋ฐฉ๋ฒ•

๋‹จ์œ„ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฒฝ์šฐ ์œ„์™€ ๊ฐ™์€ ๋ฐฉ๋ฒ•์œผ๋กœ Environment๋ฅผ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•ํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ์š”. ์ด๋ฅผ ํ†ตํ•ด์„œ ์ผ๋ถ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์†์„ฑ์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์ง€๋งŒ .env ํŒŒ์ผ์„ ์ง€์ •ํ•  ์ˆœ ์—†์Šต๋‹ˆ๋‹ค. ์•ž์„œ spring-dotenv๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์†์„ฑ ํŒŒ์ผ์— ์žฌ์ •์˜๊ฐ€ ํ•„์š”ํ•˜๊ณ  ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋ฅผ ๊ฐœ๋ณ„๋กœ ์ˆ˜ํ–‰ํ•  ๋•Œ๋งˆ๋‹ค ์‹คํ–‰ ํ™˜๊ฒฝ์—์„œ EnvFile ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ํ™œ์„ฑํ™”ํ•˜๊ธฐ์—๋Š” ๋„ˆ๋ฌด๋‚˜๋„ ๋ถˆํŽธํ•ฉ๋‹ˆ๋‹ค.

์Šคํ”„๋ง ๋ฐฐ๋„ˆ ์ถœ๋ ฅ์€ Environment๋กœ ๋™์ž‘ํ•˜์ง€ ์•Š๋Š”๋‹ค?

์ด ๊ธ€์„ ์ž‘์„ฑํ•˜๊ธฐ ์œ„ํ•ด์„œ ํ…Œ์ŠคํŠธ๋ฅผ ํ•ด๋ณด๋˜ ์ค‘ ์Šคํ”„๋ง ๋ฐฐ๋„ˆ ์ถœ๋ ฅ์— ๋Œ€ํ•œ ์†์„ฑ๊ฐ’์€ TestPropertySource์™€ DotenvPropertySource ๋ชจ๋‘ Environment์— ๋ฐ˜์˜๋˜์–ด ํ…Œ์ŠคํŠธ๋Š” ํ†ต๊ณผํ–ˆ์œผ๋‚˜ ์‹ค์ œ ์Šคํ”„๋ง ๋ฐฐ๋„ˆ ์ถœ๋ ฅ์€ ๋ณ€๊ฒฝ๋˜๊ธฐ ์ด์ „์˜ ๊ฐ’์œผ๋กœ ๋™์ž‘ํ–ˆ๊ณ  TestPropertyValues ๋˜๋Š” EnvironmentPostProcessor ์—์„œ์‹œ์Šคํ…œ ํ”„๋กœํผํ‹ฐ๋กœ ๋“ฑ๋กํ•ด์•ผ๋งŒ ์ œ๋Œ€๋กœ ๋ฐ˜์˜๋˜์–ด ์ถœ๋ ฅ๋˜์ง€ ์•Š๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

@ActiveProfiles("test")
@SpringBootTest
class ApplicationTests {}

ํ”„๋กœ๋•์…˜ ๋ฐฐํฌ๊ฐ€ ์•„๋‹Œ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ์‹œ์—๋Š” .env ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ๋ณ„๋„์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์†์„ฑ ํŒŒ์ผ(application-test.yml)์„ ๋‘๊ณ  @ActiveProfiles๋ฅผ ํ™œ์šฉํ•˜๋Š” ๊ฒƒ์ด ๊ทธ๋‚˜๋งˆ ์ œ์ผ ๋‚˜์€ ์„ ํƒ์ง€์ผ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์Šคํ”„๋ง ๋ฐฐ๋„ˆ ์ถœ๋ ฅ์— ๋Œ€ํ•œ ๋™์ž‘์€ ์‹ค์ œ๋กœ ํฌ๋ฆฌํ‹ฐ์ปฌํ•œ ๋ถ€๋ถ„์€ ์•„๋‹ˆ์ง€๋งŒ ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ ์ œ๊ณตํ•ด์ฃผ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์†์„ฑ์— ๋”ฐ๋ผ ๋™์ž‘ ์—ฌ๋ถ€๊ฐ€ ๋‹ค๋ฅด๋‹ค๋Š” ๊ฑด ์ค‘์š”ํ•œ ๋ถ€๋ถ„์ด๋ผ๊ณ  ์ƒ๊ฐ๋ฉ๋‹ˆ๋‹ค.

spring-dotenv ๋˜๋Š” spring.config.import๋ฅผ ํ†ตํ•ด .env ํŒŒ์ผ์„ ์ ์šฉํ•˜๋Š” ์˜ˆ์‹œ๊ฐ€ ๋งŽ์€๋ฐ ์ฃผ์˜ํ•ด์„œ ์‚ฌ์šฉํ•  ํ•„์š”๊ฐ€ ์žˆ๊ฒ ๋„ค์š”.