๐ ์ฐ๋ฆฌ๋ Spring Cloud๋ฅผ ํ์ฉํ์ฌ MSA๋ฅผ ๊ตฌ์ถํ๋ค.
๐ ์ด๋ฒ์๋, Spring Cloud Gateway๋ฅผ ์ฌ์ฉํ์ฌ API Gateway๋ฅผ ๊ตฌ์ถํ ๊ฒ์ด๋ค.
API Gateway ํํธ 1
API Gateway๋?
์ฌ์ฉ์๊ฐ ์ค์ ํ Routing ์ค์ ์ ๋ฐ๋ผ ๊ฐ endpoint๋ก client๋ฅผ ๋์ ํด์ ์์ฒญํ๊ณ , ์๋ต์ ๋ฐ์ผ๋ฉด ๋ค์ client์๊ฒ ์ ๋ฌํด์ฃผ๋ ์ญํ ์ ํ๋ค.
Spring Cloud์์๋ Spring Cloud Gateway๊ฐ API Gateway์ ์ญํ ์ ์ํํ๋ค.
Spring Cloud Gateway๋?
์คํ๋ง ํด๋ผ์ฐ๋ ๊ฒ์ดํธ์จ์ด๋ MSA ๊ฐ์ฅ ์๋จ์์ ํด๋ผ์ด์ธํธ๋ค๋ก ๋ถํฐ ์ค๋ ์์ฒญ์ ๋ฐ์ ํ ๊ฒฝ๋ก์ ์กฐ๊ฑด์ ์๋ง์ ๋ง์ดํฌ๋ก์๋น์ค ๋ก์ง์ ์์ฒญ์ ์ ๋ฌํ๋ ๊ฒ์ดํธ์จ์ด์ด๋ค. ๊ฒ์ดํธ์จ์ด๋ ๊ฐ๋ ์ ์ผ๋ก๋ ์์ฃผ ๋จ์ํ์ง๋ง ๊ฐ์ฅ ์๋จ์์ ๋ฌด์ค์ง ์ํ๋ก ๋ชจ๋ ์์ฒญ์ ๋ฐ์์ผํ๊ธฐ ๋๋ฌธ์ ์ค์ ํ๊ธฐ์ ๊น๋ค๋กญ๋ค.
Spring Cloud Gateway์ ํน์ฑ
๊ธฐ์กด์ ์ ์ํ๋ ์คํ๋ง ๋ถํธ, Eureka, Config์ ๊ฐ์ ์๋น์ค๋ค์ ๋ธ๋กํน ๊ธฐ๋ฐ์ผ๋ก ๋ชจ๋ ํฐ์บฃ ์์ง์ ์ฌ์ฉํ๋ค.
ํ์ง๋ง ๊ฒ์ดํธ ์จ์ด์ ๊ฒฝ์ฐ ๋น์ฆ๋์ค ๋ก์ง ์ฒ๋ฆฌ ๋ณด๋จ ๋จ์ํ๊ฒ ์ง๋๊ฐ๋ ํต๋ก ์ฆ, I/O ์ฒ๋ฆฌ๋ฅผ ์ค์ ์ ์ผ๋ก ์งํํ๊ธฐ ๋๋ฌธ์ ๋ ผ ๋ธ๋กํน ๋ฐฉ์์ผ๋ก ๋์ํ๋ WebFlux์ ๋คํฐ์์ง์ ์ฌ์ฉํ๋ค.
WebFlux๋ ๊ธฐ์กด์ ์คํ๋ง ๋ถํธ์์ ์ฌ์ฉํ๋ JPA์ ๊ฐ์ ๋ธ๋กํน ๋ฐฉ์์ ์์กด์ฑ๋ค์ ๋ชจ๋ ์ฌ์ฉํ์ง ๋ชปํ๊ธฐ ๋๋ฌธ์ ๊ตฌํ์ ์์ ๋ง์ ํ์ต์ด ํ์ํ๋ค.
๐ Spring Cloud์์ ์ ๊ณตํ๋ Spring Cloud Gateway๋ฅผ ํ์ฉํ์ฌ API Gateway๋ฅผ ๊ตฌ์ถํ ๊ฒ์ด๋ค.
Spring Cloud Gateway ํ๋ก์ ํธ ์์ฑํ๊ธฐ
1. ํ๋ก์ ํธ ์์ฑ
Spring Cloud Gateway ์ค์ ์ ์ํ ์์กด์ฑ ์ถ๊ฐ
ํ์ ์์กด์ฑ
- Reactive Gateway
// build.gradle
ext {
set('springCloudVersion', "2023.0.0")
}
dependencies {
implementation 'org.springframework.cloud:spring-cloud-starter-gateway'
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testImplementation 'io.projectreactor:reactor-test'
}
dependencyManagement {
imports {
mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
}
}
Spring Initializr์์ ์์กด์ฑ์ผ๋ก Reactive Gateway๋ฅผ ์ถ๊ฐํด์ผํ๋ค. Gateway๋ฅผ ์ถ๊ฐํ๋ฉด ์๋๋ค!!!!
๐ ๊ทธ ์ด์ ๊ฐ ๊ถ๊ธํ๋ค๋ฉด ์๋ ํฌ์คํ ์ ์ฝ์ด๋ณด์.
์ฐธ๊ณ ์๋ฃ
https://velog.io/@korea3611/Spring-Boot-Spring-Cloud-Gateway-%EB%A7%8C%EB%93%A4%EA%B8%B0-MSA2
https://substantial-park-a17.notion.site/8-84d3a62b9a214035a42ab49aae704a34