[โ๏ธ Spring Cloud] MSA์ Spring Cloud
์ฌ๋ฌ ๊ธฐ์ ๋ค์ ์ฑ์ฉ ๊ณต๊ณ ๋ฅผ ํ์ธํ ๋๋ง๋ค 'MSA' ๊ฐ ์ธ๊ธ๋๋ ๊ฒฝ์ฐ๊ฐ ๋ง์๋ค.
MSA๊ฐ ๋ฌด์์ด๊ธธ๋ ๊ธฐ์ ๋ง๋ค ์ธ๊ธํ๋ ๋น๋๊ฐ ์ฆ์์ง ํ์ ํด๋ณด๊ณ , MSA๋ฅผ ๊ตฌ์ถํ๊ณ ๊ด๋ฆฌํ ์ ์๋ Spring Cloud์ ๋ํด ์์๋ณด๊ฒ ๋ค.
โ Cloud Native Architecture ๋?
๐ท ํด๋ผ์ฐ๋ ๊ธฐ๋ฐ ๊ตฌ์กฐ์ ํน์ง
- ํ์ฅ ๊ฐ๋ฅํ ์ํคํ
์ณ
- ์๋ฒ ๊ณ์ ์ค์น X โ ํด๋ผ์ฐ๋ ๋ด์์ ์๋ฒ ์ธ์คํด์ค ๋๋ ค์ ํ์ฅ์ํค๊ธฐ (scale out)
- ํ๋ ฅ์ ์ํคํ
์ณ
- ์๋์ผ๋ก ํ๋ก์ ํธ๋ฅผ buildํ ํ ๋ฐฐํฌ X โ CI/CD๋ฅผ ํตํด ์๋์ผ๋ก ๋น๋ ํ ๋ฐฐํฌ ๐ ๋น์ฆ๋์ค ํ๊ฒฝ ๋ณํ์ ๋ํ ๋์ ์๊ฐ ๋จ์ถ
- ๋ถํ ๋ ๋ ๋ฆฝ์ ์ธ ์๋น์ค โ ์ดํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ฑํ๋ ๋๋ฉ์ธ ํน์ฑ์ ๋ฐ๋ผ ์๋น์ค ๊ฒฝ๊ณ ๊ตฌ๋ถ ๐ ์๋น์ค ์ข ์์ฑ ์ต์ํ & ์ํ X
- DiscoveryService โ ํด๋น ์๋น์ค์ ์์น๋ฅผ ์ฐพ๊ณ ์์ฒญ ์ ๋ฌ & ๊ฐฑ์ , ๋ฑ๋ก ๊ฒ์ ๋ฑ ๐ ์๋น์ค๋ค์ด ๋ ๋ฆฝ์ ์ผ๋ก ๋ฐฐํฌ๋๊ณ ํ์ฅ
- ์ฅ์ ๊ฒฉ๋ฆฌ
- ํน์ ์๋น์ค์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋๋ผ๋ ๋ค๋ฅธ ์๋น์ค์ ์ํฅ X
๐ท ํด๋ผ์ฐ๋ ๋ค์ดํฐ๋ธ๋ฅผ ์ํ 4๊ฐ์ง ํต์ฌ ์์
- DevOps
- CI/CD
- Containers
- Microservices
1๏ธโฃ DevOps
- ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ์๋น์ค๋ฅผ ๋น ๋ฅธ ์๋๋ก ์ ๊ณตํ ์ ์๋๋ก ํจ
- ์์ ํ๊ณ ์์ ์ ์ธ ๋ฐฉ์์ผ๋ก ์ ์ํ ์ ๋ฐ์ดํธ ์ ๊ณต
2๏ธโฃ CI/CD
- ์๋ํ๋ ๋น๋ ๋ฐ ํ ์คํธ๊ฐ ์ํ๋ ํ ์ฝ๋ ๋ณ๊ฒฝ ์ฌํญ์ ์ ๊ธฐ์ ์ผ๋ก ๋ณํฉํจ์ผ๋ก์จ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌ
3๏ธโฃ Containers
- ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ๊ทธ์ ํ์ํ ๋ชจ๋ ์ข ์์ฑ์ ํจํค์งํ์ฌ ๋ ๋ฆฝ์ ์ผ๋ก ์คํํ ์ ์๊ฒ ํ๋ ํ๊ฒฝ ์ ๊ณต
4๏ธโฃ Microservices
- ์ฌ๋ฌ ๊ฐ์ ์์ ๋ ๋ฆฝ์ ์ธ ์๋น์ค๋ก ๋๋๊ณ ๊ฐ ์๋น์ค๊ฐ ํน์ ์ ๋ฌด๋ ๊ธฐ๋ฅ ์ํํ๋๋ก ๊ตฌ์ถ
MSA (Miroservice Architecture)
Monolithic ๊ตฌ์กฐ๋ ๋ชจ๋ ์ ๋ฌด ๋ก์ง์ด ํ๋์ ์ดํ๋ฆฌ์ผ์ด์ ํํ๋ก ํจํค์ง๋์ด ์๋น์ค โ ๋ฐ์ดํฐ๊ฐ ํ ๊ณณ์ ๋ชจ์ฌ ์ฐธ์กฐ๋์ด ์๋น์ค๋จ
์์ ๋ ์๋น์ค์ ๊ด๋ จ๋์ง ์์ ๊ฒ๋ ๋ค์ ํจํค์ง๋์ด ๋ฐฐํฌํด์ผํ๋ ๋จ์ ์ ๊ฐ์ง๊ณ ์๋ค.
MA(Monolithic Architecture)์ ๋นํด ์์ฝ๊ฒ ๋น๋, ํ ์คํธ, ๋ฐฐํฌ, ์ ๋ฐ์ดํธ๋ฅผ ํ ์ ์๋ค.
๐น ์ฅ์
- ๋๋ฉ์ธ ์ค์ฌ์ผ๋ก ์ค๊ณ
- ์๋น์ค๋ณ ์ต์ ํ๋ ๊ธฐ์ ์ ๋ ๋ฆฝ์ ์ผ๋ก ์ฌ์ฉ ๊ฐ๋ฅ
- ์๋น์ค ํฌ๊ธฐ ์์์ง
- ๋ ์์ ๊ฐ๋ฐ, ๋ ๋ฆฝ ๋ฐฐํฌ, ๋ฐฐํฌ ์๋ํ ๊ฐ๋ฅ
๐น ๋จ์
- ๋ถ์ฐ์์คํ
์ด๊ธฐ์ ๋ฐ์ํ๋ ๋ณต์ก์ฑ
- ๋ฉ์์ง, RPC(Remote Procedure Call)๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ ํ๋ก์ธ์ค ๊ฐ ํต์ ๋ฉ์ปค๋์ฆ ์ ํํ๊ณ ๊ตฌํํด์ผํจ
'ํ์ ํธ์ถ ์ดํ๋ฆฌ์ผ์ด์ '์ ์์๋ก ๋ค์ด๋ณด์.
๊ณ ๊ฐ ๊ด๋ฆฌ, ๊ฒฐ์ , ์๋ฆผ, ์ด์ ์ ๊ด๋ฆฌ ๋ฑ ์๋น์ค ๋จ์๋ก ๋๋๊ณ ๊ฐ๊ฐ์ ์๋น์ค๋ค์ API๋ฅผ ์ ๊ณตํ์ฌ ์๋ก ํธ์ถ์ด ๊ฐ๋ฅํ๋ฉฐ ๊ฐ ์๋น์ค๋ ๋น๋๊ธฐ๋ก ๋์ํ๊ณ ๋ฉ์์ง ๊ธฐ๋ฐ์ผ๋ก ํต์ ํ๋ค.
์ฌ์ฉ์์ ๋ชจ๋ฐ์ผ ๊ธฐ๊ธฐ์์ REST API๋ก ์๋น์ค๋ฅผ ํธ์ถ ์ ์ง์ ์๋น์ค๋ก ๊ฐ๋ ๊ฒ์ด ์๋๋ผ API Gateway๋ฅผ ๊ฑฐ์ณ์ ํต์ ์ด ์ค์ฌ๋๋ค. API Gateway๋ ์ง์ ์ ์ด ๋๋ ์๋ฒ๋ก์ ์ค๊ฐ์๋ก ๋ณด๋ฉด ๋๋ค. ๋ก๋๋ฐธ๋ฐ์ฑ, ์บ์ฑ, ์ก์ธ์ค ์ ์ด, API ๋ฏธํฐ๋ง, ๋ชจ๋ํฐ๋ง ๋ฑ์ ์์ ์ ๋ด๋นํ์ฌ ๊ฐ ํด๋ผ์ด์ธํธ์ ๋ง๋ API๋ฅผ ์ ๊ณตํ๋ค.
Spring Cloud
Spring Cloud๋ ์คํ๋ง์์ MSA๋ฅผ ๊ตฌ์ถํ๊ณ ๊ด๋ฆฌํ๊ธฐ ์ํ ํ๋ ์์ํฌ์ ๋๊ตฌ๋ค์ ์งํฉ์ด๋ค.
โจ ๊ตฌ์ฑ์์ ๋ฐ ์ฃผ์๊ธฐ๋ฅ
- Service Discovery : ์๋น์ค ๊ฐ์ API ํธ์ถ๋ก ๊ตฌ์ฑ๋๋ ๋ถ์ฐ ํ๊ฒฝ์์ IP ์ฃผ์๊ฐ ๋์ ์ผ๋ก ๋ณํ๋ ๊ฒฝ์ฐ๊ฐ ์ฆ๋ค. ๐ Service Discovery๋ ์ด๋ฌํ ๋ถํธํจ์ ์ค์ด๊ธฐ ์ํด ๋ง์ดํฌ๋ก์๋น์ค๊ฐ ์๋์ผ๋ก ๋ฑ๋ก๋๊ณ ๋ฐ๊ฒฌ๋ ์ ์๋๋ก ์ง์. โ ์๋น์ค๋ค์ ์์น(ip ์ฃผ์์ port) ๋ฐ ์ํ ์ ๋ณด ๊ด๋ฆฌ. ๋ง์ดํฌ๋ก์๋น์ค ๊ฐ์ ํต์ ์ ์ฉ์ดํ๊ฒ ํจ.
- ex) Eureka, Consul .. ๐ Service Registry
- Spring Cloud Config : ์ค์ ์ ๋ณด๋ฅผ ์ ์ฅํ๊ณ ์ ๊ณตํ๋ ์๋ฒ ๊ตฌ์ถ. ๊ฐ ํด๋ผ์ด์ธํธ๋ ์ค์ ์๋ฒ๋ก๋ถํฐ ์ค์ ์ ๋ณด ์กฐํ ๋ฐ ์ฌ์ฉ
- ์๋ฒ โ yml ํ์ผ์ config server์ ์ ๋ณด๋ฅผ ์ค์ ํ๊ณ ํด๋ผ์ด์ธํธ ์ดํ๋ฆฌ์ผ์ด์ ์์ config server์๊ฒ ์ค์ ์์ฒญ
- ํด๋ผ์ด์ธํธ โ yml ํ์ผ์ ํตํด config server์ ์ฐ๊ฒฐํ๊ณ ํ์ํ ์ค์ ์ฌ์ฉ
- Load Balancing : ๋ง์ดํฌ๋ก์๋น์ค ์ธ์คํด์ค ๊ฐ์ ๋ถํ ๋ถ์ฐ์ ์๋์ผ๋ก ์ฒ๋ฆฌ
- ex) Ribbon ..
- Circuit Breaker : ์๋น์ค ๊ฐ์ ํต์ ์์ ๋ฐ์ํ ์ ์๋ ์ฅ์ ์ ๋ํ ๊ฒฉ๋ฆฌ ๋ฐ ํ๋ณต ๊ธฐ๋ฅ ์ ๊ณต
- ex) Hystrix ..
- API Gateway : ํด๋ผ์ด์ธํธ์ ๋ฐฑ์๋ ์๋น์ค ๊ฐ์ ํต์ ๊ด๋ฆฌ. ํด๋ผ์ด์ธํธ์ ํธ์ถ์ ๋ฐ์ ๋ง์ดํฌ๋ก์๋น์ค๋ค์๊ฒ ์ ๋ฌ.
- ex) Zuul, Spring Cloud Gateway ..
- Distributed Tracing : ์ ํ์ผ์ด์
์ ๋ถ์ฐ๋ ๋ถ๋ถ์์ ๋ฐ์ํ๋ ํธ๋์ญ์
์ ํ๋ฆ ์ถ์ ๋ฐ ๋ชจ๋ํฐ๋ง
- ex) Zipkin ..
- Distributed Messaging (Spring Cloud Stream) : ๋ง์ดํฌ๋ก์๋น์ค ๊ฐ์ ์ด๋ฒคํธ ๊ธฐ๋ฐ ํต์ ์ง์
- ex) Kafka, RabbitMQ ..
์ฐธ๊ณ
https://www.nginx.com/blog/introduction-to-microservices/
https://jeongkyun-it.tistory.com/m/183