ํ๋ก์ ํธ๋ฅผ ์์ฑํ๊ณ
@SpringBootApplication
@EnableEurekaServer //Eureka Server
public class DiscoveryApplication {
...
}
@EnableEurekaServer
Eureka Server๋ก์จ ๊ธฐ๋ฅ์ ํ ์ ์๋๋ก ์ ์ธํ๋ค.
server:
port: 8761
spring:
application:
name: discovery
eureka:
client: #Eureka ์๋ฒ ์์ฒด๊ฐ Eureka์ ๋ฑ๋ก๋์ง ์๋๋ก ์ค์
fetch-registry: false
register-with-eureka: false
yml ์ค์ ์ ํด์ฃผ๊ณ
server๋ฅผ ์คํ์ํค๋ฉด Eureka๊ฐ ์ ์์ ์ผ๋ก ์คํ๋ ๊ฒ์ ํ์ธํ๋ค.
https://github.com/juno-choi/jayeon-discovery
์์ค๋ ๊น์์ ์ฌ๋ ค์ ๊ด๋ฆฌํ์.
์ด์ ์๋ํฌ์ธํธ์์ ์์ฒญ์ด ๋ค์ด์์ ๋ ์ค์ ์์ฒญ์ ๊ฐ์ฅ ์์์ ๋ฐ์์ฃผ๊ณ service๋ก ๋ถ์ฐ ์ฒ๋ฆฌํด์ค gateway๋ฅผ ์ถ๊ฐํด๋ณด์.
ํ๋ก์ ํธ๋ฅผ ํ๋ ์์ฑํ๊ณ
server:
port: 8000
eureka:
client:
fetch-registry: true
register-with-eureka: true
service-url:
defaultZone: http://127.0.0.1:8761/eureka
spring:
application: #gateway service ์ด๋ฆ๋ฆ
name: gateway-service
eureka server์ ๋ฑ๋กํ๋ ์ค์ ์ ํด์ฃผ์.
Eureka Server์ ์ ๋ฑ๋ก๋์๋ค.
์์ง ์์ฑํ ์๋น์ค๊ฐ ์์ด์ ์ฐ์ Gateway๊ฐ Eureka์ ์ ๋ฑ๋ก๋๋์ง๋ง ํ์ธํ๋ค.
https://github.com/juno-choi/jayeon-gateway
Config Server๋ฅผ ์์ฑํ๊ณ
@SpringBootApplication
@EnableConfigServer
public class ConfigApplication {
public static void main(String[] args) {
SpringApplication.run(ConfigApplication.class, args);
}
}
@EnableConfigServer
์ถ๊ฐํด์ค๋ค.
server:
port: 8888
spring:
application:
name: config-server
cloud:
config:
server:
git:
uri: [git url]
username: [git user name]
password: [git password]
์ฌ๊ธฐ์ git url์ file๋ก ์ ์ฉํด๋ ๋์ง๋ง ์ฐ๋ฆฌ๋ ํธ์์ฑ์ ์ํด git์ ์ฌ๋ ค๋๊ฑฐ๋ค ๋ฌผ๋ก private์ผ๋ก ์ฌ๋ฆด๊ฑฐ๋ค.
์์์ ์์ ํ eureka์ gatway์ yml์ ๊ทธ๋๋ก ๋ณต์ฌํด์ ์ด๋ฆ์ ๊ทธ๋๋ก ์ ์ฉํ๋ค. profile๋ ์ง์ ํ ์ ์๋๋ฐ ์ฐ์ ๊ธํ๊ฑด ์๋๋ ์ด๋ ๊ฒ ํด๋ณด๋ ค๊ณ ํ๋ค.
๊ทธ๋ฆฌ๊ณ ์ด ํ์ผ๋ค์ ๋ชจ๋ git์ ์ฌ๋ ค์ฃผ์.
publicํด๋ ๋์ง๋ง ์ด์ฐจํผ ์ฌ๊ธฐ์ ์ ์ ๋ด์ฉ๋ค์ ๋ชจ๋ ๋
ธ์ถ๋๋ฉด ์๋๊ธฐ ๋๋ฌธ์ privateํ๊ฒ ํ๋ค.
๋ค์๊ณผ ๊ฐ์ด ์ค์ ํด์ฃผ์๊ณ ์ด์ yml์๋ url๊ณผ ๋๋จธ์ง ์ ๋ณด๋ฅผ ์ ์ด์ฃผ์.
์ ๋ณด๋ฅผ ๋ชจ๋ ์ ๋ ฅ ํ ์๋ฒ๋ฅผ ์คํ์์ผ๋ณด์.
{
"name": "eureka",
"profiles": [
"default"
],
"label": null,
"version": "55254dd31967a078e4e03d7950fc13bcb4f118d6",
"state": null,
"propertySources": [
{
"name": "https://github.com/juno-choi/jayeon-config-yml.git/file:C:\\Users\\CODEBL~1\\AppData\\Local\\Temp\\config-repo-11282057788757329880\\eureka.yml",
"source": {
"server.port": 8761,
"spring.application.name": "discovery",
"eureka.client.fetch-registry": false,
"eureka.client.register-with-eureka": false
}
}
]
}
๋ด ์ค์ ์ ๊ฒฝ์ฐ http://127.0.0.1:8888/eureka/default url๋ก ์ ๊ทผํ๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์ ๋ณด๊ฐ ๋์จ๋ค. url ๋ง์ง๋ง default๋ ์์ง profile ์ค์ ์ ์ํด์ฃผ์ด์ ์ธ๋ฐ ์ผ๋จ์ ์ด๋ ๊ฒ ์งํํ๊ฒ ๋ค.
์ด์ config server๋ ์ ์์ ์ผ๋ก ๊ตฌ๋๋๋ ๊ฒ์ ํ์ธํ์ผ๋ Eureka์ Gateway์ ์ค์ ์ config server์์ ๊ฐ์ ธ์ค๋๋ก ์์ ํด๋ณด์.
์ฐ์ Eureka๋ถํฐ ์์ ํด๋ณด์.
๋จผ์ Config Server์ ์ ๋ณด๋ฅผ ๋ฐ์์ค๊ธฐ ์ํด ์์กด์ฑ์ ์ถ๊ฐํ์
implementation 'org.springframework.cloud:spring-cloud-starter-config'
implementation 'org.springframework.cloud:spring-cloud-starter-bootstrap'
implementation 'org.springframework.boot:spring-boot-starter-actuator'
์์กด์ฑ์ config, bootstrap, actuator๋ฅผ ์ถ๊ฐํด์ค๋ค.
spring:
cloud:
config:
uri: http://127.0.0.1:8888
name: eureka
# profile:
management:
endpoints:
web:
exposure:
include: health, httptrace, busrefresh
๊ทธ ํ bootstrap.yml
ํ์ผ์ application.yml
๊ณผ ๋์ผํ ์์น์ ์์ฑํด์ฃผ๊ณ application.yml์ ์ฃผ์์ฒ๋ฆฌํด๋ฒ๋ฆฌ๊ฑฐ๋ ์ง์๋ฒ๋ฆฌ์
server๋ฅผ ๊ธฐ๋ํด๋ณด์.
2022-03-14 14:24:00.115 INFO 10780 --- [ main] c.c.c.ConfigServicePropertySourceLocator : Fetching config from server at : http://127.0.0.1:8888
2022-03-14 14:24:01.095 INFO 10780 --- [ main] c.c.c.ConfigServicePropertySourceLocator : Located environment: name=eureka, profiles=[default], label=null, version=55254dd31967a078e4e03d7950fc13bcb4f118d6, state=null
2022-03-14 14:24:01.096 INFO 10780 --- [ main] b.c.PropertySourceBootstrapConfiguration : Located property source: [BootstrapPropertySource {name='bootstrapProperties-configClient'}, BootstrapPropertySource {name='bootstrapProperties-https://github.com/juno-choi/jayeon-config-yml.git/file:C:\Users\CODEBL~1\AppData\Local\Temp\config-repo-11282057788757329880\eureka.yml'}]
2022-03-14 14:24:01.102 INFO 10780 --- [ main] c.j.j.JayeonDiscoveryApplication : No active profile set, falling back to 1 default profile: "default"
์๋ฒ๋ฅผ ์คํํ๋ฉด ๋ค์๊ณผ ๊ฐ์ ๋ก๊ทธ๋ฅผ ํ์ธํ ์ ์๋๋ฐ ์ฐ๋ฆฌ๊ฐ ์ง์ ํ config server๋ก ์์ฒญํด์ ์ ๋ณด๋ฅผ ์ง์ ํ eureka.yml๋ก ์ฝ์ด์๋ค๋ ๋ด์ฉ์ด๋ค.
์๋ฒ๋ ์ ์์ ์ผ๋ก ์คํ๋์๋ค. ์ด์ ์ฐ๋ฆฌ๋ ์ค์ ์ config server์ ์๊ณ git์์๋ privateํ๊ฒ ๊ด๋ฆฌ๋๊ณ ์์ผ๋ฏ๋ก ๋ ์ด์ ์ค์ ์ ๋ณด๊ฐ ๋ ธ์ถ๋ ๊ฒ์ ๋ํ ๊ฑฑ์ ๊ณผ container๋ก ๋์ธ๋๋ ์ค์ ํ์ผ์ ํญ์ ๋ช ์ํด์ค ํ์๊ฐ ์์ด์ก๋ค.
๋๊ฐ์ด ์์กด์ฑ์ ์ถ๊ฐํด์ฃผ๊ณ
spring:
cloud:
config:
uri: http://127.0.0.1:8888
name: gateway
# profile:
management:
endpoints:
web:
exposure:
include: health, httptrace, busrefresh
gateway ๋ถ๋ถ๋ง ์ ๊ฒฝ์ฐ๊ณ bootstrap.yml
์ ์ถ๊ฐํด์ค๋ค.
์ ์์ ์ผ๋ก ์คํ๋์๋ค.
Eureka์์๋ ํ์ธ์ด ๊ฐ๋ฅํ๋ค.
์์์ ์ถ๊ฐํด์ค ๋ด์ฉ์ค busrefresh๋ message queue ๋ฏธ๋ค์จ์ด๋ฅผ ์ถ๊ฐํด์ค์ผ ํ๋๋ฐ ์๋น์ค๋ค์ด ์ถ๊ฐ๊ฐ ๋์ง ์์์ ๋น์ฅ์ ์ฌ์ฉํ ํ์๊ฐ ์์ด์ ์ผ๋จ ์งํํ๋ค. ๋ค์์ ์๋น์ค๋ฅผ ๊ตฌํํ๋ฉด์ message queue๋ก RabbitMQ๋ฅผ ์ถ๊ฐํ๊ณ DB ๋ฐ์ดํฐ ๋๊ธฐํ๋ฅผ ์ํด Kafka๋ฅผ ์ฌ์ฉํด๋ณด๋ ค๊ณ ํ๋ค.