Spring Cloud

INSANEZINDOLยท2021๋…„ 11์›” 25์ผ

spring

๋ชฉ๋ก ๋ณด๊ธฐ
1/3
post-thumbnail

๐Ÿ’ก Spring Cloud
ํ™•์žฅ์„ฑ(Scable)์„ ๊ฐ€์ง€๊ณ , ํด๋ผ์šฐ๋“œ ํ”Œ๋žซํผ์— ์‰ฝ๊ฒŒ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ง€์†์ ์ธ ๋ฐฐํฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋„๋ก ๋งŒ๋“  ๊ฒƒ : Software as a service(SaaS)

๐Ÿ’ก Netflix Open Source Software
Netflix๋Š” ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค์˜ ์„ ๋‘ ์ฃผ์ž, ๊ทธ๋“ค์˜ ์„ฑ๊ณตํ•œ ์•„ํ‚คํ…์ฒ˜์— ๋“ค์–ด๊ฐ„ ๊ฐœ๋…๋“ค์€ ์˜คํ”ˆ ์†Œ์Šค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ์ œ๊ณต
๊ทธ๊ฒƒ์ด Spring Cloud์— ์ ์šฉ ๋˜์—ˆ๊ณ  Eureka, Ribbon, Zuul๊ณผ ๊ฐ™์€ library

๐Ÿ’ก Eureka
๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋“ค์˜ ์ •๋ณด๋ฅผ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์— ๋“ฑ๋กํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๊ณ  ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค์˜ ๋™์ ์ธ ํƒ์ƒ‰๊ณผ ๋กœ๋“œ๋ฐธ๋Ÿฐ์‹ฑ์„ ์ œ๊ณต
Eureka๋Š” Eureka Server์™€ Eureka Client๋กœ ๊ตฌ์„ฑ

๐Ÿ’ก Eureka Server
Server๋Š” ๋ชจ๋“  micro service๊ฐ€ ์ž์‹ ์˜ ๊ฐ€์šฉ์„ฑ์„ ๋“ฑ๋กํ•˜๋Š” ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ
๋“ฑ๋ก ์ •๋ณด๋Š” service id์™€ url์„ ํฌํ•จ
micro service๊ฐ€ ์‹œ์ž‘๋˜๋ฉด Eureka ์„œ๋ฒ„์— ์ ‘๊ทผํ•ด์„œ ์„œ๋น„์Šค ID์™€ URL ๋“ฑ์˜ ์ •๋ณด๋ฅผ ๋“ฑ๋กํ•˜๊ณ  ์ž์‹ ์„ ์•Œ๋ฆผ(30์ดˆ heart-beat ping)

๐Ÿ’ก Eureka Client
Server๋กœ๋ถ€ํ„ฐ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ ์ •๋ณด๋ฅผ ์ฝ์–ด์™€ ๋กœ์ปฌ์— ์บ์‹œ
30์ดˆ๋งˆ๋‹ค ๊ฐฑ์‹ 
๋ ˆ์ง€์ŠคํŠธ๋ฆฌ ์ •๋ณด์˜ ์ฐจ์ด๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ฐฑ์‹ (delta updates)

๐Ÿ’ก Ribbon
ํด๋ผ์ด์–ธํŠธ ์ธก ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ
์—ฌ๋Ÿฌ ์„œ๋ฒ„๋ฅผ ๋ผ์šด๋“œ๋กœ๋นˆ ๋ฐฉ์‹์˜ ๋ถ€ํ•˜ ๋ถ„์‚ฐ ๊ธฐ๋Šฅ์„ ์ œ๊ณต(์—ฌ๋Ÿฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์‚ฌ์šฉ ๊ฐ€๋Šฅ)
Spring Cloud Config์™€ ๊ฒฐํ•ฉํ•˜์—ฌ, ์„œ๋ฒ„ ๋ชฉ๋ก์„ ์ œ๊ณต๋ฐ›์•„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ

๐Ÿ’ก Zuul
JVM ๊ธฐ๋ฐ˜ ๋ผ์šฐํ„ฐ ๋ฐ ์„œ๋ฒ„ ์ธก๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ

