[MSA] chapter 1.9_Spring cloud
Categories: MSA
Tags: MSA, SpringCloud
๐ ๊ฐ์ธ์ ์ธ ๊ณต๊ฐ์ผ๋ก ๊ณต๋ถ๋ฅผ ๊ธฐ๋กํ๊ณ ๋ณต์ตํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ๋ธ๋ก๊ทธ์
๋๋ค.
์ ํํ์ง ์์ ์ ๋ณด๊ฐ ์์ ์ ์์ผ๋ ์ฐธ๊ณ ๋ฐ๋๋๋ค :๐ธ
[ํ๋ฆฐ ๋ด์ฉ์ ๋๊ธ๋ก ๋จ๊ฒจ์ฃผ์๋ฉด ๋ณต๋ฐ์ผ์ค๊ฑฐ์์]
์ธํ๋ฐ Dowon Lee๋์ Spring Cloud๋ก ๊ฐ๋ฐํ๋ ๋ง์ดํฌ๋ก์๋น์ค ์ ํ๋ฆฌ์ผ์ด์
(MSA) ๊ฐ์๋ฅผ ๋ฃ๊ณ ์ ๋ฆฌํ ํ๊ธฐ์
๋๋ค.๐
Spring Cloud๋ก ๊ฐ๋ฐํ๋ ๋ง์ดํฌ๋ก์๋น์ค ์ ํ๋ฆฌ์ผ์ด์
(MSA) ๊ฐ์ ๋ค์ผ๋ฌ ๊ฐ๊ธฐ๐ฉโ๐ซ
์ํฐํ๋ผ์ด์ฆ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ณํ์ MSA ์ง์ ํ๋ ์์ํฌ
2017๋ ๊ฐํธ๋(Gartner)๋ ์๋ก์ด ์ํฐํ๋ผ์ด์ฆ Java ์ ํ๋ฆฌ์ผ์ด์ ์ 70% ์ด์์ด ๊ธฐ์กด์ ๋จ์ผ ์น์๋ฒ๋ ์ฑ ์๋ฒ์์ ์๋ํ์ง ์๊ณ , ๋ ๋ฆฝ์ ์ธ ํด๋ผ์ฐ๋ ๋ฐ ๋ง์ดํฌ๋ก์๋น์ค ํํ๋ก ๊ฐ๋ฐ๋ ๊ฒ์ด๋ผ๊ณ ๋ฐํํ๋ค. ์ด์ ๊ฐ์ด ๋ง์ดํฌ๋ก์๋น์ค ์ํคํ ์ฒ์ ์์๊ฐ ์ฆ๊ฐํ๋ฉด์ ๋ ๋ฆฝ์ ์ด๊ณ ์ ์ฐํ๊ฒ ํ์ฅ ๊ฐ๋ฅํ ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์ ์ํ ๋ค์ํ ํ๋ ์์ํฌ๊ฐ ๋ฑ์ฅํ๋ค. ๋ํ์ ์ธ MSA ์ง์ ํ๋ ์์ํฌ๊ฐ Spring Cloud์ด๋ฉฐ, Spring Cloud๋ MSA์์ ํ์ํ ๋ค์ํ ๊ธฐ๋ฅ์ ์ง์ํ๋ค.
Spring Cloud์ ์ฃผ์ ๊ธฐ๋ฅ ๋ฐ ๊ตฌ์ฑ ์์
Spring Cloud๋ Spring Boot์ ์ฐ๊ณํ์ฌ ๋ค์ํ ๋ง์ดํฌ๋ก์๋น์ค ํ๊ฒฝ์์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ฑํ ์ ์๋๋ก ํ๋ค. ๊ฐ ๋ฒ์ ์ ์ํธ ํธํ์ฑ์ ๊ณ ๋ คํด ์ฌ์ฉ๋๋ฉฐ, ํ์ฌ Spring Boot ๋ฒ์ 2.2, 2.3๊ณผ ํจ๊ป Spring Cloud Hoxton์, ๋ฒ์ 2.4์์๋ ์ต์ Spring Cloud ๋ฒ์ ์ ์ฌ์ฉํ๋ค.
1. ํ๊ฒฝ ์ค์ ๊ด๋ฆฌ: Spring Cloud Config
- Spring Cloud Config Server: ๋ง์ดํฌ๋ก์๋น์ค์์ ๊ณตํต์ผ๋ก ์ฌ์ฉํ๋ ํ๊ฒฝ ์ค์ ์ ๋ณด๋ฅผ ์ธ๋ถ์ ์ ์ฅํ๊ณ ๊ด๋ฆฌํ๋ ์๋ฒ๋ค. ์๋ฅผ ๋ค์ด, API Gateway IP๋ ์ธ์ฆ ํ ํฐ ๋ฑ์ ์ ๋ณด๋ฅผ ํ ๊ณณ์ ๋ชจ์๋๊ณ , ์๋น์ค ๊ฐ ์ฐธ์กฐํ๋๋ก ํ์ฌ ๋ณ๊ฒฝ ์์๋ ๋ณ๋์ ๋ฐฐํฌ ์์ด ์ฆ์ ๋ฐ์๋๋๋ก ์ง์ํ๋ค. ์ด๋ฅผ ํตํด ์ ์ง๋ณด์๋ฅผ ํจ์ฌ ๊ฐํธํ๊ฒ ํ๋ค.
2. ์๋น์ค ๋์ค์ปค๋ฒ๋ฆฌ์ ๋ก๋ ๋ฐธ๋ฐ์ฑ: Eureka์ Gateway
- Eureka Server
- ๊ฐ ๋ง์ดํฌ๋ก์๋น์ค์ ์์น ์ ๋ณด๋ฅผ ๋ฑ๋กํ๊ณ ๊ฒ์ํ ์ ์๋๋ก ๋์์ฃผ๋ ์๋น์ค.
- ์๋น์ค ๊ฐ ์ํธ ์ฐธ์กฐ๊ฐ ํ์ํ ๋, Eureka์ ๋ฑ๋ก๋ ์ ๋ณด๋ฅผ ํ์ฉํด ์์น๋ฅผ ๊ฒ์ํ๋ค.
- ์๋ ๋ฐฉ์
- ์๋น์ค ๋ฑ๋ก: ๊ฐ ๋ง์ดํฌ๋ก์๋น์ค๋ Eureka ์๋ฒ์ ์์ ์ ์์น๋ฅผ ์ฃผ๊ธฐ์ ์ผ๋ก ๋ฑ๋กํด, ๋ฑ๋ก๋ ์ํ๋ฅผ ์ต์ ์ผ๋ก ์ ์งํ๋ค.
- ์๋น์ค ๊ฒ์: ๋ค๋ฅธ ๋ง์ดํฌ๋ก์๋น์ค์์ ์์ฒญ์ด ๋ค์ด์ฌ ๋ Eureka ์๋ฒ์์ ์์น๋ฅผ ์กฐํํด ์ฐ๊ฒฐํ๋ค.
- Spring Cloud Gateway
- ํด๋ผ์ด์ธํธ ์์ฒญ์ ๊ฐ ๋ง์ดํฌ๋ก์๋น์ค๋ก ๋ผ์ฐํ ํด์ฃผ๋ API ๊ฒ์ดํธ์จ์ด ์ญํ ์ ์ํํ๋ฉฐ, ๋ก๋ ๋ฐธ๋ฐ์ฑ์ ํตํด ํธ๋ํฝ์ ๋ถ์ฐ์ํจ๋ค.
- ๋ชจ๋ ํธ๋ํฝ์ด ๊ฒ์ดํธ์จ์ด๋ฅผ ํตํด ๊ด๋ฆฌ๋๋ฏ๋ก ๋ณด์๊ณผ ์ธ์ฆ์ ์ค์์์ ์ ์ดํ ์ ์๋ค.
- ์ต์ Spring Cloud ๋ฒ์ ์์๋ ๊ธฐ์กด์ Ribbon ๋์ Gateway๋ฅผ ๊ถ์ฅํ๋ค.
- ๊ตฌ์ฑ ์์
- Route: ํด๋ผ์ด์ธํธ์ ์์ฒญ ๊ฒฝ๋ก๋ฅผ ์ ์ํด ์์ฒญ์ ๋ผ์ฐํ ํ๋ค.
- Filter: ์์ฒญ์ ๋ํ ์ ํ์ฒ๋ฆฌ ๋ก์ง์ ์ค์ ํด ๋ณด์, ๋ก๊น , ๋ก๋ ๋ฐธ๋ฐ์ฑ ๋ฑ์ ์ฒ๋ฆฌ๋ฅผ ์ถ๊ฐํ ์ ์๋ค.
3. ์๋น์ค ๊ฐ ํต์ : REST Template์ Feign Client
๋ง์ดํฌ๋ก์๋น์ค ๊ฐ ๋ฐ์ดํฐ ํต์ ์ ์ํด REST Template ๋๋ Feign Client๋ฅผ ์ฌ์ฉํ๋ค.
- Feign Client:
- ๊ธฐ๋ฅ: ์ธํฐํ์ด์ค ์ ์ธ๋ง์ผ๋ก REST API ํธ์ถ์ด ๊ฐ๋ฅํ๋ฉฐ, ๊ตฌํ์ฒด๋ฅผ ์๋์ผ๋ก ์์ฑํด์ค๋ค.
- ์ฅ์ : ์ฝ๋๊ฐ ๊ฐ๊ฒฐํด์ง๊ณ ์ ์ง๋ณด์๊ฐ ์ฌ์์ง๋ค.
- ์ฌ์ฉ ์:
@FeignClient
์ด๋ ธํ ์ด์ ์ ํตํด ๋ง์ดํฌ๋ก์๋น์ค ๊ฐ ํต์ ์ ์ค์ ํ ์ ์๋ค.
- RestTemplate:
- ๊ธฐ๋ฅ: Spring์์ ์ ๊ณตํ๋ HTTP ํต์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก, ์ง์ ์ ์ผ๋ก REST API ํธ์ถ์ ์ฝ๋๋ก ๊ตฌํํ ์ ์๋ค.
- ํน์ง: Feign๋ณด๋ค ์ ์ฐํ๊ฒ ์ปค์คํฐ๋ง์ด์ง์ด ๊ฐ๋ฅํ์ง๋ง, ์ฝ๋๊ฐ ๋ง์์ง๊ณ ๋ณต์กํด์ง ์ ์๋ค.
4. ๋ชจ๋ํฐ๋ง๊ณผ ์๊ฐํ: Zipkin๊ณผ ELK Stack
- Spring Cloud Sleuth
- ๊ธฐ๋ฅ: ์๋น์ค ๊ฐ ํธ์ถ ์ ๊ณ ์ ํ ํธ๋ ์ด์ฑ ID๋ฅผ ์์ฑํ์ฌ ์์ฒญ ํ๋ฆ์ ์ถ์ ํ ์ ์๋๋ก ํ๋ค. ๋ก๊ทธ๋ง๋ค ํธ๋ ์ด์ฑ ID๊ฐ ๊ธฐ๋ก๋๊ธฐ ๋๋ฌธ์ ์ด๋ค ์์ฒญ์ด ์ด๋์ ๋ฐ์ํ๋์ง ์ถ์ ํ๊ธฐ ์ฝ๋ค.
- Zipkin
- ๊ธฐ๋ฅ: Sleuth์ ํจ๊ป ๋ถ์ฐ ์ถ์ ์์คํ ์ ๊ตฌ์ฑํ๋ฉฐ, ๊ฐ ์๋น์ค์ ํธ์ถ ์ ๋ณด๋ฅผ ์๊ฐ์ ์ผ๋ก ๋ถ์ํ๊ณ ๋ชจ๋ํฐ๋งํ ์ ์๋ค.
- ๊ตฌ์กฐ: ๊ฐ ๋ง์ดํฌ๋ก์๋น์ค์ ์์ฒญ ์ ๋ณด๋ฅผ Zipkin ์๋ฒ๋ก ์ ์กํ๊ณ , Zipkin์ ์ด๋ฅผ ์๊ฐ์ ์ผ๋ก ๋ถ์ํ์ฌ ๊ฐ ์์ฒญ์ ํธ์ถ ๊ด๊ณ์ ์ง์ฐ ์๊ฐ ๋ฑ์ ๋ณด์ฌ์ค๋ค.
- ELK Stack: Elasticsearch, Logstash, Kibana๋ก ๊ตฌ์ฑ๋ ์คํ์ ํตํด ๋ก๊ทธ๋ฅผ ์์งํ๊ณ ์๊ฐํํด, ์์คํ ์ํ์ ์ฑ๋ฅ์ ๋ชจ๋ํฐ๋งํ ์ ์๋ค.
5. ์ฅ์ ํ๋ณต์ฑ: Hystrix
- Hystrix: ๋ทํ๋ฆญ์ค์ ์ฅ์ ํ๋ณต์ฑ ํจํด ๊ตฌํ์ฒด๋ก, ์๋น์ค ๊ฐ ํต์ ์ค ์ฅ์ ๊ฐ ๋ฐ์ํ์ ๋ ๋น ๋ฅด๊ฒ ๋ณต๊ตฌํ ์ ์๋ ํ๋ณต ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค. ์ํท ๋ธ๋ ์ด์ปค(Circuit Breaker) ํจํด์ ํตํด ๋ฌธ์ ๊ฐ ์๊ธด ์๋น์ค๋ก์ ์์ฒญ์ ์ ํํ๊ณ , ๋์ฒด ๋ก์ง์ ์ํํ๋๋ก ํ๋ค.
- ๊ธฐ๋ฅ: ์๋น์ค ๊ฐ ์ฅ์ ๋ฐ์ ์ ์์ฒญ์ ์ ํํด ์๋น์ค ์ ์ฒด์ ์ํฅ์ ๋ฏธ์น๋ ๊ฒ์ ๋ฐฉ์งํ๋ ์ํท ๋ธ๋ ์ด์ปค ํจํด์ ๊ตฌํํ๋ค.
- ์๋ ๋ฐฉ์:
- ์ํท ์ด๋ฆผ(Open): ์ฅ์ ๊ฐ ์ผ์ ํ์ ์ด์ ๋ฐ์ํ๋ฉด ์ํท์ด ์ด๋ฆฌ๊ณ , ํด๋น ์๋น์ค๋ก์ ์์ฒญ์ ์ฐจ๋จํ๋ค.
- ์ํท ๋ซํ(Close): ์๊ฐ์ด ์ง๋ ์ํท์ด ๋ซํ๋ฉด ์ ์ ์์ฒญ์ ์ฌ๊ฐํด ์์คํ ์ด ๋ณต๊ตฌ๋์๋์ง ํ์ธํ๋ค.
- Fallback ๋ฉ์ปค๋์ฆ: ํน์ ์๋น์ค๊ฐ ์๋ตํ์ง ์์ผ๋ฉด ๋์ฒด ๋ก์ง์ ์ํํ๋๋ก ํ์ฌ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ์งํ๋ค.
- ์ฅ์ : ๋ง์ดํฌ๋ก์๋น์ค ํ๊ฒฝ์์ ๊ฐ๋ณ ์๋น์ค ์ค๋ฅ๊ฐ ์ ์ฒด ์์คํ ์ผ๋ก ์ ํ๋์ง ์๋๋ก ๋ณดํธํ
์์ฝ ๐ช
๊ฐํธ๋์ ์์ธก์ฒ๋ผ, MSA์ ํด๋ผ์ฐ๋๊ฐ ์ฃผ๋ํ๋ ํ๊ฒฝ์์ Spring Cloud๋ ๋ง์ดํฌ๋ก์๋น์ค ์ํคํ ์ฒ๋ฅผ ๊ตฌํํ๋ ํ์ ๊ตฌ์ฑ ์์์ ๊ธฐ๋ฅ์ ์ง์ํ๋ค. Spring Boot์ ํจ๊ป ์ฌ์ฉํ์ฌ ํ๊ฒฝ ์ค์ ๊ด๋ฆฌ, ์๋น์ค ๋์ค์ปค๋ฒ๋ฆฌ, ๋ก๋ ๋ฐธ๋ฐ์ฑ, ์๋น์ค ๊ฐ ํต์ , ๋ชจ๋ํฐ๋ง, ์ฅ์ ํ๋ณต์ฑ์ ์์ฝ๊ฒ ์ค์ ํ ์ ์์ผ๋ฉฐ, ์ด๋ฅผ ํตํด ์ ์ง๋ณด์์ฑ๊ณผ ์ ์ฐ์ฑ์ด ๋ฐ์ด๋ ๋ถ์ฐ ์์คํ ์ ๊ตฌ์ถํ ์ ์๋ค.
Leave a comment