๐[Spring] Profile์ด๋ ๋ฌด์์ผ๊น์?
-
Profile์ ์ ํ๋ฆฌ์ผ์ด์
์ ์คํ ํ๊ฒฝ(์: ๊ฐ๋ฐ, ํ
์คํธ, ์ด์)์ ๋ฐ๋ผ ๋ค๋ฅธ ์ค์ ์ ์ ์ฉํ ์ ์๋๋ก ํ๋ ๊ธฐ๋ฅ์
๋๋ค.
- ์ด๋ฅผ ํตํด ํ๊ฒฝ์ ๋ฐ๋ผ ์ ํฉํ ์ค์ ๊ฐ(์: ๋ฐ์ดํฐ๋ฒ ์ด์ค URL, ๋ก๊น ์์ค ๋ฑ)์ ๊ฐ๋จํ๊ฒ ๊ด๋ฆฌํ ์ ์์ต๋๋ค.
1๏ธโฃ Profile์ ์ฃผ์ ๊ฐ๋ .
1๏ธโฃ ํ๊ฒฝ๋ณ ์ค์ ๋ถ๋ฆฌ.
- ๊ฐ๋ฐ(Development), ํ ์คํธ(Test), ์ด์(Production) ๋ฑ ์๋ก ๋ค๋ฅธ ์คํ ํ๊ฒฝ์ ๋ฐ๋ผ ์ค์ ๊ฐ์ ๋ถ๋ฆฌํ๊ณ , ํน์ ํ๊ฒฝ์ ๋ง๋ ์ค์ ์ ์ฝ๊ฒ ์ ์ฉํ ์ ์์ต๋๋ค.
2๏ธโฃ ์ค์ ํ์ผ ๊ด๋ฆฌ.
- application.properties ๋๋ application.yml ํ์ผ์์ ํ๊ฒฝ๋ณ ์ค์ ์ ์์ฑํ ์ ์์ผ๋ฉฐ, ํ๋กํ์ผ๋ณ๋ก ํ์ผ์ ๋ถ๋ฆฌํด ๊ด๋ฆฌํ ์ ์์ต๋๋ค.
3๏ธโฃ ์ ์ฐํ ์คํ.
-
spring.profiles.active
์์ฑ์ ํตํด ์คํ ์ ํ์ฑํํ ํ๋กํ์ผ์ ์ง์ ํ ์ ์์ต๋๋ค.
2๏ธโฃ Profile ์ค์ ๋ฐฉ๋ฒ.
1๏ธโฃ ๊ธฐ๋ณธ ์ค์ ํ์ผ ์ฌ์ฉ.
- ๋ชจ๋ ํ๊ฒฝ์์ ๊ณตํต์ผ๋ก ์ฌ์ฉํ๋ ์ค์ ์
application.properties
๋๋application.yml
ํ์ผ์ ์์ฑํฉ๋๋ค. - ํ๋กํ์ผ๋ณ ์ค์ ์
application-{profile}.properties
๋๋application-{profile}.yml
ํ์ผ๋ก ์์ฑํฉ๋๋ค.
2๏ธโฃ ์์.
-
application.properties
(๊ณตํต ์ค์ )server.port=8080 spring.datasource.username=root spring.datasource.password=common-password
-
application-dev.properties
(๊ฐ๋ฐ ํ๊ฒฝ)server.port=8081 spring.datasource.url=jdbc:mysql://localhost:3306/dev_db
-
application-prod.properties
(์ด์ ํ๊ฒฝ)server.port=8082 spring.datasource.url=jdbc:mysql://prod-db-example.com:3306/prod_db spring.datasource.password=prod-password
3๏ธโฃ ํ์ฑํํ Profile ์ง์ .
-
spring.profiles.active
๋ฅผ ์ฌ์ฉํ์ฌ ์คํ ์ ํ์ฑํํ ํ๋กํ์ผ์ ์ง์ ํฉ๋๋ค.
1๏ธโฃ application.properties์์ ์ง์ .
spring.profiles.active=dev
2๏ธโฃ JVM ์ต์ ์ผ๋ก ์ง์ .
java -jar -Dspring.profiles.active=prod myapp.jar
3๏ธโฃ ํ๊ฒฝ ๋ณ์๋ก ์ง์ .
export SPRING_PROFILES_ACTIVE=dev
4๏ธโฃ IDE์์ ์ง์ .
์คํ ์ค์ ์์ -Dspring.profile.active=dev
๋ฅผ ์ถ๊ฐํฉ๋๋ค.
4๏ธโฃ ํ๋กํ์ผ๋ณ Bean ์ ์
- Spring์์๋ ํ๋กํ์ผ๋ณ๋ก Bean์ ๋ค๋ฅด๊ฒ ์ค์ ํ ์ ์์ต๋๋ค.
1๏ธโฃ ์์.
@Configuration
public class DataSourceConfig {
@Bean
@Profile("dev")
public DataSource devDataSource() {
return DataSourceBuilder.create()
.url("jdbc:mysql://localhost:3306/dev_db")
.username("dev_user")
.password("dev-password")
.build();
}
@Bean
@Profile("prod")
public DataSource prodDataSource() {
return DataSourceBuilder.create()
.url("jdbc://prod-db.example.com:3306/prod_db")
.username("prod-user")
.password("prod-password")
.build();
}
}
5๏ธโฃ Profile์ ํ์ฉ ์์.
1๏ธโฃ ํ๊ฒฝ๋ณ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ค์ .
- ๊ฐ๋ฐ ํ๊ฒฝ์์๋ ๋ก์ปฌ DB, ์ด์ ํ๊ฒฝ์์๋ ํด๋ผ์ฐ๋ DB๋ฅผ ์ฌ์ฉํ๋๋ก ๋ถ๋ฆฌ.
2๏ธโฃ ๋ก๊น ์์ค.
- ๊ฐ๋ฐ ํ๊ฒฝ์์๋ DEBUG ๋ ๋ฒจ์ ์์ธ ๋ก๊ทธ๋ฅผ ์ถ๋ ฅํ๊ณ , ์ด์ ํ๊ฒฝ์์๋ ERROR ์์ค์ ๋ก๊ทธ๋ง ์ถ๋ ฅ.
3๏ธโฃ API ํค๋ ๋ฏผ๊ฐ ์ ๋ณด ๊ด๋ฆฌ.
- ํ ์คํธ ํ๊ฒฝ์์๋ Mock API ํค๋ฅผ ์ฌ์ฉํ๊ณ , ์ด์ ํ๊ฒฝ์์๋ ์ค์ API ํค๋ฅผ ์ ์ฉ.
4๏ธโฃ ์๋ฒ ํฌํธ ๋ณ๊ฒฝ.
- ๊ฐ ํ๊ฒฝ์ ๋ฐ๋ผ ์ ํ๋ฆฌ์ผ์ด์ ์ ์คํ ํฌํธ๋ฅผ ๋ค๋ฅด๊ฒ ์ค์ .
6๏ธโฃ Profile์ ์ฅ์ .
1๏ธโฃ ์ ์ง๋ณด์์ฑ ํฅ์.
- ์ค์ ํ์ผ์ ํ๊ฒฝ๋ณ๋ก ๋ถ๋ฆฌํด ์ฝ๋์ ์ค์ ๊ฐ์ ์์กด๋๋ฅผ ์ค์ด๊ณ , ๋ณ๊ฒฝ ์ฌํญ์ ์ฝ๊ฒ ๊ด๋ฆฌํ ์ ์์ต๋๋ค.
2๏ธโฃ ๋ฐฐํฌ ์๋ํ์ ์ ๋ฆฌ.
- CI/CD ํ์ดํ๋ผ์ธ์์ ํ๊ฒฝ์ ๋ง๋ ํ๋กํ์ผ์ ํ์ฑํํ์ฌ ๋ฐฐํฌ๋ฅผ ์๋ํํ ์ ์์ต๋๋ค.
3๏ธโฃ ์์ ์ฑ
- ํ๊ฒฝ๋ณ๋ก ์ค์ ์ ๊ฒฉ๋ฆฌํจ์ผ๋ก์จ ์๋ชป๋ ์ค์ (์: ์ด์ DB๋ฅผ ๊ฐ๋ฐ ํ๊ฒฝ์์ ์ ๊ทผํ๋ ๋ฌธ์ )์ ๋ฐฉ์งํ ์ ์์ต๋๋ค.