application๋ด๋ถ์์ ๊ตฌ์ฑ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์๋ ๊ฒ์ด ์๋ ์ธ๋ถ ์์คํ ์ ํตํด์ ๊ตฌ์ฑ์ ๋ณด๋ฅผ ๊ด๋ฆฌํ๋๋ก ํจ.
Spring Cloud Config
- ๋ถ์ฐ ์์คํ ์์ ์๋ฒ, ํด๋ผ์ด์ธํธ ๊ตฌ์ฑ์ ํ์ํ ์ ๋ณด๋ฅผ ์ธ๋ถ ์์คํ ์์ ๊ด๋ฆฌ
- ํ๋์ ์ค์ํ ๋ ์ ์ฅ์์์ ๊ตฌ์ฑ์์ ๊ด๋ฆฌ ๊ธฐ๋ฅ
- ๊ฐ ์๋น์ค๋ฅผ ๋ค์ ๋น๋ํ์ง ์๊ณ , ๋ฐ๋ก ์ ์ ๊ฐ๋ฅ
- ์ ํ๋ฆฌ์ผ์ด์ ๋ฐฐํฌ ํ์ดํ๋ผ์ธ์ ํตํด DEV-UAT-PRODํ๊ฒฝ์ ๋ง๋ ๊ตฌ์ฑ ์ ๋ณด ์ฌ์ฉ
ํ์๊ด๋ฆฌ, ์ํธํ๋ ๋ฐ์ดํฐ, ํ์ผ์ ์ฅ์ ๊ฐ๊ฐ์ ์ค์ ์ ๋ณด๋ฅผ ํ๋ฐ ๋ชจ์ ์ ์ฉํ ์ ์๋ค.
๋ํ ๋ชจ์์ง ์ค์ ์ ๋ณด๋ฅผ DEV, PROD ํ๊ฒฝ์ ๋ง๊ฒ ์ค์ ํ ์๋ ์๋ค. (application-dev.yml, application-prod.yml)
Changed configuration values (๋ณ๊ฒฝ๋ Configuration ์ ๋ณด ์ ์ฉ)
- ์๋ฒ ์ฌ๊ธฐ๋
- Actuator refresh (Spring Boot Actuator ์ฌ์ฉ, Application ์ํ, ๋ชจ๋ํฐ๋ง)
- Spring Cloud bus ์ฌ์ฉ
Spring Cloud Config ์ค์
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
spring-cloud-config ๋ํ๋์๋ฅผ ๊ฐ์ง๊ณ ์๋ config ์๋ฒ๋ฅผ ๊ตฌ์ฑํ๋ค.
์๋ฒ์ application.yml ํ์ผ์ ์๋ ์ ๋ณด๋ค์ ๊ฐ์ง๊ณ ์๋ค.
- config์๋ฒ ํฌํธ์ ๋ณด, ์ด๋ฆ
- cloud.config.server.native.uri ์ ๋ณด (์ค์ ํ์ผ ์์น)
server:
port: 8888
spring:
application:
name: config-service
profiles:
active: native
cloud:
config:
server:
native:
search-locations: file://${user.home}/Desktop/inflearn/leedowon/SpringCloud/native-file-repo
git:
# uri: file:///Users/yunhwan/Desktop/inflearn/leedowon/SpringCloud/git-local-repo
uri: https://github.com/Parkyunhwan/spring-cloud-config.git
# username: private repo ์ฌ์ฉ ์
# password:
uri์ ๋ณด์ ๋ด๊ธด ์์น์ ์ํ๋ ์ค์ ํ์ผ๋ค์ ์ ์ฅํด๋ ์ ์๋ค.
์ ๊ทธ๋ฆผ์ฒ๋ผ ํด๋น์์น์ dev, prod, (default) ์ํฉ์ ๋ง์ถฐ์ ์ค์ ํ์ผ์ ์ค์ ํ ์ ์๋ค.
๊ฐ๊ฐ์ ํ์ผ ๋ด๋ถ์ ์ค์ ๊ฐ์ ๋ฌ๋ผ์ง ์ ์๋ค.
Actuator Refresh ์ฌ์ฉํ๊ธฐ
User-service ๋ง์ดํฌ๋ก์๋น์ค์ ๋ํ๋์๋ฅผ ์ถ๊ฐํ์.
config, actuator, bootstrap์ถ๊ฐ.
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
bootstrap.yml ํ์ผ์ ์ค์ ์ ๋ณด๋ฅผ ์ถ๊ฐํ์.
config-server์ ์ฃผ์์ ๊ฐ์ ธ์ฌ ์ค์ ์ ๋ณดํ์ผ ์ด๋ฆ๊ณผ profile์ ๋ณด๊ฐ ์ค์ ๋์ด์๋ค.
spring:
cloud:
config:
uri: http://127.0.0.1:8888
name: ecommerce
profiles:
active: dev
์ด์ user-service์์๋ confing์๋ฒ์ ์ค์ ๋ ํ์ผ์ ๋ณด๋ฅผ ๊ฐ์ ธ์์ config์ ์ฌ์ฉํ ์ ์๋ค.
๋ํ, actuator๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์๋ค.
management:
endpoints:
web:
exposure:
include: refresh, health, beans # actuator ๋ฑ๋ก
๋จผ์ health, beans ์๋ํฌ์ธํธ์ ์ ๊ทผํด ์ ๋ณด๋ฅผ ์ป์ ์ ์๋ค.
* GET /user-service/actuator/health
- GET /user-service/actuator/beans
- POST /user-service/actuator/refresh
refresh๋ฅผ ํตํด์ config์๋ฒ์์ ๋ฐ๋ ์ค์ ์ ๋ณด๋ฅผ ํ์ฌ ๋ง์ดํฌ๋ก์๋น์ค์ ์ ์ฉ์ํจ๋ค.
Multiple environments
์คํํ๊ฒฝ์ ๋ฐ๋ผ ๋ค๋ฅธ ์ค์ ์ ๋ณด๋ฅผ ์ฐธ์กฐํ๋๋ก ํ ์ ์๋ค.
-> application-dev.yml, application-prod-yml ...๋ฑ
spring.profiles.active: [value] ๋ก ์ค์ ๊ฐ๋ฅํ๋ฉฐ active์ํ์ธ ์ค์ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์์ ์ฌ์ฉํ๊ฒ ๋๋ค.