๐Ÿ’ก Hystrix
๋งˆ์ดํฌ๋กœ ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜์—์„œ ๋ถ„์‚ฐ๋œ ์„œ๋น„์Šค๊ฐ„ ํ†ต์‹ ์ด ์›ํ™œํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ์— ๊ฐ ์„œ๋น„์Šค๊ฐ€ ์žฅ์•  ๋‚ด์„ฑ๊ณผ ์ง€์—ฐ ๋‚ด์„ฑ์„ ๊ฐ–๊ฒŒํ•˜๋„๋ก ๋„์™€์ฃผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
๊ธฐ์กด์˜ ๋ชจ๋†€๋ฆฌํ‹ฑ ์•„ํ‚คํ…์ฒ˜์—์„œ๋Š” A๋ชจ๋“ˆ์˜ A๋ฉ”์„œ๋“œ์—์„œ B๋ชจ๋“ˆ์˜ B๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ, ์ด ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ์— ์‹คํŒจํ•˜๋Š” ๊ฒƒ์€ ์•„์˜ˆ ๊ณ ๋ คํ•˜์ง€ ์•Š์•˜๋‹ค. ๊ทธ๋Ÿด ์ผ์ด ์—†์—ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
๊ทธ๋Ÿฐ๋ฐ ๋งˆ์ดํฌ๋กœ ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜์—์„œ๋Š” ๋‹ค๋ฅด๋‹ค. ์ฃผ๋ฌธ ์„œ๋น„์Šค๊ฐ€ ๋ฐฐ์†ก ์„œ๋น„์Šค์˜ API๋ฅผ ํ˜ธ์ถœํ–ˆ์„ ๋•Œ ์‹คํŒจํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.
์œ„์™€ ๊ฐ™์€ ์ƒํ™ฉ์—์„œ ๋ณ„๋‹ค๋ฅธ ์ฒ˜๋ฆฌ๋ฅผ ์•ˆํ–ˆ๋‹ค๋ฉด ๋ฐฐ์†ก ์„œ๋น„์Šค์— ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค๋Š” ์ด์œ ๋กœ ์ฃผ๋ฌธ ์„œ๋น„์Šค๋„ ์–ด๋””์„ ๊ฐ€ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธฐ๊ฒŒ ๋  ๊ฒƒ์ด๊ณ , ์ฃผ๋ฌธ ์„œ๋น„์Šค๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ์–ด๋–ค ์„œ๋น„์Šค๊ฐ€ ์žˆ๋‹ค๋ฉด ๊ทธ ์„œ๋น„์Šค๋งˆ์ €๋„ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธธ ๊ฒƒ์ด๋‹ค.
์ด๋ ‡๊ฒŒ ๋งˆ์ดํฌ๋กœ ์„œ๋น„์Šค์—์„œ๋Š” ๊ฐ๊ฐ์˜ ์„œ๋น„์Šค๋“ค์ด ๋…๋ฆฝ์ ์ด์ง€๋งŒ, ์žฅ์• ๊ฐ€ ์ „ํŒŒ๋˜๋Š” ์„ฑ์งˆ์ด ์žˆ๋‹ค.
๊ทธ๋ž˜์„œ ์ด๋ฅผ ๋ง‰๊ธฐ์œ„ํ•ด์„œ๋Š” ์ฃผ๋ฌธ ์„œ๋น„์Šค๊ฐ€ ๋ฐฐ์†ก ์„œ๋น„์Šค APIํ˜ธ์ถœ์— ์‹คํŒจํ•  ๊ฒฝ์šฐ, ์—‘์…€ ํŒŒ์ผ๋กœ๋ผ๋„ ๋‚จ๊ฒจ๋†จ๋‹ค๊ฐ€ ๋ฐฐ์†กํ•  ์ˆ˜ ์žˆ๊ฒŒ ์ „๋‹ฌํ•ด์ค€๋‹ค๋“ ์ง€, ์‡ผํ•‘๋ชฐ ๋ทฐ์–ด ์„œ๋น„์Šค๊ฐ€ ์ƒํ’ˆ ์ถ”์ฒœ ์„œ๋น„์Šค APIํ˜ธ์ถœ์— ์‹คํŒจํ•  ๊ฒฝ์šฐ, ๋””ํดํŠธ๋กœ ์ƒํ’ˆ ์ถ”์ฒœ์„ ํ•ด์ค€๋‹ค๋“ ์ง€ ํ•˜๋Š” ์ผ์„ ํ•ด์ค˜์•ผ ํ•œ๋‹ค.
์œ„์™€ ๊ฐ™์€ ์ผ์„ ์•„์ฃผ ๊ฐ„๋‹จํ•œ ์ฝ”๋“œ๋งŒ์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋„์™€์ฃผ๋Š”๊ฒŒ hystrix ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ณ  ๊ทธ๊ฒƒ์„ ์Šคํ”„๋ง๋ถ€ํŠธ์— ์—ฐ๋™ํ•ด์„œ ์‚ฌ์šฉํ•ด๋ณผ ๊ฒƒ์ด๋‹ค.

๐Ÿ’ก Sleuth
MSA๊ตฌ์กฐ์—์„œ ํด๋ผ์ด์–ธํŠธ์˜ ํ˜ธ์ถœ์ด ๋‚ด๋ถ€์ ์œผ๋กœ ์—ฌ๋Ÿฌ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋ฅผ ๊ฑฐ์ณ์„œ ์ผ์–ด๋‚จ
์ด์™€ ๊ฐ™์€ ๊ตฌ์กฐ๋•Œ๋ฌธ์— ์ „์ฒด ํŠธ๋žœ์žญ์…˜์— ๋Œ€ํ•œ ๋กœ๊ทธ ์ถ”์ ์ด ์–ด๋ ค์›€
์ด๋ฅผ ์ถ”์ ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์—ฐ๊ด€๋œ ID๊ฐ€ ํ•„์š”ํ•˜๋‹ค. ์ด๋Ÿฌํ•œ ID(trace, span)๋ฅผ ์ž๋™์œผ๋กœ ์ƒ์„ฑ

๐Ÿ’ก Zipkin
Zipkin ์€ ํŠธ์œ„ํ„ฐ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ถ„์‚ฐ ํ™˜๊ฒฝ ์ถ”์  ์‹œ์Šคํ…œ ์˜คํ”ˆ์†Œ์Šค์ด๋‹ค.
๊ธฐ๋ณธ์ ์ธ ์•„ํ‚คํ…์ฒ˜๋Š” Google Drapper ์—์„œ ๋ฐœ์ „ํ•˜์˜€๊ณ , ๋ถ„์‚ฐํ™˜๊ฒฝ์—์„œ์˜ ์‹œ์Šคํ…œ ๋ณ‘๋ชฉ ํ˜„์ƒ์„ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋‹ค.
Zipkin์€ ์•„๋ž˜ ๊ตฌ์„ฑ๋„์™€ ๊ฐ™์ด Collector, Query Service, DataBase, WebUI ๋กœ ๊ตฌ์„ฑ๋œ๋‹ค.

profile
Backend Engineer

0๊ฐœ์˜ ๋Œ“๊ธ€