[MSA] chapter 1.9_Spring cloud

Updated:

Categories:

Tags: ,

๐Ÿ“Œ ๊ฐœ์ธ์ ์ธ ๊ณต๊ฐ„์œผ๋กœ ๊ณต๋ถ€๋ฅผ ๊ธฐ๋กํ•˜๊ณ  ๋ณต์Šตํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ๋ธ”๋กœ๊ทธ์ž…๋‹ˆ๋‹ค.
์ •ํ™•ํ•˜์ง€ ์•Š์€ ์ •๋ณด๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์œผ๋‹ˆ ์ฐธ๊ณ ๋ฐ”๋ž๋‹ˆ๋‹ค :๐Ÿ˜ธ
[ํ‹€๋ฆฐ ๋‚ด์šฉ์€ ๋Œ“๊ธ€๋กœ ๋‚จ๊ฒจ์ฃผ์‹œ๋ฉด ๋ณต๋ฐ›์œผ์‹ค๊ฑฐ์—์š”]

์ธํ”„๋Ÿฐ 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

  1. Eureka Server
    • ๊ฐ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค์˜ ์œ„์น˜ ์ •๋ณด๋ฅผ ๋“ฑ๋กํ•˜๊ณ  ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” ์„œ๋น„์Šค.
    • ์„œ๋น„์Šค ๊ฐ„ ์ƒํ˜ธ ์ฐธ์กฐ๊ฐ€ ํ•„์š”ํ•  ๋•Œ, Eureka์— ๋“ฑ๋ก๋œ ์ •๋ณด๋ฅผ ํ™œ์šฉํ•ด ์œ„์น˜๋ฅผ ๊ฒ€์ƒ‰ํ•œ๋‹ค.
    • ์ž‘๋™ ๋ฐฉ์‹
      • ์„œ๋น„์Šค ๋“ฑ๋ก: ๊ฐ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋Š” Eureka ์„œ๋ฒ„์— ์ž์‹ ์˜ ์œ„์น˜๋ฅผ ์ฃผ๊ธฐ์ ์œผ๋กœ ๋“ฑ๋กํ•ด, ๋“ฑ๋ก๋œ ์ƒํƒœ๋ฅผ ์ตœ์‹ ์œผ๋กœ ์œ ์ง€ํ•œ๋‹ค.
      • ์„œ๋น„์Šค ๊ฒ€์ƒ‰: ๋‹ค๋ฅธ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค์—์„œ ์š”์ฒญ์ด ๋“ค์–ด์˜ฌ ๋•Œ Eureka ์„œ๋ฒ„์—์„œ ์œ„์น˜๋ฅผ ์กฐํšŒํ•ด ์—ฐ๊ฒฐํ•œ๋‹ค.
  2. 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

  1. Spring Cloud Sleuth
    • ๊ธฐ๋Šฅ: ์„œ๋น„์Šค ๊ฐ„ ํ˜ธ์ถœ ์‹œ ๊ณ ์œ ํ•œ ํŠธ๋ ˆ์ด์‹ฑ ID๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์š”์ฒญ ํ๋ฆ„์„ ์ถ”์ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค. ๋กœ๊ทธ๋งˆ๋‹ค ํŠธ๋ ˆ์ด์‹ฑ ID๊ฐ€ ๊ธฐ๋ก๋˜๊ธฐ ๋•Œ๋ฌธ์— ์–ด๋–ค ์š”์ฒญ์ด ์–ด๋””์„œ ๋ฐœ์ƒํ–ˆ๋Š”์ง€ ์ถ”์ ํ•˜๊ธฐ ์‰ฝ๋‹ค.
  2. Zipkin
    • ๊ธฐ๋Šฅ: Sleuth์™€ ํ•จ๊ป˜ ๋ถ„์‚ฐ ์ถ”์  ์‹œ์Šคํ…œ์„ ๊ตฌ์„ฑํ•˜๋ฉฐ, ๊ฐ ์„œ๋น„์Šค์˜ ํ˜ธ์ถœ ์ •๋ณด๋ฅผ ์‹œ๊ฐ์ ์œผ๋กœ ๋ถ„์„ํ•˜๊ณ  ๋ชจ๋‹ˆํ„ฐ๋งํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ๊ตฌ์กฐ: ๊ฐ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค์˜ ์š”์ฒญ ์ •๋ณด๋ฅผ Zipkin ์„œ๋ฒ„๋กœ ์ „์†กํ•˜๊ณ , Zipkin์€ ์ด๋ฅผ ์‹œ๊ฐ์ ์œผ๋กœ ๋ถ„์„ํ•˜์—ฌ ๊ฐ ์š”์ฒญ์˜ ํ˜ธ์ถœ ๊ด€๊ณ„์™€ ์ง€์—ฐ ์‹œ๊ฐ„ ๋“ฑ์„ ๋ณด์—ฌ์ค€๋‹ค.
  3. ELK Stack: Elasticsearch, Logstash, Kibana๋กœ ๊ตฌ์„ฑ๋œ ์Šคํƒ์„ ํ†ตํ•ด ๋กœ๊ทธ๋ฅผ ์ˆ˜์ง‘ํ•˜๊ณ  ์‹œ๊ฐํ™”ํ•ด, ์‹œ์Šคํ…œ ์ƒํƒœ์™€ ์„ฑ๋Šฅ์„ ๋ชจ๋‹ˆํ„ฐ๋งํ•  ์ˆ˜ ์žˆ๋‹ค.

