ํด๋น ๊ธ์ Spring Cloud Netflix Eureka์ ์์กดํ๋ ๊ธ์ ๋๋ค. ์ค์ต ํ๊ฒฝ์ ๋ฐ๋ผํ์๋ ค๋ฉด Eureka ๊ธ์ ํ์ธํ์๊ธธ ๋ฐ๋๋๋ค.
๋ชฉ์ฐจ
- Gateway Pattern
- Gateway๊ฐ ๋์ ๋๋ฉด?
- Spring Cloud Gateway
- Gateway๊ฐ ๋์ํ๋ ๋ฐฉ๋ฒ
- Gateway ๋ด๋ถ ๊ตฌ์กฐ
- ์ค์ตํ๊ธฐ
- ํ๋ก์ ํธ ์์ฑํ๊ธฐ
- ์์กด์ฑ
- ๋ง์ดํฌ๋ก์๋น์ค ์ฐ๊ฒฐํ๊ธฐ
- Eureka Server ์์ ๊ฐ๊ฐ ์ธ์คํด์ค ์ ๋ณด๋ฅผ ๋ฐ์ ๋ก๋๋ฐธ๋ฐ์ฑ ํ๊ธฐ
Gateway Pattern
Microservice ์์ Gateway ํจํด์ ๊ฐ์ฅ ํํ๊ณ ์ ์ฉํ๊ฒ ์ฐ๋ ํจํด ์ค ํ๋์ด๋ค.
Spring Cloud์ ๋ณ๊ฐ๋ก Gateway ํจํด์ ๋ํ ์์ธํ ์ฌํญ์ MSA์ ํต์ฌ ๊ตฌ์ฑ ์์ - API Gateway ํจํด ์์ ํ์ธํ ์ ์์ต๋๋ค.
์ง๋ ์๊ฐ ์ฐ๋ฆฌ๋ Eureka๋ก Discovery Pattern ์ ๊ตฌํํ์๋ค.
์ง๋ ์๊ฐ์์ ๊ตฌํํ Eureka Server-Client ์ ๊ตฌ์กฐ๋ฅผ ์ ์ ์ดํด๋ณด์.
๊ฐ๊ฐ์ ๋ง์ดํฌ๋ก ์๋น์ค๋ค์ ํฌํธ๋ 8812, 51728, 9271 ์ Eureka Server์ Registration ๋์ด์๋ ์ํ๋ก ๊ฐ๊ฐ์ ์๋น์ค๋ค์ ํฌํธ๊ฐ ๋ฐ๋์ด๋ Eureka Dashboard์์ ํ์ธํ ์ ์๋ ๊ตฌ์กฐ์์๋ค.
ํ์ง๋ง ์ด๋ฐ ์ํฉ์ด๋ผ๋ฉด ์ด๋จ๊น?
User-Service(8812 ํฌํธ) ์์ login ์ ์ํํ๊ณ Order-Service(51728 ํฌํธ) ์์ ์ํ์ ์ฃผ๋ฌธ ํ ๋ค, Delivery-Service(9271) ํฌํธ์์ ๋ฐฐ๋ฌ ์ฃผ๋ฌธ์ ์ํํ๋ค.
๋ฌธ์ ์ํฉ์ ํด๋น ์ฃผ๋ฌธ๊ณผ ๋ฐฐ๋ฌ์ ์ํด์ ๊ฐ๊ฐ์ ๋ง์ดํฌ๋ก์๋น์ค๋ค์ ๋ค๋ฅธ ์๋น๋ค์ ํฌํธ๋ฅผ ๋ชจ๋ ์๊ณ ์์ด์ผ ํ๋ค. ๋ง์ฝ ํฌํธ๊ฐ ๋ฐ๋๋ค๋ฉด ํฌํธ๊ฐ ๋ฐ๋ ์๋ฒ๋ฅผ ์ ์ธํ ๋ชจ๋ ์๋ฒ๋ ๋ฐ๋ ํฌํธ์ ๋ฒํธ๋ฅผ ์์ ํ๊ณ ๋ค์ ๋ฐ๋ -> ๋ฐฐํฌ๋ฅผ ํด์ผํ๋ ์ํฉ์ด๋ค.
์ด๋ฐ ์ํฉ์์ ์ฐ๋ฆฌ๋ ํฉ๋ฆฌ์ ์ธ ์๊ฐ์ ํ ์ ์๋ค.
๋ง์ฝ ๋ชจ๋ ๋ง์ดํฌ๋ก์๋น์ค์ ํฌํธ๊ฐ ๋์ผํ๋ค๋ฉด? ํน์ ๋ชจ๋ ๋ง์ดํฌ๋ก์๋น์ค๋ฅผ ํธ์ถํ ๋ ํฌํธ๋ฅผ ์ ๊ฒฝ์ฐ์ง ์์๋ ๋๋ค๋ฉด?
์ด๋ฐ ์ํฉ์์ Spring Gateway๊ฐ ๋ฑ์ฅํ๋ ๊ฒ์ด๋ค.
Gateway๊ฐ ๋์ ๋๋ฉด?
์์ ์ํฉ์์ Gateway๋ฅผ ๋์ ํ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ ๊ตฌ์กฐ๊ฐ ๋ ๊ฒ์ด๋ค.
User ์๋ฒ๊ฐ Order ์๋ฒ์ ์ด๋ ํ ์์ฒญ์ ๋ณด๋ด์ผ ํ๋ ์ํฉ์ด๋ผ๊ณ ๊ฐ์ ํด๋ณด์!
- User ์๋ฒ๋ Order ์๋ฒ์ ๋ณด๋ด์ผํ ์์ฒญ์ Gateway๋ก ์ ๋ฌ
- Gateway๋ Eureka Server๋ก Order ์๋ฒ์ ์ ๋ณด discovery
- Gateway๊ฐ Order Server๋ก ์ฐ๊ฒฐ
์ด๋ ๊ฒ ๋๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ ์ฅ์ ๋ค์ด ์กด์ฌํ๋ค.
- ๊ฐ๊ฐ์ ๋ง์ดํฌ๋ก์๋น์ค๋ค์ ์๋ก์ ํฌํธ ๋ฒํธ๋ฅผ ๋ชฐ๋ผ๋ ๋๋ค.
- Front ์์๋ ์์ฒญ์ Gateway๋ก๋ง ๋ณด๋ด๋ฉด ๋๊ธฐ ๋๋ฌธ์ Gateway ํฌํธ๋ง ์๋ฉด ๋ชจ๋ ์์ฒญ์ ์ํํ ์ ์๋ค.
- ๋ชจ๋ ์์ฒญ์ Gateway ๋ฅผ ๊ฑฐ์น๊ธฐ ๋๋ฌธ์ ๋ก๊ทธ๋ฅผ ์ฝ๊ฒ ๋ค๋ฃฐ ์ ์๋ค.
- Gateway ๊ฐ ์์ฒญ์ ์ง์ ์ ์ด๋ฏ๋ก ํตํฉ ์ธ์ฆ์ ์ํํ ์ ์๋ค.
์ด๋ฌํ ์ฅ์ ์ ์ต์ด์๋ Spring Cloud Netflix Zuul์ ์ด์ฉํ๋ค.
ํ์ง๋ง Netflix Zuul์ Servlet MVC์ Tomcat์ ์ด์ฉํ๋ ์ด์ ๋๋ฌธ์ ํ์ฌ ํ๋ก๊ทธ๋๋ฐ์ ํ๋ฆ์ธ ๋น๋๊ธฐ ํต์ ๋ก์ง์ ์ทจ์ฝํ์๋ค.
๊ทธ์ ๋ํ ๋์์ ์ฐพ๊ณ ์ Spring Cloud๋ Tomcat์ ๋์ ํ์ฌ Netty ์๋ฒ๋ฅผ ๋ด์ฅํ Web Flux ๊ธฐ๋ฐ Gateway ์ธ Spring Cloud Gateway๋ฅผ ๋ง๋ค๊ฒ ๋์๋ค.
Spring Cloud Gateway
Spring Cloud Gateway ๊ณต์ ๋ฌธ์
Spring Cloud Gateway๋ Spring WebFlux ์์์ API Gateway๋ฅผ ๊ตฌ์ถํ๊ธฐ ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ค.
Spring Cloud Gateway aims to provide a simple, yet effective way to route to APIs and provide cross cutting concerns to them such as: security, monitoring/metrics, and resiliency.
Spring Cloud Gateway (SCG)๋ ๊ฐํธํ๋ฉด์๋ ํจ๊ณผ์ ์ธ API ๋ผ์ฐํ ๋ฐฉ๋ฒ์ ์ ๊ณตํ๊ณ , ๋ณด์ ๋ชจ๋ํฐ๋ง, ๋ฉํธ๋ฆญ, ๋ณต์๋ ฅ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๊ฒ์ ๋ชฉํ๋ก ํ๋ค.
Spring Cloud Gateway ์์ ์ฌ์ฉํ๋ 3๊ฐ์ง ๋ช ์นญ
์ฐ์ Spring Cloud Gateway ์์ ์ฌ์ฉํ๋ 3๊ฐ์ง ์ฉ์ด์ ๋ํด์ ๋จผ์ ์์๋ณผ ํ์๊ฐ ์๋ค.
- Route
- Predicate
- Filter
Route (๋ผ์ฐํธ)
๋ชฉ์ ์ง์ URI์ Predicates๋ผ๋ ์กฐ๊ฑด๋ค์ ๋ชฉ๋ก ๊ทธ๋ฆฌ๊ณ ํํฐ๋ค์ ์ด์ฉํ์ฌ ์ด๋ค ๊ณณ์ผ๋ก Routing ํ ๊ฒ์ธ์ง๋ฅผ ๋ช ์ํ๋ ์ญํ ์ ํ๋ค.
์ฐ๋ฆฌ๋ Routes ์ ๋ํ ์์ฑ๊ณผ ์ ๋ณด๋ฅผ ์
๋ ฅํ์ฌ Spring Cloud๊ฐ ์ด๋ค ๋ฐฉ์์ผ๋ก ๋์ํ๋ผ๊ณ ์ง์ํ ์ ์๊ฒ ๋๋ค.
Predicate
์ฝ๊ฒ ์กฐ๊ฑด์ด๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค.
์๋์์ ์ฐ๋ฆฌ๋ Predicates ๋ฅผ ์์ฑํ ๊ฒ์ธ๋ฐ, ๋ค์๊ณผ ๊ฐ์ด ์์ฑํ๋ค.
predicated: -Path=/user/**
๊ทธ๋ผ user ๋ผ๋ ๋ชจ๋ ๊ฒฝ๋ก๋ฅผ ์ง์ ํ ๊ฒ์ด๋ค.
Filter
๋ค์ด์ค๋ ์์ฒญ๊ณผ ์๋ต, Request, Response์ ํน์ ํํฐ๋ฅผ ํ๊ฒ ํจ์ผ๋ก ์ฐ๋ฆฌ๊ฐ ์ํ๋ ๋ฐฉ์์ผ๋ก ์์ฒญ์ ๋ณด๋ด๊ฑฐ๋ ํค๋๋ฅผ ์กฐ์ํ ์ ์๊ณ , ํด๋น ํํฐ๋ฅผ ์ด์ฉํด์ ๋ก๊ทธ ํ์ผ์ ์์ฑํ๊ฒ ํ ์ ๋ ์๋ค.
Spring Cloud Gateway์ ๊ตฌ์กฐ
Spring Cloud Gateway๋ ๋ค์๊ณผ ๊ฐ์ ๊ตฌ์กฐ๋ก ๊ตฌ์ฑ๋์ด ์๋ค.
- Client ๋ Spring Cloud Gateway ์ ์์ฒญ์ ๋ณด๋ธ๋ค.
- Gateway Handler Mapping ์์ ํด๋น ์์ฒญ์ ๋ํ Route์ Predicates๊ฐ ์ผ์นํ๋ค๊ณ ํ๋จํ๋ฉด ํด๋น ์์ฒญ์ Gateway Web handler๋ก ๋ณด๋ด์ง๋ค.
- handler ์์ Filter Chain ์ ์ด์ฉํด์ ์ฌ์ ํํฐ ํน์ ์ฌํ ํํฐ๋ก ๋๋์ด ๋์ํ๋ค.
- ํํฐ๋ง์ด ๋ ํ ์ค์ ๋ง์ดํฌ๋ก์๋น์ค์๊ฒ ์ ๋ฌ๋๋ค.
Spring Cloud Gateway ๋ด๋ถ ๋ค์ฌ๋ค๋ณด๊ธฐ
Spring Cloud Gateway๋ ํฌ๊ฒ 3๊ฐ์ง์ ํํธ๊ฐ ์กด์ฌํ๋ค.
- Gateway Handler Mapping
- Gateway ๊ฐ CLient๋ก ๋ถํฐ ์ด๋ค ์์ฒญ์ด ์๋์ง ํ์ธํ๊ณ Mapping ํ๋ ์์ ์ ์ํํ๋ค.
- Predicate
- Handler Mapping ์์ ํ์ํ Uri ์ ๋ณด๋, Path ์ ๋ณด๋ฅผ ํ์ธํ๋ ์ฃผ์ฒด๊ฐ ๋๋ค.
- Filter
- Handler Mapping์ด ๋ ํ ๋ค์ด์จ ์์ฒญ์ ๋ํ ํํฐ ์์ ์ ์ํํ ์ ์๋ค.
- 2๊ฐ์ ํํฐ๋ก ํฌ๊ฒ ๋๋๋ฉฐ ์ฌ์ (Pre Filter)์ ์ฌํ(Post Filter)๋ก ๋๋ ์ ์๋ค.
- Pre Filter
- ํน์ ์์ ์ด ์ผ์ด๋๊ธฐ ์ ์ ์ง์
- Post Filter
- ํน์ ์์ ์ด ๋๋ ํ์ ์ง์
- Pre Filter
- ์ด๋ฐ ํํฐ์ ๋ํ ์ ๋ณด๋ yml ์ค์ ํ์ผ์๋ ์ ์ํ ์ ์๊ณ java code ์์ ์ ์ํ ์๋ ์๋ค
ํ๋ก์ ํธ ์์ฑํ๊ธฐ
์ง๋ ์๊ฐ์ ๋ง๋ค์๋ ํด๋ ์๋์ gateway-service ๋ผ๋ Spring ํ๋ก์ ํธ๋ฅผ ๋ง๋ค์ด์ฃผ์.
์์กด์ฑ ์ถ๊ฐํ๊ธฐ
์ฐ๋ฆฌ๊ฐ ์ง๋ ์๊ฐ์ ํ๋ ํ๋ก์ ํธ์ Gateway๋ฅผ ๋์ ํด๋ณด์.
์ฐ์ Gateway๋ฅผ Eureka Client๋ก ๋์์ํค๊ฒ ํ๊ธฐ ์ํด์ Eurke Client ์์กด์ฑ๊ณผ Spring Cloud Gateway ์์กด์ฑ์ ํจ๊ป ์ถ๊ฐ์์ผ๋ณด์.
๋ง์ดํฌ๋ก์๋น์ค ์ฐ๊ฒฐํ๊ธฐ
ํด๋น ์ค์ต ๋ด์ฉ์ Spring Cloud Netflix Eureka์ ์์กดํ๋ ๋ด์ฉ ์ ๋๋ค. ์ค์ต ํ๊ฒฝ์ ๋ฐ๋ผํ์๋ ค๋ฉด Eureka ๊ธ์ ํ์ธํ์๊ธธ ๋ฐ๋๋๋ค.
์์ ๊ณ์ ์ด์ผ๊ธฐํ์ง๋ง Gateway๋ ํ๋์ ์๋น์ค์ด๋ค.
๊ทธ๋ฌ๋ฏ๋ก Eureka Server์ ๋ฑ๋ก์์ผ์ Dashboard ์์ ํ ๋ฒ์ ๊ด๋ฆฌํ ์ ์๊ฒ Eureka Discover Client๋ก ๋ฑ๋ก์์ผ์ฃผ์.
์ญ์ application.properties ํ์ผ์ application.yml ํ์ผ๋ก ๋ณ๊ฒฝ์์ผ ์ค์ ์ ๋ณด๋ค์ ์ถ๊ฐํด์ฃผ์.
server:
port: 8000
eureka:
client:
fetch-registry: true
register-with-eureka: true
service-url:
defaultZone: http://localhost:8761/eureka
spring:
application:
name: gateway-service
๊ทธ๋ฆฌ๊ณ Eureka์ ๋ค๋ฅธ Microservice ๋ค์ ์คํ์์ผ์ Eureka Dashboard์ ์ ๋์ค๋์ง ๋จผ์ ํ์ธํด๋ณด์.
- Eureka Server ์คํ
- User Microservice ์คํ
- Order Microservice ์คํ
- Gateway service ์คํ
๊ทธ๋ผ ๋ค์๊ณผ ๊ฐ์ด Eureka Dashboard ์ ์ ๋ฑ๋ก๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
์ด์ ๊ฐ๊ฐ์ ์๋น์ค๋ฅผ Gateway๋ก ์ฐ๊ฒฐํด๋ณด์.
์๋น์ค๋ฅผ Gateway ๋ก ์ฐ๊ฒฐํ๊ธฐ ์ํด์๋ ๋จผ์ Gateway Service ์ application.yml์ ์์ ํด์ผ ํ๋ค.
yml์ ๋ค์ด๊ฐ์ผ ํ ์ค์ ์ ๋ณด๋ ๋ค์๊ณผ ๊ฐ๋ค.
- spring.cloud.gateway.routes : ๋ผ์ฐํ ์ ๋ํ ์ ๋ณด
- spring.cloud.gateway.routes.id : ํด๋น ๋ผ์ฐํ ์ด ์ด๋ ํ ์ด๋ฆ์ผ๋ก ๋ผ์ฐํ ๋ ๊ฒ์ธ์ง์ ๋ํ ์ด๋ฆ
- spring.cloud.gateway.routes.uri : ํ์ฌ ๋ผ์ฐํ ์ ์ด๋์ ํฌ์๋ฉ ์ํฌ ๊ฒ์ธ์ง๋ฅผ ๋ช ์ํด์ค๋ค.
- spring.cloud.gateway.routes.predicates : ์กฐ๊ฑด์์ผ๋ก ํน์ ์์ฒญ์ด predicates์ ๋ง๋ ์กฐ๊ฑด์ผ๋ก ๋ค์ด์ค๋ฉด ํด๋น route๋ฅผ ์ํํ ๊ฒ์ ์ง์ ํ๋ค.
server:
port: 8000
eureka:
client:
fetch-registry: true # ์ ๋ ์นด ํด๋ผ์ด์ธํธ ํ์ฑํ
register-with-eureka: true # ์ ๋ ์นด ํด๋ผ์ด์ธํธ ํ์ฑํ
service-url:
defaultZone: http://localhost:8761/eureka # ์ ๋ ์นด ํด๋ผ์ด์ธํธ๋ก ๋ฑ๋ก
spring:
application:
name: gateway-service
cloud:
gateway:
routes:
- id: user-service
uri: http://localhost:64412 # ํฌ์๋ฉํ ์ฃผ์, http://localhost:8000/user ๋ก ๋ค์ด์ค๋ฉด http://localhost:64412 ๋ก ํฌ์๋ฉ
predicates:
- Path=/user/** # ํด๋น gateway ์๋ฒ์ /user/**๋ก ๋ค์ด์ค๋ ์์ user-service๋ก ์ธ์ํ๊ฒ ๋ค๋ ์กฐ๊ฑด
- id: order-service
uri: http://localhost:54412 # ํฌ์๋ฉ ํ ์ฃผ์, http://localhost:8000/order ๋ก ๋ค์ด์ค๋ฉด http://localhost:54412 ๋ก ํฌ์๋ฉ
predicates:
- Path=/order/** # ํด๋น gateway ์๋ฒ์ /order/**๋ก ๋ค์ด์ค๋ ์์ order-service๋ก ์ธ์ํ๊ฒ ๋ค๋ ์กฐ๊ฑด
์์ ์ํ๊ฐ ๋๋ค๋ฉด ์ด์ Gateway ๋ก ๋ค์ด์ค๋ ๋ชจ๋ ์์ฒญ์ด predicates์ ์ถฉ์กฑํ๋ค๋ฉด ์ฐ๋ฆฌ๊ฐ ์ง์ ํ uri๋ก ํฌ์๋ฉ์ ํ๋ ์ํ๊ฐ ๋๋ค.
ํ์ง๋ง ์ฃผ์ํด์ผ ํ ๊ฒ์ด ์๋ค.
ํฌ์๋ฉ์ ํ ๋, http://localhost:8000/order/info
๋ก ์์ฒญ์ด ๋ค์ด์๋ค๊ณ ๊ฐ์ ํ๋ฉด ๋ค์๊ณผ ๊ฐ์ด ํฌ์๋ฉ์ด ๋๋ค.
ํ์ง๋ง ์ฐ๋ฆฌ์ ์๋น์ค ์ธ์คํด์ค์ Request Mapping ์ ๋ค์๊ณผ ๊ฐ์ด ๋์ด์๋ค.
// ์๋ต
public class UserServiceApplication {
// ์๋ต
@GetMapping("/info")
public String info(@Value("${server.port}") String port) {
return "User ์๋น์ค์ ๊ธฐ๋ณธ ๋์ Port: {" + port + "}";
}
}
// ์๋ต
public class OrderServiceApplication {
// ์๋ต
@GetMapping("/info")
public String info(@Value("${server.port}") String port) {
return "Order ์๋น์ค์ ๊ธฐ๋ณธ ๋์ Port: {" + port + "}";
}
}
๋ง์ฝ ์ด ์ํ์์ ๊ทธ๋๋ก ์์ฒญ์ ๋ณด๋ธ๋ค๋ฉด 404 Error ๋ฅผ ๋ง๊ฒ ๋๋ค.
๋น์ฐํ ์ฐ๋ฆฌ์ ๋ง์ดํฌ๋ก์๋น์ค๋ค์ localhost/info
๋ก๋ง Request Mapping์ด ๋์ด์๋๋ฐ Gateway๋ localhost/user/info
๋ก ์์ฒญ์ ๋ณด๋ด์ฃผ๋..
์ง๊ธ์ ์์ฃผ ๊ฐ๋จํ๊ฒ UserService์ OrderService์ RequestMapping ์ ๋ณด๋ฅผ ๋ฐ๊ฟ์ฃผ๋๋ก ํ์.
๋ค์์ ๊ฐ์ RewitePath๋ฅผ ์ด์ฉํ์ฌ RequestMapping ์ ๋ณด๋ฅผ ๋ฐ๊พธ์ง ์๊ณ ๊ฒฝ๋ก๋ฅผ ๋ฐ๊ฟ์ฃผ๋ ๋ฐฉ๋ฒ์ ๋ฐฐ์๋ณผ ๊ฒ์ด๋ค.
// ์๋ต
public class UserServiceApplication {
// ์๋ต
@GetMapping("/user/info")
public String info(@Value("${server.port}") String port) {
return "User ์๋น์ค์ ๊ธฐ๋ณธ ๋์ Port: {" + port + "}";
}
}
// ์๋ต
public class OrderServiceApplication {
// ์๋ต
@GetMapping("/order/info")
public String info(@Value("${server.port}") String port) {
return "Order ์๋น์ค์ ๊ธฐ๋ณธ ๋์ Port: {" + port + "}";
}
}
๊ทธ๋ฆฌ๊ณ ๋ค์ ์์ฒญ์ ๋ณด๋ด๋ฉด ๊ฐ๊ฐ ์ ๋์ํ๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
Eureka Server ์์ ๊ฐ๊ฐ ์ธ์คํด์ค ์ ๋ณด๋ฅผ ๋ฐ์ ๋ก๋๋ฐธ๋ฐ์ฑ ํ๊ธฐ
์ง๊ธ ์กฐ๊ธ ์์ฌ์ด ๋ถ๋ถ์ด ์๋ค.
Eureka Server ์์ ๊ฐ๊ฐ ์ธ์คํด์ค ์ ๋ณด๋ฅผ ๊ด๋ฆฌํ๋๋ฐ, Gateway ์์๋ ์ง์ ํฌํธ์ ์๋ฒ์ ์ฃผ์๋ฅผ ๋ช
์ํด์ฃผ๊ณ ์๊ธฐ ๋๋ฌธ์ด๋ค.
์์ Eureka Server๋ก ๋ถํฐ ์ ๋ณด๋ฅผ ๋ฐ์์ ๋ก๋๋ฐธ๋ฐ์ฑ์ ์ํํด๋ณด์.
๊ทธ๋ฌ๊ธฐ ์ํด์๋ Eureka Dashboard์ ์๋ Application Name ์ ์์์ผ ํ๋ค.
๊ฐ๊ฐ ORDER-SERVICE์ USER_SERVICE ๋ก ๋์ด ์์ผ๋ application.yml ์์ ํฌ์๋ฉํ ์ฃผ์๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ๋ณ๊ฒฝํ์.
spring:
# ์๋ต
cloud:
gateway:
routes:
- id: user-service
uri: lb://USER-SERVICE
predicates:
- Path=/user/**
- id: order-service
uri: lb://ORDER-SERVICE
predicates:
- Path=/order/**
๊ทธ๋ผ User-Service ๊ฐ Scale-Out ๋๋๋ผ๋, ์ฆ ํฌํธ๊ฐ ์ฌ๋ฌ ๋๋๋ค๊ฑฐ๋ ํน์ uri ์ ๋ณด๊ฐ ๋ณ๊ฒฝ๋๋๋ผ๋ Gateway ์์๋ ๊ทธ๊ฑธ ์ ํ์๊ฐ ์๊ฒ ๋๋ ๊ฒ์ด๋ค.
์ด๊ฒ ๋ฐ๋ก Service Discovery ์ ๋งค๋ ฅ์ด๋ค.
๊ทธ๋ฆฌ๊ณ ๋ค์ ๋์์์ผ๋ณด๋ฉด ์ ์๋ํ๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
์ด๋ ๊ฒ ์ค๋์ ์์ฃผ ๊ฐ๋จํ๊ฒ Spring Cloud Gateway ๋ฅผ ๋ง์ ธ๋ณด๊ณ ๊ฐ๊ฐ ๋ง์ดํฌ๋ก์๋น์ค๋ค๊ณผ ์ฐ๊ฒฐํ์ฌ ๋์์์ผ ๋ณด์๋ค.
์์ง Gateway ์ ์์ฃผ ๊ธฐ๋ณธ์ ์ธ ๋ด์ฉ๋ง ๋ค๋ค์ผ๋ฏ๋ก ๋ค์ ์๊ฐ ๋ถํฐ Filter๋ฅผ ์ด์ฉํด Request์ Response๋ฅผ ์กฐ์ํ๋ ๋ฐฉ๋ฒ์ ๋ํด์ ์์๋ณด์.
๋๊ธ