[MSA ๊ตฌ์ถํ๊ธฐ] 9. API Gateway์ Eureka ์๋ฒ ์ฐ๋ํ๊ธฐ (API Gateway)
๐ ์ฐ๋ฆฌ๋ Spring Cloud๋ฅผ ํ์ฉํ์ฌ MSA๋ฅผ ๊ตฌ์ถํ๋ค.
๐ ์ด๋ฒ์๋, API Gateway๋ฅผ Eureka ํด๋ผ์ด์ธํธ๋ก ๋ฑ๋กํ์ฌ API Gateway์ Eureka ์๋ฒ๋ฅผ ์ฐ๋ํ ๊ฒ์ด๋ค.
API Gateway์ Eureka ์๋ฒ ์ฐ๋ ํ๋ก์ธ์ค
ํด๋ผ์ด์ธํธ๊ฐ API Gateway์ ์์ฒญ์ ํ๋ฉด API Gateway ๊ฐ Eureka server์ ๋ฑ๋ก๋ ์๋น์ค๋ค์ ์กฐํํ๊ณ ํด๋น ์๋น์ค๋ก ๋ผ์ฐํ ์ ํด์ค๋ค.
์๋ฅผ ๋ค์ด, ๋ก๊ทธ์ธ์ ํ๋ค๋ ๊ฐ์์ ์๋๋ฆฌ์ค์ ๋ํด ์ด๋ป๊ฒ ๋์ํ๋์ง ์ดํด๋ณด์.
- โ : ๊ฐ ์ธ์คํด์ค๋ฅผ ์คํํ์ฌ ์ ๋ ์นด ์๋ฒ์ ๋ฑ๋กํ๋ค.
- ์๋ก์ด ์ธ์คํด์ค๋ ์์ํ ๋ ์ ๋ ์นด ์๋ฒ์ IP, ํธ์คํธ ์ฃผ์, ํฌํธ ์ ๋ณด ๋ฑ์ ์ ๋ฌํ๋ค.
- ์ ๋ ์นด ์๋ฒ๋ ๋ฑ๋ก๋ ์ธ์คํด์ค๋ค์ ์ฃผ๊ธฐ์ ์ผ๋ก ์ํ๋ฅผ ์ฒดํฌํ๋ฉด์ ํด๋น ์ธ์คํด์ค๋ฅผ ๊ด๋ฆฌํ๋ค.
- โก: ํด๋ผ์ด์ธํธ์์ ๋ก๊ทธ์ธ ์์ฒญ์ด API ๊ฒ์ดํธ๋ก ์จ๋ค.
- โขโฃ: API ๊ฒ์ดํธ์จ์ด์์ ๋ฐ์ ๋ก๊ทธ์ธ ์์ฒญ์ ์ด๋ค ์ธ์คํด์ค์์ ์ฒ๋ฆฌํ ์ ์์์ง ์๋น์ค ๋์ค์ปค๋ฒ๋ฆฌ์์ ์ฐพ๋๋ค.
- ๋งค๋ฒ ์ง์ํ์ง ์๊ณ ์ธ์คํด์ค ์ ๋ณด๋ฅผ ์บ์ฑํ๋ค.
- โค: API ๊ฒ์ดํธ์จ์ด๋ ๋ก๊ทธ์ธ ์ฒ๋ฆฌ ์์ฒญ์ Auth Service์ ํ๋ค.
- โฅ: Auth Service์ ์๋ต ๊ฒฐ๊ณผ๋ฅผ ํด๋ผ์ด์ธํธ์ ์ ๋ฌํ๋ค.
๊ฒ์ดํธ์จ์ด์ Eureka ์๋ฒ ์ฐ๋
Eureka ์๋ฒ๋ ๊ฐ๊ฐ์ ๋น์ฆ๋์ค ๋ก์ง ์ฒ๋ฆฌ๋ฅผ ๋ด๋นํ๋ ์คํ๋ง ๋ถํธ ์ ํ๋ฆฌ์ผ์ด์ ๋ชฉ๋ก๋ค์ ๊ฐ์ง๊ณ ์๋ค.
MSA๋ฅผ ๊ตฌ์ฑํ๋ ์์๋ ์๋์ผ๋ก ์คํ ์ค์ผ์ผ๋ง๋๊ธฐ ๋๋ฌธ์ ์๋ก ์๊ธด ์๋ฒ์ IP๋ฅผ ๊ฒ์ดํธ์จ์ด๊ฐ ์์ง ๋ชปํ๋ค.
๋ฐ๋ผ์ Eureka ์๋ฒ๊ฐ ํด๋น ๋ชฉ๋ก๋ค์ ๊ด๋ฆฌํ๋ฉฐ Gateway์๊ฒ ์ ๋ฌํ๋ค.
์คํ๋ง ํด๋ผ์ฐ๋ ๊ฒ์ดํธ์จ์ด Eureka ํด๋ผ์ด์ธํธ ์ค์
1. Eureka ํด๋ผ์ด์ธํธ ์ค์ ์ ์ํ ์์กด์ฑ ์ถ๊ฐ
(1) ๊ธฐ์กด apigateway-service์ build.gradle์ ์์กด์ฑ ์ถ๊ฐํ๊ธฐ
// build.gradle
ext {
set('springCloudVersion', "2023.0.0")
}
dependencies {
implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-client'
}
dependencyManagement {
imports {
mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
}
}
(2) ์ฒ์ ๋ถํฐ Spring Initializr์์ apigateway-service๋ฅผ ์์ฑํ ๋ ์์กด์ฑ ๊ฐ์ด ๋ฑ๋กํ๊ธฐ
3. Eureka ์๋ฒ์ ์ฐ๊ฒฐ
apigateway-service์ application.yml ํ์ผ์์ ๋ณ์ ์ค์ ์ ํตํด Eureka ์๋ฒ์ ๋ฑ๋กํ ์ ์๋ค.
# application.yml
# eureka ํด๋ผ์ด์ธํธ ์ค์ (eureka ์๋ฒ์ ์ฐ๊ฒฐ)
eureka:
client:
# eureka ์๋ฒ์ ๋ฑ๋กํ ์ง ์ฌ๋ถ
register-with-eureka: true
# eureka ์๋ฒ๋ก ๋ถํฐ ์ธ์คํด์ค๋ค์ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ฌ ๊ฒ์ธ์ง ์ค์ ํ๋ ์์ฑ
fetch-registry: true
# eureka ์๋ฒ ์ฃผ์์ ๋ง์ดํฌ๋ก์๋น์ค ์ ๋ณด ๋ฑ๋ก
service-url:
defaultZone: http://admin:1234mst@localhost:8761/eureka
apigateway-service์ application.yml ํ์ผ ์ ์ฒด
# application.yml
server:
port: 8000
# eureka ํด๋ผ์ด์ธํธ ์ค์ (eureka ์๋ฒ์ ์ฐ๊ฒฐ)
eureka:
client:
# eureka ์๋ฒ์ ๋ฑ๋กํ ์ง ์ฌ๋ถ
register-with-eureka: true
# eureka ์๋ฒ๋ก ๋ถํฐ ์ธ์คํด์ค๋ค์ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ฌ ๊ฒ์ธ์ง ์ค์ ํ๋ ์์ฑ
fetch-registry: true
# eureka ์๋ฒ ์ฃผ์์ ๋ง์ดํฌ๋ก์๋น์ค ์ ๋ณด ๋ฑ๋ก
service-url:
defaultZone: http://admin:1234mst@localhost:8761/eureka
spring:
application:
name: apigateway-service
cloud:
gateway:
routes:
- id: user-service
uri: http://localhost:8081/
predicates:
- Path=/user-service/**
filters:
- RewritePath=/user-service/(?<segment>.*),/$\{segment}
- id: beverage-service
uri: http://localhost:8082/
predicates:
- Path=/beverage-service/**
filters:
- RewritePath=/beverage-service/(?<segment>.*),/$\{segment}
- id: community-service
uri: http://localhost:8083/
predicates:
- Path=/community-service/**
filters:
- RewritePath=/community-service/(?<segment>.*),/$\{segment}
Spring Cloud Eureka ์๋ฒ ์คํ
์ฐธ๊ณ ์๋ฃ
https://covenant.tistory.com/251
https://covenant.tistory.com/252
https://velog.io/@boo105/MSA-EUREKA-%EA%B5%AC%EC%B6%95%ED%95%98%EA%B8%B0