Spring Boot Environment Variables
ํ์ฌ์์ ํ๋ก์ ํธ ๋ฆฌํ์งํ ๋ฆฌ ๋ด ์กด์ฌํ๋ ํ๊ฒฝ๋ณ ์์ฑ ํ์ผ์ ์ ๊ฑฐํ๊ณ ํ๊ฒฝ ๋ณ์๋ฅผ ์ด์ฉํ๊ธฐ๋ก ์๊ตฌ๋์์ต๋๋ค. ๊ฐ๋ฐ ๊ณผ์ ์์๋ ์ธํ ๋ฆฌ์ ์ด์ 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๋ฅผ ์ปค์คํฐ๋ง์ด์งํ ์ ์๋ ์ฌ๋ฌ๊ฐ์ง ๋ฐฉ๋ฒ
- EnvironmentPostProcessor
- ContextConfiguration + ApplicationContextListener + TestPropertyValues
- @TestPropertySource
๋จ์ ํ ์คํธ ์ฝ๋๋ฅผ ์คํํ๋ ๊ฒฝ์ฐ ์์ ๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก 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 ํ์ผ์ ์ ์ฉํ๋ ์์๊ฐ ๋ง์๋ฐ ์ฃผ์ํด์ ์ฌ์ฉํ ํ์๊ฐ ์๊ฒ ๋ค์.