5. ์žฅ์•  ํšŒ๋ณต์„ฑ: Hystrix

  • Hystrix: ๋„ทํ”Œ๋ฆญ์Šค์˜ ์žฅ์•  ํšŒ๋ณต์„ฑ ํŒจํ„ด ๊ตฌํ˜„์ฒด๋กœ, ์„œ๋น„์Šค ๊ฐ„ ํ†ต์‹  ์ค‘ ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ๋น ๋ฅด๊ฒŒ ๋ณต๊ตฌํ•  ์ˆ˜ ์žˆ๋Š” ํšŒ๋ณต ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค. ์„œํ‚ท ๋ธŒ๋ ˆ์ด์ปค(Circuit Breaker) ํŒจํ„ด์„ ํ†ตํ•ด ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธด ์„œ๋น„์Šค๋กœ์˜ ์š”์ฒญ์„ ์ œํ•œํ•˜๊ณ , ๋Œ€์ฒด ๋กœ์ง์„ ์ˆ˜ํ–‰ํ•˜๋„๋ก ํ•œ๋‹ค.
    • ๊ธฐ๋Šฅ: ์„œ๋น„์Šค ๊ฐ„ ์žฅ์•  ๋ฐœ์ƒ ์‹œ ์š”์ฒญ์„ ์ œํ•œํ•ด ์„œ๋น„์Šค ์ „์ฒด์— ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๋Š” ์„œํ‚ท ๋ธŒ๋ ˆ์ด์ปค ํŒจํ„ด์„ ๊ตฌํ˜„ํ•œ๋‹ค.
    • ์ž‘๋™ ๋ฐฉ์‹:
      • ์„œํ‚ท ์—ด๋ฆผ(Open): ์žฅ์• ๊ฐ€ ์ผ์ • ํšŸ์ˆ˜ ์ด์ƒ ๋ฐœ์ƒํ•˜๋ฉด ์„œํ‚ท์ด ์—ด๋ฆฌ๊ณ , ํ•ด๋‹น ์„œ๋น„์Šค๋กœ์˜ ์š”์ฒญ์„ ์ฐจ๋‹จํ•œ๋‹ค.
      • ์„œํ‚ท ๋‹ซํž˜(Close): ์‹œ๊ฐ„์ด ์ง€๋‚˜ ์„œํ‚ท์ด ๋‹ซํžˆ๋ฉด ์ •์ƒ ์š”์ฒญ์„ ์žฌ๊ฐœํ•ด ์‹œ์Šคํ…œ์ด ๋ณต๊ตฌ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.
      • Fallback ๋ฉ”์ปค๋‹ˆ์ฆ˜: ํŠน์ • ์„œ๋น„์Šค๊ฐ€ ์‘๋‹ตํ•˜์ง€ ์•Š์œผ๋ฉด ๋Œ€์ฒด ๋กœ์ง์„ ์ˆ˜ํ–‰ํ•˜๋„๋ก ํ•˜์—ฌ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ์œ ์ง€ํ•œ๋‹ค.
    • ์žฅ์ : ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ํ™˜๊ฒฝ์—์„œ ๊ฐœ๋ณ„ ์„œ๋น„์Šค ์˜ค๋ฅ˜๊ฐ€ ์ „์ฒด ์‹œ์Šคํ…œ์œผ๋กœ ์ „ํŒŒ๋˜์ง€ ์•Š๋„๋ก ๋ณดํ˜ธํ•œ

์š”์•ฝ ๐Ÿช„

๊ฐ€ํŠธ๋„ˆ์˜ ์˜ˆ์ธก์ฒ˜๋Ÿผ, MSA์™€ ํด๋ผ์šฐ๋“œ๊ฐ€ ์ฃผ๋„ํ•˜๋Š” ํ™˜๊ฒฝ์—์„œ Spring Cloud๋Š” ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ํ•„์ˆ˜ ๊ตฌ์„ฑ ์š”์†Œ์™€ ๊ธฐ๋Šฅ์„ ์ง€์›ํ•œ๋‹ค. Spring Boot์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜์—ฌ ํ™˜๊ฒฝ ์„ค์ • ๊ด€๋ฆฌ, ์„œ๋น„์Šค ๋””์Šค์ปค๋ฒ„๋ฆฌ, ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ, ์„œ๋น„์Šค ๊ฐ„ ํ†ต์‹ , ๋ชจ๋‹ˆํ„ฐ๋ง, ์žฅ์•  ํšŒ๋ณต์„ฑ์„ ์†์‰ฝ๊ฒŒ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด๋ฅผ ํ†ตํ•ด ์œ ์ง€๋ณด์ˆ˜์„ฑ๊ณผ ์œ ์—ฐ์„ฑ์ด ๋›ฐ์–ด๋‚œ ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์„ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ๋‹ค.






MSA ์นดํ…Œ๊ณ ๋ฆฌ ๋‚ด ๋‹ค๋ฅธ ๊ธ€ ๋ณด๋Ÿฌ๊ฐ€๊ธฐ

Leave a comment