Spring Framework/โ˜๏ธ Spring Cloud

[โ˜๏ธ Spring Cloud] MSA์™€ Spring Cloud

soogoori 2023. 11. 11. 22:26

์—ฌ๋Ÿฌ ๊ธฐ์—…๋“ค์˜ ์ฑ„์šฉ ๊ณต๊ณ ๋ฅผ ํ™•์ธํ•  ๋•Œ๋งˆ๋‹ค 'MSA' ๊ฐ€ ์–ธ๊ธ‰๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์•˜๋‹ค. 

MSA๊ฐ€ ๋ฌด์—‡์ด๊ธธ๋ž˜ ๊ธฐ์—…๋งˆ๋‹ค ์–ธ๊ธ‰ํ•˜๋Š” ๋นˆ๋„๊ฐ€ ์žฆ์€์ง€ ํŒŒ์•…ํ•ด๋ณด๊ณ , MSA๋ฅผ ๊ตฌ์ถ•ํ•˜๊ณ  ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” Spring Cloud์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ฒ ๋‹ค. 

 

 

โ“ Cloud Native Architecture ๋ž€?

๐Ÿ”ท ํด๋ผ์šฐ๋“œ ๊ธฐ๋ฐ˜ ๊ตฌ์กฐ์˜ ํŠน์ง• 

  • ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ์•„ํ‚คํ…์ณ
    • ์„œ๋ฒ„ ๊ณ„์† ์„ค์น˜ X โž” ํด๋ผ์šฐ๋“œ ๋‚ด์—์„œ ์„œ๋ฒ„ ์ธ์Šคํ„ด์Šค ๋Š˜๋ ค์„œ ํ™•์žฅ์‹œํ‚ค๊ธฐ (scale out)
  • ํƒ„๋ ฅ์  ์•„ํ‚คํ…์ณ
    • ์ˆ˜๋™์œผ๋กœ ํ”„๋กœ์ ํŠธ๋ฅผ buildํ•œ ํ›„ ๋ฐฐํฌ X โž” CI/CD๋ฅผ ํ†ตํ•ด ์ž๋™์œผ๋กœ ๋นŒ๋“œ ํ›„ ๋ฐฐํฌ ๐Ÿ‘‰ ๋น„์ฆˆ๋‹ˆ์Šค ํ™˜๊ฒฝ ๋ณ€ํ™”์— ๋Œ€ํ•œ ๋Œ€์‘ ์‹œ๊ฐ„ ๋‹จ์ถ•
    • ๋ถ„ํ• ๋œ ๋…๋ฆฝ์ ์ธ ์„œ๋น„์Šค โž” ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ตฌ์„ฑํ•˜๋Š” ๋„๋ฉ”์ธ ํŠน์„ฑ์— ๋”ฐ๋ผ ์„œ๋น„์Šค ๊ฒฝ๊ณ„ ๊ตฌ๋ถ„ ๐Ÿ‘‰ ์„œ๋น„์Šค ์ข…์†์„ฑ ์ตœ์†Œํ™” & ์ƒํƒœ X
    • DiscoveryService โž” ํ•ด๋‹น ์„œ๋น„์Šค์˜ ์œ„์น˜๋ฅผ ์ฐพ๊ณ  ์š”์ฒญ ์ „๋‹ฌ & ๊ฐฑ์‹ , ๋“ฑ๋ก ๊ฒ€์ƒ‰ ๋“ฑ ๐Ÿ‘‰ ์„œ๋น„์Šค๋“ค์ด ๋…๋ฆฝ์ ์œผ๋กœ ๋ฐฐํฌ๋˜๊ณ  ํ™•์žฅ 
  • ์žฅ์•  ๊ฒฉ๋ฆฌ
    • ํŠน์ • ์„œ๋น„์Šค์— ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋”๋ผ๋„ ๋‹ค๋ฅธ ์„œ๋น„์Šค์— ์˜ํ–ฅ X

๐Ÿ”ท ํด๋ผ์šฐ๋“œ ๋„ค์ดํ‹ฐ๋ธŒ๋ฅผ ์œ„ํ•œ 4๊ฐ€์ง€ ํ•ต์‹ฌ ์š”์†Œ 

  1. DevOps
  2. CI/CD
  3. Containers
  4. 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