๐ ์ฐ๋ฆฌ๋ Spring Cloud๋ฅผ ํ์ฉํ์ฌ MSA๋ฅผ ๊ตฌ์ถํ๋ค.
๐ ์ด๋ฒ์๋, API Gateway์ ๋ผ์ฐํ ์ ์ค์ ํ ๊ฒ์ด๋ค.
API Gateway ํํธ 2
๋ง์ดํฌ๋ก์๋น์ค ์๋ฒ๋ฅผ 2๊ฐ ์ด์ ์ค๋นํ์.
๋ผ์ฐํ ์ ์ค์ ํ๋ ๋ฐฉ๋ฒ์๋ 3๊ฐ์ง๊ฐ ์๋ค.
- application.properties๋ฅผ ํตํ ๊ฒฝ๋ก ์ค์
- application.yml๋ฅผ ํตํ ๊ฒฝ๋ก ์ค์
- Config ํด๋์ค๋ฅผ ํ์ฉํ ๊ฒฝ๋ก ์ค์ (์ง์ Java ์ฝ๋ ์์ฑ)
Spring Cloud Gateway ๊ณต์๋ฌธ์์ 5๋ฒ์งธ ์นดํ ๊ณ ๋ฆฌ 5. Route Predicate Factories์ ๋ค์ํ ๋ผ์ฐํ ์ ๋ต์ด ์๋ค.
Spring Cloud Gateway ๊ณต์๋ฌธ์
๐ ์ฐ๋ฆฌ๋ application.yml ์ค์ ์ ํตํด Path๊ธฐ๋ฐ์ ๋ผ์ฐํ ์ ์ค์ ํ ๊ฒ์ด๋ค.
์ค๋น๋ ๋ง์ดํฌ๋ก์๋น์ค ํ์ธํ๊ธฐ
์์ ์์ฑํ 3๊ฐ์ ๋ง์ดํฌ๋ก์๋น์ค๊ฐ ์๋ค.
- user-service
- beverage-service
- community-service
๊ฐ ์๋น์ค์ ๋๋คํฌํธ๋ฅผ ์ง์ ํ์ง๋ง API Gateway ํ ์คํธ๋ฅผ ์ํด ๊ฐ ์๋น์ค์ ํฌํธ๋ฅผ ์ง์ ํ๋ค.
1. user-service์ ํฌํธ๋ฒํธ๋ 8081๋ฒ์ผ๋ก ์ง์
# user-service - application.yml
# ํ์ฌ ํ๋ก์ ํธ ํฌํธ ์ง์
server:
port: 8081
# ํ์ฌ ํ๋ก์ ํธ ์ด๋ฆ ์ง์
spring:
application:
name: user-service
2. beverage-service์ ํฌํธ๋ฒํธ๋ 8082๋ฒ์ผ๋ก ์ง์
# beverage-service - application.yml
server:
port: 8082
spring:
application:
name: beverage-service
3. community-service์ ํฌํธ๋ฒํธ๋ 8083๋ฒ์ผ๋ก ์ง์
# community-service - application.yml
server:
port: 8083
spring:
application:
name: community-service
Spring Cloud Gateway ๋ผ์ฐํ ์ค์ ํ๊ธฐ
API Gateway์ ํฌํธ ๋ฒํธ๋ 8000๋ฒ์ผ๋ก ์ง์ ํ๋ค.
# apigateway-service - application.yml
server:
port: 8000
spring:
application:
name: apigateway-service
cloud:
gateway:
routes:
- id: user-service
# ์ด๋๋ก ๊ฐ๊บผ๋?
uri: http://localhost:8081/
# ์กฐ๊ฑด์
predicates:
- Path=/user-service/**
- id: beverage-service
uri: http://localhost:8082/
predicates:
- Path=/beverage-service/**
- id: community-service
uri: http://localhost:8083/
predicates:
- Path=/community-service/**
- spring: cloud: gateway: routes:
- ๋ผ์ฐํ ์ค์
- spring: cloud: gateway: routes: - id:
- ์ ํ๋ฆฌ์ผ์ด์ ๊ณ ์ ์ด๋ฆ
- ๊ตฌ๋ถํ๊ธฐ ์ํ id๊ฐ์ผ๋ก ์์๋ก ์์ฑํด๋ ๋ฌด๊ดํ๋ค.
- spring: cloud: gateway: routes: - uri:
- ์ง์ ์ฃผ์
- spring: cloud: gateway: routes: - predicates:
- ๋ผ์ฐํ ์กฐ๊ฑด (์กฐ๊ฑด์ )
- spring: cloud: gateway: routes: - predicates: - Path =
- Path๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ผ์ฐํ ์ ์ค์
- ex) - Path = /user-service/**
- http://localhost:8000/user-service/ ์ผ๋ก ์์ฒญ์ด ๋ค์ด์ค๋ฉด ์ ๋ ์นด ์๋ฒ์์ uri์ ํด๋นํ๋ ์ฃผ์๋ฅผ ์ฐพ์ ๊ทธ๊ณณ์ผ๋ก ์์ฒญ์ ๋ณด๋ธ๋ค.
Spring Cloud Gateway ์๋ฒ ์คํ
๊ฐ ๋ง์ดํฌ๋ก์๋น์ค ์๋ฒ๋ฅผ ๋จผ์ ์คํํ ํ์ API Gateway ์๋ฒ๋ฅผ ์คํํด์ผ ํ๋ค.
์ด๋๋ก ๋ผ๋ฉด "http://localhost:8081/"๊ณผ "http://localhost:8000/user-service/"๋ฅผ ์คํํ์ ๋ ๊ฐ์ ๊ฒฐ๊ณผ๊ฐ ๋ํ๋์ผ ํ๋ค.
1. user-service ์๋ฒ ์คํ
user-service์ "http://localhost:8081/"์ ์ฃผ์๋ก ์คํํ๋ฉด "user-service"๋ผ๋ ๊ธ์๊ฐ ๋ํ๋๋ค.
2. apigateway-service ์๋ฒ ์คํ
apigateway-service์ "http://localhost:8000/user-service/"์ ์ฃผ์๋ก API๋ฅผ ์คํํ๋ฉด "user-servicer"๋ผ๋ ๊ธ์๊ฐ ๋ณด์ด์ง ์๋๋ค.
๐ "http://localhost:8081/"๊ณผ "http://localhost:8000/user-service/"๋ฅผ ์คํํ์ ๋ ๊ฐ์ ๊ฒฐ๊ณผ๊ฐ ๋ํ๋์ผ ํ๋๋ฐ ์์ ๊ฒฐ๊ณผ๊ฐ์ ๋ณด๋ฉด ๋ค๋ฅด๋ค. ๊ทธ ์ด์ ๋ฅผ ์์๋ณด์.