ํด๋น ๊ธ์ Spring Cloud Netflix Eureka ์ Spring Cloud Gateway ์ Built-in Route๋ก Predicates์ Filter ์กฐ์ํ๊ธฐ)์ ์์กดํ๋ ๊ธ์ ๋๋ค. ์ค์ต ํ๊ฒฝ์ ๋ฐ๋ผํ์๋ ค๋ฉด Eureka์ Gateway ๊ธ์ ๋์จ ์ค์ต์ ๋ฐ๋ผํ์๊ธธ ๊ถ๊ณ ๋๋ฆฝ๋๋ค.
๋ชฉ์ฐจ
- Gartner ์์ ์ ์๋ MSA ํ์ค ๊ตฌ์ฑ ์์์ธ Config Store Server
- ์์ฃผ ๋ณ๊ฒฝ๋๋ ์ค์ ์ ๋ณด๋ ์ค์ ์ ๋ณด๋ง ๋ด๊ณ ์๋ ์๋ฒ์์ ๊ด๋ฆฌํ๊ณ ์ด๋ฅผ ํ์๋ก ํ๋ ์๋ฒ์๊ฒ ๊ฐ๊ฐ ๋ฟ๋ ค์ฃผ๋ ๋ฐฉ์
- ์ฐ๋ฆฌ๊ฐ ๊ตฌ์ฑํ ์๋น์ค ๊ตฌ์กฐ
- ๊ฐ๊ฐ์ application.yml
- ์๋น์ค ๊ตฌ์กฐ์ ๋ฌธ์ ์
- Spring Cloud Config ๋?
- ์ค์ต
- Spring Cloud Config ํ๋ก์ ํธ ์์ฑํ๊ธฐ
- @EnableConfigServer
- profiles.active.native
- User-Service ์์ Config ์๋ฒ๋ก ๋ฐ์ ๋ฐ์ดํฐ ์ฌ์ฉํ๊ธฐ
- bootstrap.yml
- ํ ์คํธํ๊ธฐ
- Spring Cloud Config ํ๋ก์ ํธ ์์ฑํ๊ธฐ
Microservice Architecture ์์ Config Store Server๊ฐ ๊ฐ๋ ์๋ฏธ
Config Store Server ๋ ๋ง ๊ทธ๋๋ก ์ค์ ์ ๋ณด ์ ์ฅ ์๋ฒ์ด๋ค.
Gartner ๊ทธ๋ฃน์์ ์ ์ํ MSA ์ธํ๋ผ ํ์ ๊ตฌ์ฑ ์์์ ์ํ๋ฉด Config Store Server ๋ Service Mesh ์์ญ์ ์์นํ๋ ํ์ ์์๋ผ๊ณ ์ ์๋์ด์ง๋ค.
Service Mesh ์์ Config Store ์๋ฒ๋ ์์ฃผ ๋ณ๊ฒฝ๋๋ ์ค์ ์ ๋ณด๋ ์ค์ ์ ๋ณด๋ง ๋ด๊ณ ์๋ ์๋ฒ์์ ๊ด๋ฆฌํ๊ณ ์ด๋ฅผ ํ์๋ก ํ๋ ์๋ฒ์๊ฒ ๊ฐ๊ฐ ๋ฟ๋ ค์ฃผ๋ ๋ฐฉ์์ผ๋ก ์ด์ฉ๋๋ค.
์ด๋ฌํ Config Store ์๋ฒ๊ฐ ์์์ผ๋ก Application์ ์ธ๋ถ ์์ฑ์ ์ค์ ์ง์ค์ ๊ด๋ฆฌ๊ฐ ๊ฐ๋ฅํด์ง๋ค.
์ค์ ์ง์ค์ ๊ด๋ฆฌ๊ฐ ์์ผ๋ฉด ์ด๋ป๊ฒ ๋ ๊น?
์ค์ ์ง์ค์ ๊ด๋ฆฌ๊ฐ ์๋ค๋ ๊ฒ์ ์์ฃผ ์ผ๋ฐ์ ์ธ ์ฐ๋ฆฌ์ application ์ ๊ตฌ์กฐ์ผ ๊ฒ์ด๋ค.
์ฐ๋ฆฌ๊ฐ ๊ตฌ์ฑํ ์๋น์ค์ ๊ตฌ์กฐ
์ง๋ ์๊ฐ ๋์ ์ฐ๋ฆฌ๋ ์๋น์ค๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ๊ตฌ์ฑํ์๋ค.
- Eureka Server
- Gateway Service
- User Service
- Order Service
Some Server๋ ๊ตฌ์ฑํ์ง ์์์ง๋ง ๋ค์ํ ์๋น์ค๊ฐ ์๋ค๋ ์ ์ ๋ฅผ ์ํ์ฌ ์ถ๊ฐํ์์ต๋๋ค.
๊ฐ๊ฐ์ ์๋ฒ๋ ์ธ๋ถ ์ค์ ์ ๋ณด๋ฅผ ์์ ์ ์๋ฒ์์ ๊ด๋ฆฌํ๊ณ ์๋๋ฐ, ์ฌ๊ธฐ์ ๋ง ํ๋ ์ธ๋ถ ์ค์ ์ ๋ณด๋ application.yml์ ๋ค์ด๊ฐ๋ ์ ๋ณด๋ค์ ์ด์ผ๊ธฐํ๋ค.
์๋ฅผ ๋ค์ด์ Gateway ์๋ฒ์ User, Order ์๋ฒ์ ๊ฐ๊ฐ ํ ํฐ ๋ณตํธ๋ฅผ ์ํ Secret Key์ DB ์ค์ ์ ๋ณด๋ค์ด ๋ค์๊ณผ ๊ฐ์ด ์กด์ฌํ๋ค๊ณ ๊ฐ์ ํด๋ณด์.
User & Order-Service Application.yml
token:
jwt:
secret: my_secret_key
spring:
datasource:
driver-class-name: org.h2.Driver
url: jdbc:h2:mem:users
username: sa
password: my_password
User ์ Order ์๋ JWT ํ ํฐ์ encoding, decoding ์ ์ํ ๋น๋ฐ ํค ์ ๋ณด์ Database ์ค์ ์ ๋ณด๋ค์ด ๋ค์ด์๋ค.
Gateway Services Application.yml
token:
jwt:
secret: my_secret_key
Gateway ์๋ JWT ํ ํฐ์ encoding, decoding ์ ์ํ ๋น๋ฐ ํค ์ ๋ณด๋ง ์กด์ฌํ๋ค.
์์ ์๋น์ค ๊ตฌ์กฐ์ ๋ฌธ์ ์
์์ ์๋น์ค์์๋ ์ด๋ค ๋ฌธ์ ์ ๋ค์ด ์กด์ฌํ ๊น?
๊ฐ๊ฐ์ ์๋ฒ๋ ์ธ๋ถ ์ค์ ์ ๋ณด๋ฅผ ์์ ์ ์ ํ๋ฆฌ์ผ์ด์ ๋ด์์ ๊ด๋ฆฌํ๊ฒ ๋๋ค.
๋ง์ฝ ์ด๋ฐ ์ํฉ์ด๋ผ๋ฉด ์ด๋จ๊น?
์ ํ๋ฆฌ์ผ์ด์ ์คํ์ด ๋ณ๊ฒฝ๋์ด JWT ๊ด๋ จ๋ ๊ณตํต ์ค์ ์ ๋ณด๋ฅผ ๋ณ๊ฒฝํด์ผ ํ๋ค. ํ์ง๋ง ์๋ฒ๊ฐ 100๋๊ฐ ์กด์ฌํ๋ค๋ฉด?
๊ทธ๋ผ ๋ค๋ฅธ ์๊ฐ์ ํ ์ฌ์ง ์์ด 100๋์ ์๋ฒ์ ๊ณตํต ์ค์ ์ ๋ณด์ธ JWT ์ ๋ณด๋ฅผ ๋ณ๊ฒฝํ๋ ์ผ์ ์๋์ผ๋ก 100๋ฒ ์์ ํด์ผ ํ๋ค.
๋จ์ํ ์ ๋ณด ํ๋๊ฐ ๋ณ๊ฒฝ๋ ์ด์ ๋๋ฌธ์ ์ ๋์๊ฐ๋ 100๊ฐ์ ์๋ฒ๋ฅผ ๋๊ณ ๋ค์ ํ ์คํธ -> ๋น๋ -> ๋ฐฐํฌ ๊ณผ์ ์ ๊ฑฐ์ณ์ผ ํ๋ค.
CI CD ํ์ดํ๋ผ์ธ์ด ์ ๊ตฌ์ถ๋์๋ค๊ณ ํ๋๋ผ๋ ์ด๋ ํฐ ๋ถ๋ด์ผ ์ ๋ฐ์ ์๋ค.
๊ทธ๋ผ ์ด๋ฐ ์๊ฐ์ ํ ์ ์์ง ์์๊น?
๋ง์ดํฌ๋ก์๋น์ค๋ค์ ์ธ๋ถ ์ค์ ์ ๋ณด๋ค์ ํ๋์ ์๋ฒ์์ ๊ด๋ฆฌํ๊ณ ๊ฐ๊ฐ์ ์๋ฒ๊ฐ ์ด๋ฅผ ๊ฐ์ ธ๊ฐ๋ ๊ตฌ์กฐ๋ ์ด๋จ๊น?
์ด๋ฐ ์ด์ ๋์ Config Store Server ๊ฐ ํ์ํ๊ฒ ๋์๊ณ , Spring Cloud ์์๋ Spring Cloud Config ๋ฅผ ์ ๊ณตํ๊ฒ ๋์๋ค.
Spring Cloud Config
Spring Cloud Config ๊ณต์ ๋ฌธ์๋ฅผ ๋ด๋ณด์.
Spring Cloud Config provides server-side and client-side support for externalized configuration in a distributed system. With the Config Server, you have a central place to manage external properties for applications across all environments.
Spring Cloud Config ๋ ๋ถ์ฐ ์์คํ (๋ง์ดํฌ๋ก ์๋น์ค)์์ ์ธ๋ถ ์ค์ ์ ๋ณด (application.yml ๋ฑ๋ฑ)์ ์ํ ์๋ฒ์ ํด๋ผ์ด์ธํธ๋ฅผ ์ ๊ณตํฉ๋๋ค.
Spring Cloud Config ์์๋ ์๋ฒ์ ํด๋ผ์ด์ธํธ๋ฅผ ์ ๊ณตํ๋ค๊ณ ํ๋๋ฐ, ์๋ฒ๊ฐ ๋ฐ๋ก ์ค์ ์ ๋ณด๋ฅผ ๋ชจ์๋๊ณ ์ ์ฅํ์ฌ ๋ฟ๋ ค์ฃผ๋ ์ฃผ์ฒด๊ฐ ๋๊ณ ํด๋ผ์ด์ธํธ๋ ์๋ฒ์์ ๋ฟ๋ ค์ฃผ๋ ์ค์ ์ ๋ณด๋ฅผ ๋ฐ์ ์ด์ฉํ๋ ์ธก์ผ๋ก ์๊ฐํ ์ ์๋ค.
๋ํ Spring Cloud Config ๋ ๋จ์ง Spring Application ์์๋ง ๋์๊ฐ๋๊ฒ ์๋๋ผ ๋ค๋ฅธ ์ธ์ด๋ก ์์ฑ๋ Applicaiton ์์๋ ๋์๊ฐ๋ค๊ณ ํ๋ค.
Config File ๊ด๋ฆฌ
Spring Cloud Config ์์๋ ์ค์ ์ ๋ณด๋ค์ ๋ค์ํ ๋ฐฉ์์ผ๋ก ๊ด๋ฆฌํ ์ ์๋ค.
- FTP
- native file system
- Local Git Stage
- Git Hosting Service (Github, Gitlab)
ํ์ง๋ง ๊ธฐ๋ณธ์ ์ผ๋ก Spring Cloud Config๋ Git์ ์ด์ฉํ๋ ๊ฒ์ ๊ถ์ฅํ๊ณ ์๊ณ default ๊ฐ git ์ฐ๊ฒฐ์ผ๋ก ํ๋ค.
๊ทธ๋์ ๋ง์ฝ native file ์ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์ค๊ณ ์ถ๋ค๋ฉด spring boot profile ์ ๋ณด๋ฅผ native๋ก ๋ฐ๊ฟ์ค์ผ ํ๋ค.
์๋์์ ์์ธํ ์ค์ตํด๋ณด์.
Architecture with Config server
Config ์๋ฒ๊ฐ ์ฐ๋ฆฌ์ ์ํคํ ์ฒ๋ก ๋ค์ด์จ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ ๊ฒ์ด๋ค.
- ๊ฐ๊ฐ์ ์ค์ ์ ๋ณด๋ค์ ๋นผ์ ํ๋์ github repo ๋ก ์ ๋ก๋ํ๋ค.
- Config ์๋ฒ์ remote ์๋ฒ(github repository) ์ ์ฐ๊ฒฐํ๋ค.
- Remote ์๋ฒ์ local git stage๋ฅผ ์๋ก ์ฐ๊ฒฐํ๊ณ push ํ๋ค.
- ๊ฐ๊ฐ์ Application ์๋ฒ๋ ์ค์ ์ ๋ณด๋ฅผ Config ์๋ฒ์๊ฒ ์์ฒญํ๋ค.
์ค์ต
์ฐ๋ฆฌ์ ์ค์ต์ Github ์์ ๊ฐ์ ธ์ค๋ ๊ฒ์ด ์๋๋ผ Native File System ์์ yml ํ์ผ๋ค์ ๋ถ๋ฌ์ค๋ ๊ฒ์ด๋ค.
Github ์์ ์ค์ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ค๋ ๊ฒ์ ๋ค์ ์๊ฐ์ ํด๋ณผ ๊ฒ์ด๋ค.
์ฐ์ ๊ฐ๊ฐ์ ์๋น์ค๋ค์ ๊ธฐ๋์์ผ์ฃผ์.
- Eureka Server ๊ฐ๋
- Gateway Service ๊ฐ๋
- User Service ๊ฐ๋
- Order Service ๊ฐ๋
Config-Service
์ด์ ์ง์คํ ์ค์ ๊ด๋ฆฌ ์๋ฒ์ธ Config Service ํ๋ก์ ํธ๋ฅผ ์์ฑํด๋ณด์.
ํ๋ก์ ํธ ์์ฑ๊ณผ ์์กด์ฑ ์ถ๊ฐ
ํ๋ก์ ํธ ์์ฑ ์ด๊ธฐ์ IDE ์์ ์ ํํ ์ ์์ง๋ง ๋ง์ฝ ๊ทธ๋ ์ง ๋ชปํ ๊ฒฝ์ฐ๋ผ๋ฉด ์๋์ ๊ฐ์ด gradle ์ ์ง์ ๋ช ์ํด์ค ์ ์๋ค.
build.gradle
ext {
set('springCloudVersion', "2020.0.2")
}
dependencies {
implementation 'org.springframework.cloud:spring-cloud-config-server'
}
dependencyManagement {
imports {
mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
}
}
ํด๋น ์ค์ต์ IDE ์์ ์์กด์ฑ์ ์ ํํ์ง ์๊ณ ์ง์ ์์กด์ฑ์ ์ถ๊ฐํ์์ต๋๋ค.
Spring Cloud์ 2020 ๋ฒ์ ๊ณผ cloud config ์์กด์ฑ์ ์ถ๊ฐํด์ค๋ค.
ConfigServiceApplication.java
@SpringBootApplication
@EnableConfigServer
public class ConfigServiceApplication {
public static void main(String[] args) {
SpringApplication.run(ConfigServiceApplication.class, args);
}
}
๊ทธ๋ฆฌ๊ณ Application ์์ @EnableConfigServer
๋ฅผ ์ด์ฉํด์ Config ์๋ฒ๋ก ๋์ํ๊ฒ ์ง์ ํด์ค๋ค.
Config Server ์์ ์ฌ์ฉํ yml ํ์ผ ์ ์ฅ์
๋ณธ์ธ์ PC ์๋ฌด ๊ณณ์ configuration ํ์ผ๋ค์ ์ ์ฅํ ๋๋ ํ ๋ฆฌ๋ฅผ ํ๋ ๋ง๋ค๊ณ message.yml
ํ์ผ์ ์์ฑํ์.
๊ทธ๋ฆฌ๊ณ ํด๋น ๋๋ ํ ๋ฆฌ์ ์กด์ฌํ๋ ํ์ผ์ ์ด๋ฆ์ ๋ฐ๋ผ์ Config ์๋ฒ์ url์ด ๊ฒฐ์ ๋๋๋ฐ, ์ด๋ ๋ค๋ฅธ ์๋น์ค๊ฐ ๊ฐ์ ธ์์ผํ name์ด ๋๊ณ ์ด๋ฅผ ํตํด์ ์๋ณํ ์ ์๊ฒ ๋๋ค.
message.yml
์์ ๋ค์ด๊ฐ ๋ด์ฉ์ ์๋์์ ๋ ์์๋ณด๋๋ก ํ๊ณ ์ผ๋จ ํด๋น ํ์ผ์ ๋๋ ํ ๋ฆฌ์ ์์น๋ง ํ์
ํ๋ค.
์ด์ Config Server๋ ํด๋น yml ํ์ผ์ ๋ค๋ฅธ ๋ง์ดํฌ๋ก์๋น์ค๋ค์๊ฒ ๋๋ ์ค ๊ฒ์ด๋ค.
Config Server์ Application.yml ์์
server:
port: 8888
spring:
application:
name: config-service
profiles:
active: native
cloud:
config:
server:
native:
search-locations: file://${user.home}/์ธ๋ถ-์ค์ -ํ์ผ-๊ฒฝ๋ก
๊ธฐ๋ณธ์ ์ผ๋ก Config ์๋ฒ๋ 8888 ํฌํธ์์ ๋์ํ๊ฒ ํ๊ณ config ํ์ผ๋ค์ ์ด๋์ ๋ถ๋ฌ์ฌ์ง ์ง์ ํด์ค๋ค.
์ฐ๋ฆฌ๋ native file system ์์ ๋ถ๋ฌ์ฌ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ active๋ฅผ native ๋ก ์ง์ ํด์ฃผ์.
๊ทธ๋ฆฌ๊ณ
spring.cloud.config.server.native.search-locations: file://${user.home}/ํ์ผ ๊ฒฝ๋ก
๋ฅผ ์ด์ฉํด์ ๋ถ๋ฌ์ค๋๋ก ํ ๊ฒ์ธ๋ฐ, ๊ฐ์ ์์ฑํ ํด๋์ ๊ฒฝ๋ก๋ฅผ ์ง์ ํด์ฃผ์.
${user.home}
๋ ๋จ์ถ์ด๋ก ํ ๋๋ ํ ๋ฆฌ์ ์์น๋ฅผ ๋ปํ๋ค.
๋ง์ฝ native ํ์ผ์ด ์๋๋ผ git ํ์ผ์๋ผ๋ฉด ๋ค์ ์๊ฐ์ ๋ ์์ธํ ์ด์ผ๊ธฐํ๊ฒ ์ง๋ง git.uri ๋ก ์ง์ ํด์ผ ํ๋ค.
์ฌ๊ธฐ์ ์ฃผ์ํด์ผํ ์ ์ด Spring Boot ์ default profiles๋ฅผ native๋ก ๋ณ๊ฒฝํด์ค์ผ ํ๋ค. ๋ง์ฝ profile์ active์ ๋ํด์ ๋ชจ๋ฅธ๋ค๋ฉด Spring Boot ์ Profile๊ณผ ์ค์ ์ ๋ณด ์์ ํ์ธํ ์ ์๋ค.
native file directory ์์ message.yml ์์ฑํ๊ธฐ
์๊น ์์ฑํ ๋ก์ปฌ ํ์ผ ๋๋ ํ ๋ฆฌ์ message.yml ์ ์ฑ์๋ณด์.
message:
owner: config-service's native folder
content: :) ์๋
ํ์ธ์ ๊ฐ๊ฐ์ ๋ง์ดํฌ๋ก์๋น์ค์์ ์ฌ์ฉ๋ ๋ฐ์ดํฐ์
๋๋ค. :)
spring:
datasource:
url: dbUrl
driver: com.h2.Driver
username: admin
password: password1234
jwt:
token:
key: my_secret_key
๊ทธ๋ฆฌ๊ณ api tester๋ ์น ๋ธ๋ผ์ฐ์ ๋ก localhost:8888/message/native
๋ก ์ ์ํด๋ณด์.
๋ค์ ์๊ฐ์ ๋ ์์ธํ ์ด์ผ๊ธฐํ๊ฒ ์ง๋ง config server ์ url ์ ๋ณด๋ ๋ค์๊ณผ ๊ฐ์ด ๊ตฌ์ฑ๋๋ค.
https://config-server.com/${name ์ ๋ณด}/${profile ์ ๋ณด}
- application.yml :
https://config-server.com/message/native
- application.yml :
๊ทธ๋ฆฌ๊ณ ์์ฒญ์ ๋ณด๋ธ ๊ฒฐ๊ณผ๋ฅผ ๋ค์ ๋ณด๋ฉด
ํด๋น url๋ก ์์ฒญ์ ๋ณด๋ด๋ฉด ์์ ๊ฐ์ yml ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ฌ ์ ์๊ฒ ๋๋ค.
์ด์ ๊ฐ๊ฐ์ ๋ง์ดํฌ๋ก์๋น์ค์์ ์ด๋ฅผ ์ฌ์ฉํ ์ ์๋๋ก ์ฐ๊ฒฐ์์ผ๋ณด์.
User & Order Service
์ด์ ๊ฐ๊ฐ์ ๋ง์ดํฌ๋ก์๋น์ค์์ ๋ ๋ฆฝ์ ์ธ ์ค์ ํ์ผ์ ๋๋ถ์ด Config ์๋ฒ๊ฐ ๋ด๋ ค์ฃผ๋ ์ค์ ํ์ผ๋ค์ ์ด์ฉํด์ผ ํ๋ค.
์ค์ ์ ๋ณด๋ฅผ ์ถ๊ฐํ๊ธฐ ์ํด์๋ bootstrap ์ ์ด์ฉํ๋๋ฐ, 2021๋ ๋ ๊ธฐ์ค์ผ๋ก spring cloud ์์๋ bootstrap ์ ์๋์ผ๋ก ์ฝ์ด์ค๋ ๊ธฐ๋ฅ์ด ๋น ์ ธ์๋ค.
๊ทธ๋ฌ๋ฏ๋ก spring-cloud-starter-bootstrap ์์กด์ฑ์ ์ถ๊ฐํด์ค์ผ ํ๋ค.
์ฐธ๊ณ ๋ก bootstrap.yml ์ application.yml ๋ณด๋ค ๋จผ์ ๋ก๋ํ๊ธฐ ๋๋ฌธ์ config ์๋ฒ์ ์ ๋ณด๋ฅผ consuming ํ๋ ์๋ฒ์์ ์ค์ ์ ๋ณด๊ฐ ๋๋ฝ๋์ด application ์ด ์คํ๋์ง ์๋ ๊ฒ์ ๋ฐฉ์งํ๋ค.
๋ง์ฝ ๊ทธ๋ ์ง ์์ผ๋ฉด spring.cloud.bootstrap.enbled=true
๋ก ์ค์ ํด์ผํ๋๋ฐ, ์ฐ๋ฆฌ๋ ์ธ๋ถ ์ค์ ํ์ผ์ ๋ถ๋ฌ์ค๋ ๊ณณ์ ๋ถ๋ฆฌํ๊ธฐ ์ํด์ bootstrap ์์กด์ฑ์ ์ถ๊ฐํ๊ณ bootstrap.yml
ํ์ผ์์ config ๊ด๋ จ ์ ๋ณด๋ค์ ๋ค๋ฃจ๋๋กํ์.
Config ์์กด์ฑ ์ถ๊ฐ ๋ฐ bootstrap ์์กด์ฑ ์ถ๊ฐ
implementation 'org.springframework.cloud:spring-cloud-starter-config'
implementation 'org.springframework.cloud:spring-cloud-starter-bootstrap'
bootstrap.yml ์์ฑ
์์ ์ด์ผ๊ธฐํ ๊ฒ ์ฒ๋ผ bootstrap.yml ์์ ์ค์ ๋ค์ ๊ด๋ฆฌํ๊ธฐ๋ก ํ์๋ค.
application.yml ํ์ผ๊ณผ ๋์ผํ depth ์์ bootstrap.yml ํ์ผ์ ์ถ๊ฐํ๊ณ ๋ค์๊ณผ ๊ฐ์ด ๋ช
์ํด์ฃผ์.
config ์๋ฒ์์ data๋ฅผ fetching ํ๊ธฐ ์ํด์ config server์ uri ๋ฅผ ๋ช
์ํด์ค๋ค.
spring:
cloud:
config:
uri: http://localhost:8888
name: message
spring.cloud.config.uri
๋ฐ์ spring.cloud.config.name
์ผ๋ก ์ด๋ค ํ์ผ์ ๋ถ๋ฌ์ฌ์ง ๋ช
์ํ ์ ์๋๋ฐ, ์ง์ ๋ช
์ํ์ง ์์ผ๋ฉด application.yml ํ์ผ์ ๋ถ๋ฌ์จ๋ค.
์์ ๊ฐ์ด ์์ฑํ๊ฑฐ๋ ํน์
spring:
cloud:
config:
uri: http://localhost:8888
name: message
profile: native
๋ก ์ง์ name๊ณผ profile ์ ์ง์ ํด์ ๋ถ๋ฌ์ฌ ์๋ ์๋ค.
ํ์ฌ๋ก์๋ ์ด๋ ํ ๋ฐฉ๋ฒ๋ ์๊ด ์์ผ๋ ํธํ ๋ฐฉ๋ฒ๋๋ก ์์ฑํ์
ํ ์คํธ๋ฅผ ์ํ Request Mapping End Point ์์ฑ
UserServiceApplication.class ์ Config ์๋ฒ์ configuration ์ ๋ณด๋ฅผ ์ ๋ถ๋ฌ์ค๋์ง ํ ์คํธ๋ฅผ ์ํ End Point ๋ฅผ ์ถ๊ฐํ๋ค.
์ญ์ Eureka ์๋ฒ๊ฐ ๊ธฐ๋๋์๋ค๊ณ ๊ฐ์ ํ๊ณ ํ ์คํธํ๊ฒ ๋ค.
@SpringBootApplication
@EnableDiscoveryClient
@RestController
public class UserServiceApplication {
public static void main(String[] args) {
SpringApplication.run(UserServiceApplication.class, args);
}
@GetMapping("/config")
public String string(@Value("${message.owner}") String messageOwner,
@Value("${message.content}") String messageContent) {
return "Configuration File's Message Owner: " + messageOwner + "\n"
+ "Configuration File's Message Content: " + messageContent;
}
}
์์ ์ฝ๋์ ๋ํด์ ์ ์ ์ด์ผ๊ธฐ๋ฅผ ํ์๋ฉด @Value
์ด๋
ธํ
์ด์
์ ํตํด์ Environment ๊ฐ์ฒด์ ์กด์ฌํ๋ ๊ฐ์ ๊ฐ์ ธ์ฌ ์ ์๋๋ฐ, ์ฐ๋ฆฌ๊ฐ bootstrap.yml ์ ์ด์ฉํด์ application.yml ํ์ผ๋ณด๋ค ๋จผ์ ๋ก๋ํ์๊ธฐ ๋๋ฌธ์ ์ค์ ํ์ผ์ ์๋ message.owner ๊ณผ content๋ฅผ ๋ถ๋ฌ์ฌ ์ ์๊ฒ ๋๋ ๊ฒ์ด๋ค.
ํ ์คํธ
์ฐ๋ฆฌ์ ์ค์ ์ ๋ณด๋ฅผ config ์๋ฒ์์ ์ ๋ถ๋ฌ์๋์ง gateway๋ฅผ ํตํด์ user-service ์ ์ ๊ทผํด๋ณด์.
๋ง์ฝ gateway ์๋น์ค๊ฐ ์๋ ๊ฒฝ์ฐ๋ผ๋ฉด ๊ทธ๋ฅ user-service url์ ํธ์ถํด๋ ๋ฌด๋ฐฉํ๋ค.
๊ทธ๋ผ ์์ ๊ฐ์ด ์ ์๋ํ๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
๋๊ธ