๋ชฉ์ฐจ
์ด๋ฒ์ ํ๋ก์ ํธ๋ฅผ ์งํํ๋ฉด์ MSA ๋ฐฉ์์ ๋์ ํด๋ณด๊ธฐ๋ก ํ์๋ค. ๊ทธ๋์ MSA ์ ๋ํ ๊ณต๋ถ๋ ํ๊ณ ์ด๋ ต๊ฒ ํ๋ก์ ํธ ์ธํ ๊น์ง ํ์ง๋ง.. ์งํํ๋ ค๋ ํ๋ก์ ํธ๊ฐ MSA ๋ฅผ ์ฌ์ฉํ ๋งํ ํ๋ก์ ํธ๋ ์๋ ๋ฟ๋๋ฌ, ๋นํจ์จ์ ์ธ ๋ถ๋ถ์ด ๋ง์์ (์๋ฒ๋ฅผ ์ฌ๋ฌ๊ฐ ์ผ์ผํจ) ๊ฒฐ๊ตญ MSA ๋ฐฉ์์ ํฌ๊ธฐํ๊ฒ๋์๋ค. ใ ใ ๊ทธ๋์ ์ด๋ก ์ด๋ผ๋ ๋์ ๋์ ํด ๋ณผ ์์ ..
๋ํ ๊ฐ๋
API Gateway : Spring Cloud Gateway ์ Webflux ๋ก ๊ตฌํ
Service Discovery : Netflix Eureka ์ฌ์ฉ์ผ๋ก ๊ตฌํ
Config Server : Spring Cloud Config ์ฌ์ฉ์ผ๋ก ๊ตฌํ
MSA๋?
MSA(Microservices Architecture, ๋ง์ดํฌ๋ก์๋น์ค ์ํคํ ์ฒ)๋
์ ํ๋ฆฌ์ผ์ด์ ์ ์์ ์๋น์ค ๋จ์๋ก ๋๋์ด ๊ฐ๋ฐํ๋ ์ํํธ์จ์ด ์ํคํ ์ณ์ด๋ค.
์ฆ ์ฌ๋ฌ๊ฐ์ ๋ ๋ฆฝ์ ์ธ ์๋น์ค๋ก ๋๋๊ฒ ๋๊ณ , ์๋น์ค ๊ฐ์ ํต์ ์ API ๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ค.
Spring Cloud Service Discovery (2๊ฐ์ง ํจํด)
msa ๋ฐฉ์์์๋ ๊ธฐ๋ฅ๋ณ (์๋น์ค๋ณ) ๋ก ํ๋ก์ ํธ๊ฐ ๋๋์ด์ง๋ค.
์ด๋ ์๋น์ค๋ณ IP ์ Port ๋ฅผ ์ ์ฅํ๊ณ ๊ด๋ฆฌํ ํ์๊ฐ ์๋๋ฐ ์ด ๋ ํ์ํ๊ฒ Spring Cloud Service Discovery ์ด๋ค.
์๋ ๋๊ฐ์ง ๋ฐฉ์์ผ๋ก ๊ตฌํํ ์ ์๋ค.
Client-Side Discovery ํจํด
- ์๋น์ค๊ฐ ์ง์ Service Register(์๋น์ค ๋ ์ง์คํธ๋ฆฌ)์์ ๋ค๋ฅธ ์๋น์ค์ ์์น๋ฅผ ์กฐํํ์ฌ ํธ์ถํจ.
- ํด๋ผ์ด์ธํธ๊ฐ ๋ก๋ ๋ฐธ๋ฐ์ฑ ๋ฐฉ๋ฒ์ ์ง์ ์ ํํ์ฌ ์๋น์ค ํธ์ถ ๊ฐ๋ฅ.
Server-Side Discovery ํจํด
- ํด๋ผ์ด์ธํธ๋ ์๋น์ค์ ์์น๋ฅผ ์ง์ ์ฐพ์ง ์๊ณ , Load Balancer(๋ก๋ ๋ฐธ๋ฐ์)๋ฅผ ํธ์ถ.
Load Balancer (LB)
๋ก๋ ๋ฐธ๋ฐ์(Load Balancer)๋ ์ฌ๋ฌ ๊ฐ์ ์๋ฒ์ ํธ๋ํฝ์ ๊ณ ๋ฅด๊ฒ ๋ถ์ฐ์ํค๋ ์ญํ ์ ์ํํจ.
์ด๋ฅผ ํตํด ํน์ ์๋ฒ์ ๊ณผ๋ถํ๊ฐ ๊ฑธ๋ฆฌ๋ ๊ฒ์ ๋ฐฉ์งํ๊ณ , ์๋น์ค ๊ฐ์ฉ์ฑ์ ๋์.
CI/CD ํ๋ก์ธ์ค์์ ์ฐ๊ฒฐ์ ๋ณด๊ฐ ์ง์์ ์ผ๋ก ๋ณ๊ฒฝ๋จ, ์ด ๊ฒฝ์ฐ LB ์ ์๋กญ๊ฒ ๋ฑ๋กํด์ผํ๋๋ฐ...
์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด Eureka ๊ฐ ๋ฑ์ฅํจ
API Gateway (→ Spring Cloud Gateway ์ Webflux)
ํด๋ผ์ด์ธํธ๊ฐ ์์ฒญํ๋ ์ฌ๋ฌ ์๋น์ค์ ๋ํ ์์ฒญ์ ํ๋์ ์๋ํฌ์ธํธ๋ก ๋ชจ์ ๋ผ์ฐํ ํ๋ค.
์ฆ mvc ์์์ controller ์ ๋น์ทํ ๋๋์ด๋ผ๊ณ ๋ณด๋ฉด ๋๊ฒ ๋ค. (๊ทธ ๋ฒ์๊ฐ ์ปค์ง)
๋ค์ด์จ ์์ฒญ์ ์ ์ ํ ์๋น์ค์๊ฒ ์ ๋ฌํด์ฃผ๊ณ ๋ค์ํ ๋ถ๊ฐ ๊ธฐ๋ฅ๋ ์ฒ๋ฆฌํจ
Spring Cloud Gateway + WebFlux( ๋น๋๊ธฐ์ ์ด๊ณ ๋ ผ๋ธ๋กํน ๋ฐฉ์) ์ ์ฌ์ฉํด์ ๊ตฌํํ๋ค.
โ ๋์ ์ฐจ์ด์
- API ๊ฒ์ดํธ์จ์ด๋ API ๊ด๋ฆฌ์ ๋ผ์ฐํ ์ ์ด์
- ๋ก๋ ๋ฐธ๋ฐ์๋ ํธ๋ํฝ ๋ถ์ฐ๊ณผ ์๋ฒ ๋ถํ ๊ด๋ฆฌ์ ์ค์
Service Registry
์๋น์ค ์ธ์คํด์ค์ ๋ฉํ๋ฐ์ดํฐ(์๋น์ค ์ด๋ฆ, IP ์ฃผ์, ํฌํธ, ์ํ ๋ฑ)๋ฅผ ์ค์์์ ๊ด๋ฆฌํ๋ ์์คํ
์๋น์ค ์์น๋ฅผ ๋์ ์ผ๋ก ์ฐพ์๊ฐ ์ ์๋ค.
Service Registry (→ Netflix Eureka)
Neflix์์ ์ ๊ณตํ MSA๋ฅผ ์ํ ํด๋ผ์ฐ๋ ์คํ ์์ค์. ์๋น์ค ๋์ค์ปค๋ฒ๋ฆฌ๋ฅผ ์ ๊ณต
์๋น์ค๋ค์ ์ ๋ ์นด ํด๋ผ์ด์ธํธ๋ก ๋ฑ๋ก๋๊ณ , ์ ๋ ์นด ์๋ฒ์์๋ IP ์ ๊ฐ์ ์ฐ๊ฒฐ ์ ๋ณด๋ค์ ์ ์ฅํจ
Eureka Server
- ์๋น์ค ๋ ์ง์คํธ๋ฆฌ ์ญํ ์ ์ํ.
- ๋ชจ๋ ์๋น์ค๋ ์์ ์ ๋ฑ๋กํ๊ณ , ๋ค๋ฅธ ์๋น์ค์ ์์น๋ฅผ ์ฐพ์ ๋ ์ด๊ณณ์ ์กฐํํจ.
Eureka Client
- Eureka Server์ ์์ ์ ์ ๋ณด๋ฅผ ๋ฑ๋กํ๊ณ , ํ์ํ ๋ ๋ค๋ฅธ ์๋น์ค์ ์ ๋ณด๋ฅผ ์กฐํํจ.
- ์๋น์ค ๊ฐ ํต์ ์ Service Register๋ฅผ ์กฐํํ์ฌ ๋์ ์ผ๋ก ์๋น์ค ์์น๋ฅผ ์ฐพ์ ์ ์์.
Config Server (→ Spring Cloud Config ์ฌ์ฉ)
๋ถ์ฐ ์์คํ ํ๊ฒฝ์์ ์ค์ ์ ๋ณด๋ฅผ ๊ด๋ฆฌํ๋ค. ๋ค์ํ ์๋น์ค๊ฐ ์ด ์ค์ ์ ๊ณต์ ํ๋๋ก ๋์
์ฆ ๋๋์ด์ง ์๋น์ค๋ค์ ์ค์ ํ์ผ์ ํ๋ฒ์ ๊ด๋ฆฌํ๊ณ ์ ๊ณตํด์ค
- (์ฅ์ ) ์ฌ๋ฌ ์๋น์ค(ํ๋ก์ ํธ)๋ค์ ์ค์ ํ์ผ์ ์ธ๋ถ๋ก ๋ถ๋ฆฌํด์ ์ค์ ์ค์ ์ ์ฅ์ ์ฒ๋ผ ์ฌ์ฉํ์ฌ ๊ด๋ฆฌํ๊ฒ ํจ
- (์ฅ์ ) ํน์ ์ค์ ์ด ๋ณ๊ฒฝ ์ ๊ฐ๊ฐ ์๋น์ค ์ฌ๊ฐ๋ ํ์์์ด ์ ์ฉ ๊ฐ๋ฅ
- (๋จ์ ) git ์๋ฒ/ ์ค์ ์๋ฒ ์ฅ์ ๊ฐ ์ ํ ๋ ์ ์์
- (๋จ์ ) ์ฐ์ ์์ ๋ฌธ์ ๋ก ์ค์ ์ ๋ณด ํ์ผ์ด ๋ฎ์ด์์ ์ง ์ ์์
https://f-lab.kr/insight/api-gateway-and-load-balancer
https://mangkyu.tistory.com/253
https://velog.io/@jkijki12/Eureka%EB%9E%80
https://ksh-coding.tistory.com/135
https://mangchhe.github.io/springcloud/2021/04/06/SpringCloudNetflixEureka/