๐ Spring Cloud Gateway๋ฅผ ํ์ฉํ์ฌ API Gateway๋ฅผ ๊ตฌ์ถํ ๋ Spring Initializr์์ ์์กด์ฑ์ผ๋ก Gateway๋ฅผ ์ถ๊ฐํ๋ฉด ์ ๋๊ณ Reactive Gateway๋ฅผ ์ถ๊ฐํด์ผ ํ๋ ์ด์ ๋ ๋ฌด์์ผ๊น?
โ API Gateway ํ๋ก์ ํธ๋ฅผ ์์ฑํ๊ธฐ ์ํด Spring Initializr์์ ์์กด์ฑ์ผ๋ก Gateway๋ฅผ ์ถ๊ฐํ๋ค๊ฐ ์ดํ์ ์ค์ ๋ค์ด ์ ๋์ง ์์๋ค. ๊ทธ๋์ ์ด์ ๋ฅผ ์ฐพ์๋ดค๋๋ Reactive Gateway๋ฅผ ์ถ๊ฐํ์ด์ผ ํ๋ค. ์?!!! Gateway๊ฐ ์๋ Reactive Gateway๋ฅผ ์ถ๊ฐํด์ผ ํ ๊น? ๊ทธ ์ด์ ์ ๋ํด ์์๋ณด์!!
โญ ์์กด์ฑ์ Gateway๊ฐ ์๋ Reactive Gateway๋ฅผ ์ถ๊ฐํด์ผ ํ๋ ์ด์ ?
๋ง์ดํฌ๋ก์๋น์ค ์ํคํ ์ฒ์์ API Gateway๋ฅผ ๊ตฌ์ถํ๊ธฐ ์ํ ๋๊ตฌ์๋ Spring Cloud Gateway์ Netflix Zuul๊ฐ ์๋ค. Spring Cloud Gateway๋ฅผ ์ฌ์ฉํด์ API Gateway๋ฅผ ๊ตฌ์ถํ๊ธฐ ์ํด์๋ Spring Initializr์์ " Reactive Gateway"๋ฅผ ์ถ๊ฐํด์ผ ํ๋ค.
"Gateway"๋ฅผ ์ถ๊ฐํ๊ฒ ๋๋ฉด, Spring Cloud Gateway๊ฐ ์๋ Netflix Zuul ๋ฐฉ์์ API Gateway ์๋ฃจ์ ์ ์๋ฏธํ๋ค.
Netflix Zuu์ Netflix์์ ์ง์ํ๋ API Gateway ๋ฐฉ์์ธ๋ฐ ์ต๊ทผ์๋ ์ง์์ด ์ค๋จ๋์๊ณ , Spring Cloud Gateway์ ๊ฐ์ ๋ค๋ฅธ ๋์์ ์ ํธํ๋ ์ถ์ธ์ด๋ค.
์ฆ, Netflix Zuu์ ๋ ์ด์ ๊ถ์ฅ๋์ง ์๋ ์ ๊ทผ ๋ฐฉ์์ด๋ฉฐ, Spring Cloud Gateway๊ฐ ๋ ํ๋์ ์ด๊ณ ์ ์ฐํ ๋์์ผ๋ก ๊ฐ์ฃผ๋๋ค.
API Gateway ๋?
API Gateway๋ผ๋ ๊ฒ์, Reverse Proxy์ฒ๋ผ ํด๋ผ์ด์ธํธ ์์ฒญ์ ์๋จ์ ์์นํ๋ค. ๋ง์น ‘๋์ด ๋งจ' ์ญํ ์ฒ๋ผ ๋ค์ด์จ ์์ฒญ๋ค์๊ฒ ์ด๋๋ก ๊ฐ์ผ ํ ์ง ‘๋ผ์ฐํ ’ํด์ค ์ ์๊ณ ๋ค์ด์ค๊ณ ๋๊ฐ๋ ๋ช ๋จ์ ‘๋ก๊น ’ํ ์๋ ์๋ค.
๊ตฌ์ฒด์ ์ผ๋ก๋ ๋ค์๊ณผ ๊ฐ์ ์ญํ ๋ค์ด ์๋ค.
- API ๋ผ์ฐํ
- ์ธ์ฆ ๋ฐ ๊ถํ ๋ถ์ฌ
- ์๋ ์ ํ
- ๋ถํ ๋ถ์ฐ (๋ก๋๋ฐธ๋ฐ์ฑ)
- ๋ก๊น (๋ชจ๋ํฐ๋ง)
- ์ค์ผ์คํธ๋ ์ด์
๋ง์ดํฌ๋ก์๋น์ค ์ํคํ ์ฒ์์ API ๊ฒ์ดํธ์จ์ด๋ฅผ ๊ตฌ์ถํ๊ธฐ ์ํ ๋๊ตฌ์๋ Spring Cloud Gateway์ Netflix Zuul๊ฐ ์๋ค.
Spring Cloud Gateway๋ ๋น๋๊ธฐ ์ฒ๋ฆฌ์ ์ ๋ฆฌํ ๋ฐ๋ฉด, Zuul์ ๊ทธ๋ ์ง ์๊ธฐ ๋๋ฌธ์ ๋ ์ด์ Zuul์ ์ง์ํ์ง ์๊ณ Spring.io ๋ Spring Cloud Gateway๋ฅผ ๊ถ์ฅํ๋ค.
Netflix Zuul ์ด๋?
Netflix Zuul์ Netflix OSS ํ๋ก์ ํธ์ ์ผ๋ถ๋ก์, ์๋ธ๋ฆฟ ๊ธฐ๋ฐ์ ๋๊ธฐ์ ์ํคํ ์ฒ๋ฅผ ์ฌ์ฉํ๋ค. Spring ๊ธฐ๋ฐ์ ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ฌ์ฉํ๊ธฐ ์ํด Spring Cloud Netflix ๋ชจ๋์ ์ฌ์ฉํ์ฌ ํตํฉ๋๋ค.
Zuul์ Netflix์์ ์ง์๋์์ผ๋, ์ต๊ทผ์๋ ์ง์์ด ์ค๋จ๋์๊ณ , Spring Cloud Gateway์ ๊ฐ์ ๋ค๋ฅธ ๋์์ ์ ํธํ๋ ์ถ์ธ์ด๋ค.
์์กด์ฑ
implementation 'org.springframework.cloud:spring-cloud-starter-gateway-mvc'
Spring Cloud Gateway ๋?
Spring Cloud ํ๋ก์ ํธ์ ์ผ๋ถ๋ก์, Spring Boot์ Spring WebFlux๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ค. ๋ฐ๋ผ์ ๋ฆฌ์กํฐ๋ธ ์คํ๋ง ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํ์ฌ ๋น๋๊ธฐ ๋ฐ ๋ ผ๋ธ๋กํน ๋ฐฉ์์ผ๋ก ์์ฒญ์ ์ฒ๋ฆฌํ๋ค.
์์กด์ฑ
implementation 'org.springframework.cloud:spring-cloud-starter-gateway'
Spring Cloud Gateway์ Netflix Zuul์ ์ฐจ์ด์
Spring Cloud Gateway๋ ๊ฐ๊ฐ์ ์์ฒญ์ ์ฒ๋ฆฌํ๊ธฐ ์ํด ์ ์ ์์ ์ค๋ ๋๋ฅผ ์ฌ์ฉํ๋ Event-loop ๋ฐฉ์์ ์ฑํํ๋ค. ์ด๋ Node.js์ ๋น์ทํ ์ ๊ทผ ๋ฐฉ์์ผ๋ก, ๊ฐ ์์ ์ ์์ ๋จ์๋ก ์ชผ๊ฐ์ด ๋์์ ์ฒ๋ฆฌํ๋ ค๊ณ ํ๋ค. ์ด๋ฅผ ํตํด ์ ์ ์์ ์ค๋ ๋๋ก๋ ๋ง์ ์์ ์ ์ฒ๋ฆฌํ ์ ์๋ค.
๋ฐ๋ฉด์ Netflix Zuul์ ์ ํต์ ์ธ ๋ฐฉ์์ผ๋ก, ๊ฐ ์์ฒญ์ ์ฒ๋ฆฌํ๊ธฐ ์ํด Thread pool์ ์ฌ์ฉํ๋ค. ๊ฐ ์์ฒญ์ ๋ณ๋์ ์ค๋ ๋์์ ์ฒ๋ฆฌ๋๋ค.
๋ ๋ฐฉ์์ ์ ํ์ ์๋น์ค์ ์๊ตฌ์ฌํญ๊ณผ ์ฌ์ฉํ๋ ๊ธฐ์ ์ ๋ฐ๋ผ ๋ค๋ฅผ ์ ์๋ค. ํ์ฌ ์ ๋์ํ๊ณ ์๋ ์๋น์ค์ ๋ํด์๋ ๋ณ๊ฒฝํ ํ์๊ฐ ์๋ค. ๊ทธ๋ฌ๋ ๋น๋๊ธฐ ์์ ์ด ๋ง๊ฑฐ๋ ๋ฆฌ์์ค๋ฅผ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํด์ผ ํ๋ ๊ฒฝ์ฐ์๋ Spring Cloud Gateway์ ๊ฐ์ Reactive ํ ์ ๊ทผ ๋ฐฉ์์ ๊ณ ๋ คํ ์ ์๋ค.
Spring Cloud Gateway
- ๊ธฐ์ ์คํ
- Spring Cloud ํ๋ก์ ํธ์ ์ผ๋ถ๋ก์, Spring Boot์ Spring WebFlux๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ค.
- ๋ฐ๋ผ์ ๋ฆฌ์กํฐ๋ธ ํ๋ก๊ทธ๋๋ฐ ๋ชจ๋ธ์ ์ฌ์ฉํ์ฌ ๋น๋๊ธฐ ๋ฐ ๋ ผ๋ธ๋กํน ๋ฐฉ์์ผ๋ก ์์ฒญ์ ์ฒ๋ฆฌํ๋ค.
- ๋์ ๋ฐฉ์
- ๋น๋๊ธฐ์ ์ด๊ณ ๋ ผ๋ธ๋กํน ๋ฐฉ์์ผ๋ก ๋์ํ์ฌ ์ ์ ์ค๋ ๋๋ก๋ ๋ง์ ์์ฒญ์ ์ฒ๋ฆฌํ ์ ์๋ค.
- ์ด๋ฒคํธ ๋ฃจํ(Event Loop) ๋ฐฉ์์ ์ฌ์ฉํ์ฌ ๊ณ ๋ถํ ์ํฉ์์๋ ํจ์จ์ ์ผ๋ก ๋์ํ ์ ์๋ค.
- ์ ํฉํ ์ฌ์ฉ ์ฌ๋ก
- ๊ณ ์ฑ๋ฅ ๋ฐ ํ์ฅ์ฑ์ด ํ์ํ ๊ฒฝ์ฐ์ ์ ํฉํ๋ค.
- ๋น๋๊ธฐ์ ์ด๊ณ ๋ ผ๋ธ๋กํน ๋ฐฉ์์ผ๋ก ์์ฒญ์ ์ฒ๋ฆฌํ์ฌ ์๋ฒ ์์์ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋ค.
- Spring Webflux ์์
- ์ฌ๋ฌ ์ฌ์ฉ์๊ฐ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ์ํ์ฌ ์์ฒญ์ ๋ณด๋ธ๋ค.
- ๊ฐ ์์ฒญ์ ์ด๋ฒคํธ ๋ฃจํ(Event Loop) ๋ฐฉ์์ผ๋ก ์ฒ๋ฆฌ๋๋ค.
- ์ด๋ ์ ์ ์์ ์ค๋ ๋๋ก ๋ง์ ์์ฒญ์ ์ฒ๋ฆฌํ๋ ๋ฐฉ์์ด๋ค.
- ์๋ฅผ ๋ค์ด, ์ฌ์ฉ์ A์ ์์ฒญ์ด ๋์ฐฉํ๋ฉด ํ๋์ ์ด๋ฒคํธ ๋ฃจํ๊ฐ ํด๋น ์์ฒญ์ ์ฒ๋ฆฌํ๊ณ , ์ฌ์ฉ์ B์ ์์ฒญ์ด ๋์ฐฉํ๋ฉด ๋ค๋ฅธ ์ด๋ฒคํธ ๋ฃจํ๊ฐ ํด๋น ์์ฒญ์ ์ฒ๋ฆฌํ๋ค.
- ๊ฐ ์์ฒญ์ ์์ ๋จ์๋ก ์ชผ๊ฐ์ด ๋น๋๊ธฐ์ ์ผ๋ก ์ฒ๋ฆฌ๋๋ฏ๋ก, ๋ง์ ์์ฒญ์ด ๋์์ ๋ค์ด์ค๋๋ผ๋ ์ ์ ์์ ์ค๋ ๋๋ก ํจ์จ์ ์ผ๋ก ์ฒ๋ฆฌํ ์ ์๋ค.
Netflix Zuul
- ๊ธฐ์ ์คํ
- Netflix์์ ๋ง๋ ๋๊ตฌ๋ก, ์๋ธ๋ฆฟ ๊ธฐ๋ฐ์ ๋๊ธฐ์ ์ํคํ ์ฒ๋ฅผ ์ฌ์ฉํ๋ค.
- ์ด๋ ์์ฒญ์ ์ฒ๋ฆฌํ๋๋ฐ ์ค๋ ๋(Thread)๋ฅผ ๋ง์ด ์ฌ์ฉํ๊ณ , ์์ฒญ๋ง๋ค ์ค๋ ๋๋ฅผ ํ ๋นํ์ฌ ์ฒ๋ฆฌํ๋ค.
- ๋์ ๋ฐฉ์
- ๋๊ธฐ์ ์ํคํ ์ฒ๋ฅผ ์ฌ์ฉํ์ฌ ์์ฒญ๋ง๋ค ์ค๋ ๋๋ฅผ ํ ๋นํ์ฌ ์ฒ๋ฆฌํ๋ค.
- ์ฐ๋ ๋ ํ์ ํฌ๊ธฐ์ ๋ฐ๋ผ ํ์ฅ๋๋ฏ๋ก ๋ง์ ์ค๋ ๋๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ฉฐ ๋์ ๋ถํ ์ํฉ์์ ํ์ฅ์ฑ์ด ์ ํ๋ ์ ์๋ค.
- ์ ํฉํ ์ฌ์ฉ ์ฌ๋ก:
- ๊ธฐ์กด์ ์๋ธ๋ฆฟ ๊ธฐ๋ฐ ์ํคํ ์ฒ๋ฅผ ์ฌ์ฉํ๋ ์๋น์ค์ ์ ํฉํ๋ค.
- ๋ํ ๋๊ธฐ์ ๋ฐฉ์์ผ๋ก ์์ฒญ์ ์ฒ๋ฆฌํ๋ ๊ฒ์ ์ ํธํ๋ ๊ฒฝ์ฐ์ ์ฌ์ฉํ ์ ์๋ค.
- Spring MVC ์์
- ์ด ๋ฐฉ์์ ์๋ฒ์์ ๊ฐ๊ฐ์ ์์ฒญ์ ์ฒ๋ฆฌํ ๋๋ง๋ค ์๋ก์ด ์ค๋ ๋(Thread)๋ฅผ ์์ฑํ์ฌ ์์ ์ ์ฒ๋ฆฌํ๋ค.
- ์๋ฅผ ๋ค์ด, Spring Boot ์น ์ ํ๋ฆฌ์ผ์ด์ ์์ ์์ฒญ์ด ๋ค์ด์ค๋ฉด ์๋ก์ด ์ค๋ ๋๋ฅผ ์ฌ์ฉํ์ฌ ํด๋น ์์ฒญ์ ์ฒ๋ฆฌํ๋ค.
- ์ด ๋ฐฉ์์ ๊ฐ๊ฐ์ ์์ฒญ๋ง๋ค ์ค๋ ๋๋ฅผ ํ ๋นํ๊ธฐ ๋๋ฌธ์ ๋์์ ์ฒ๋ฆฌํ ์ ์๋ ์์ฒญ์ ์๊ฐ ์ ํ๋๋ค.
- ๋ํ, ์ค๋ ๋๋ฅผ ๊ด๋ฆฌํ๋๋ฐ ๋ณต์ก์ฑ์ด ์ฆ๊ฐํ ์ ์๋ค.
๋ฐ๋ผ์, Spring Cloud Gateway๋ ๋น๋๊ธฐ์ ์ด๊ณ ํจ์จ์ ์ธ ์์ฒญ ์ฒ๋ฆฌ๋ฅผ ์ํ ๋๊ตฌ์ด๋ฉฐ, Netflix Zuul์ ๊ธฐ์กด์ ๋ฐฉ์์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์ ์ ํฉํ ๋๊ตฌ์ ๋๋ค. ์์ฒญ์ ์ฒ๋ฆฌ ๋ฐฉ์๊ณผ ์ฑ๋ฅ, ํ์ฅ์ฑ์ ๋ฐ๋ผ ์ ์ ํ ๋๊ตฌ๋ฅผ ์ ํํด์ผ ํ๋ค.
์ฐธ๊ณ ์๋ฃ
https://devuna.tistory.com/108