Spring Cloud Basic

Spring Cloud๋Š” ๋ถ„์‚ฐ ์‹œ์Šคํ…œ, ํŠนํžˆ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜(MSA)๋ฅผ ๊ตฌ์ถ•ํ•  ๋•Œ ๊ณตํ†ต์ ์œผ๋กœ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ๋“ค์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ๊ธฐ๋Šฅ๋“ค ์ œ๊ณตํ•˜๋Š” ํ”„๋ ˆ์ž„์›Œํฌ๋‹ค.

ํ•ต์‹ฌ ๊ธฐ๋Šฅ
ํ•ด๊ฒฐ ๋ชจ๋“ˆ
๊ธฐ๋Šฅ ์š”์•ฝ

์„œ๋น„์Šค ๋””์Šค์ปค๋ฒ„๋ฆฌ

Eureka

์„œ๋น„์Šค ์ธ์Šคํ„ด์Šค์˜ ๋™์  ์œ„์น˜๋ฅผ ์ด๋ฆ„์œผ๋กœ ์ฐพ๊ณ  ๊ด€๋ฆฌ

๋ผ์šฐํŒ… ๋ฐ API ๊ฒŒ์ดํŠธ์›จ์ด

Spring Cloud Gateway

๋ชจ๋“  ์š”์ฒญ์˜ ๋‹จ์ผ ์ง„์ž…์  ์—ญํ•  ๋ฐ ๋ผ์šฐํŒ…, ํ•„ํ„ฐ๋ง

์ค‘์•™ ์ง‘์ค‘์‹ ์„ค์ •

Spring Cloud Config

์—ฌ๋Ÿฌ ์„œ๋น„์Šค์˜ ์„ค์ • ํŒŒ์ผ ์ค‘์•™ ๊ด€๋ฆฌ

ํƒ„๋ ฅ์„ฑ ๋ฐ ๋ณต์›๋ ฅ

Resilience4J

์žฅ์• ๊ฐ€ ์ „์ฒด ์‹œ์Šคํ…œ์œผ๋กœ ์ „ํŒŒ๋˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€

Spring Cloud ๋ชจ๋“ˆ ๋ฆฌ์ŠคํŠธ

Spring Cloud๋Š” ๋‹ค์–‘ํ•œ ํ•˜์œ„ ํ”„๋กœ์ ํŠธ(๋ชจ๋“ˆ)๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์œผ๋ฉฐ, ํ•„์š”ํ•œ ๊ธฐ๋Šฅ์— ๋งž๊ฒŒ ์ ์ ˆํ•œ ๋ชจ๋“ˆ์„ ์„ ํƒํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

๋ชจ๋“ˆ ์ด๋ฆ„
์ฃผ์š” ๊ธฐ๋Šฅ

Spring Cloud Gateway

API ๊ฒŒ์ดํŠธ์›จ์ด, ๋ผ์šฐํŒ…, ํ•„ํ„ฐ๋ง(๋น„๋™๊ธฐ ๋…ผ๋ธ”๋กœํ‚น)

Spring Cloud Netflix Eureka

์„œ๋น„์Šค ํƒ์ƒ‰(Service Discovery)

Spring Cloud Config

์ค‘์•™ํ™”๋œ ์™ธ๋ถ€ ์„ค์ • ๊ด€๋ฆฌ

Spring Cloud OpenFeign

์„ ์–ธ์ (Declarative) REST ํด๋ผ์ด์–ธํŠธ

Resilience4j

ํšŒ๋ณต์„ฑ ํŒจํ„ด (์„œํ‚ท ๋ธŒ๋ ˆ์ด์ปค, ์žฌ์‹œ๋„ ๋“ฑ)

Spring Cloud Sleuth

๋ถ„์‚ฐ ์ถ”์  (๋กœ๊น…)

Spring Cloud Stream

๋ฉ”์‹œ์ง€ ๊ธฐ๋ฐ˜ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ๊ตฌ์ถ• ํ”„๋ ˆ์ž„์›Œํฌ

Spring Cloud Bus

์„ค์ • ๋ณ€๊ฒฝ ๋“ฑ ์ƒํƒœ ๋ณ€๊ฒฝ ์ด๋ฒคํŠธ๋ฅผ ์—ฌ๋Ÿฌ ์ธ์Šคํ„ด์Šค์— ์ „ํŒŒ

ํ•ต์‹ฌ ๋ชจ๋“ˆ

Spring Cloud Gateway

์‹œ์Šคํ…œ์˜ ๋ชจ๋“  ์™ธ๋ถ€ ์š”์ฒญ์ด ๊ฑฐ์ณ๊ฐ€๋Š” ๋‹จ์ผ ์ง„์ž…์ (Single Point of Entry) ์—ญํ• ์„ ํ•˜๋Š” API ๊ฒŒ์ดํŠธ์›จ์ด๋กœ, ๋น„๋™๊ธฐ ๋…ผ๋ธ”๋กœํ‚น ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•˜์—ฌ ๋†’์€ ์„ฑ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.

  • Route: ID, ๋ชฉ์ ์ง€ URI, ์กฐ๊ฑด(Predicate) ๋ฐ ํ•„ํ„ฐ(Filter)๋กœ ๊ตฌ์„ฑ

  • Predicate: ๋“ค์–ด์˜จ ์š”์ฒญ์„ ํ‰๊ฐ€ํ•˜์—ฌ Route์™€ ๋งค์นญ์‹œํ‚ค๋Š” ์กฐ๊ฑด. ๊ฒฝ๋กœ(Path), ํ—ค๋”(Header), ์ฟ ํ‚ค(Cookie) ๋“ฑ ๋‹ค์–‘ํ•œ ์กฐ๊ฑด์œผ๋กœ ์„ค์ • ๊ฐ€๋Šฅ

  • Filter: ๋งค์นญ๋œ ์š”์ฒญ์ด ๋‹ค์šด์ŠคํŠธ๋ฆผ ์„œ๋น„์Šค๋กœ ์ „๋‹ฌ๋˜๊ธฐ ์ „ํ›„์— ํŠน์ • ๋กœ์ง์„ ์ˆ˜ํ–‰

    • GatewayFilter: ํŠน์ • ๋ผ์šฐํŠธ์—๋งŒ ์ ์šฉ

    • GlobalFilter: ๋ชจ๋“  ๋ผ์šฐํŠธ์— ๊ณตํ†ต์œผ๋กœ ์ ์šฉ

Eureka

MSA ํ™˜๊ฒฝ์—์„œ ๊ฐ ์„œ๋น„์Šค์˜ ์œ„์น˜ ์ •๋ณด(IP, Port)๋ฅผ ๋“ฑ๋กํ•˜๊ณ  ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋Š” ์„œ๋น„์Šค ๋””์Šค์ปค๋ฒ„๋ฆฌ(Service Discovery) ์„œ๋ฒ„์ด๋‹ค.

  • ๋™์ž‘ ๋ฐฉ์‹

    1. Register(๋“ฑ๋ก): ๊ฐ ์„œ๋น„์Šค ์ธ์Šคํ„ด์Šค(Eureka Client)๋Š” ์‹œ์ž‘ ์‹œ ์ž์‹ ์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ(์ด๋ฆ„, IP, ํฌํŠธ ๋“ฑ)๋ฅผ Eureka Server์— ๋“ฑ๋ก

    2. Renew(๊ฐฑ์‹ ): ํด๋ผ์ด์–ธํŠธ๋Š” ์ฃผ๊ธฐ์ ์œผ๋กœ ํ•˜ํŠธ๋น„ํŠธ(Heartbeat)๋ฅผ ์„œ๋ฒ„์— ๋ณด๋‚ด ์ž์‹ ์ด ์‚ด์•„์žˆ์Œ์„ ์•Œ๋ฆผ

    3. Fetch Registry(๋ชฉ๋ก ์กฐํšŒ): ํด๋ผ์ด์–ธํŠธ๋Š” ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ์ „์ฒด ์„œ๋น„์Šค ๋“ฑ๋ก ์ •๋ณด๋ฅผ ์ฃผ๊ธฐ์ ์œผ๋กœ ๊ฐ€์ ธ์™€ ๋กœ์ปฌ์— ์บ์‹ฑ

    4. Cancel(์ทจ์†Œ): ์„œ๋น„์Šค๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ์ข…๋ฃŒ๋  ๋•Œ, ์„œ๋ฒ„์— ๋“ฑ๋ก ํ•ด์ œ ์š”์ฒญ

  • ํŠน์ง•

    • Self-Preservation Mode(์ž๊ธฐ๋ณดํ˜ธ ๋ชจ๋“œ)

      • ๋ชฉ์ : ๊ฐœ๋ณ„ ์„œ๋น„์Šค์˜ ์žฅ์• ๊ฐ€ ์•„๋‹ˆ๋ผ, ์ผ์‹œ์ ์ธ ๋„คํŠธ์›Œํฌ ๋‹จ์ ˆ๋กœ ์ธํ•ด ๋‹ค์ˆ˜์˜ ํด๋ผ์ด์–ธํŠธ๋กœ๋ถ€ํ„ฐ ํ•˜ํŠธ๋น„ํŠธ๋ฅผ ๋ฐ›์ง€ ๋ชปํ•˜๋Š” ์ƒํ™ฉ์„ ๋Œ€๋น„ํ•œ ๋ฐฉ์–ด ๋ฉ”์ปค๋‹ˆ์ฆ˜

      • ๋™์ž‘: Eureka Server๊ฐ€ ๋‹ค์ˆ˜์˜ ํด๋ผ์ด์–ธํŠธ๋กœ๋ถ€ํ„ฐ ํ•˜ํŠธ๋น„ํŠธ๋ฅผ ๋ฐ›์ง€ ๋ชปํ•˜๋Š” ๊ฒฝ์šฐ ์ผ์‹œ์ ์ธ ๋ฌธ์ œ๋กœ ํŒ๋‹จํ•˜์—ฌ ๊ธฐ์กด ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ๋ฅผ ์œ ์ง€

        • ๋งŒ์•ฝ ์ œ๊ฑฐํ•˜๋ฉด ๋„คํŠธ์›Œํฌ๊ฐ€ ๋ณต๊ตฌ๋˜์—ˆ์„ ๋•Œ ์ •์ƒ์ ์ธ ์„œ๋น„์Šค๋“ค์ด ์„œ๋กœ๋ฅผ ์ฐพ์ง€ ๋ชปํ•˜๋Š” ์—ฐ์‡„ ์žฅ์• ๋กœ ์ด์–ด์งˆ ์ˆ˜ ์žˆ์Œ

    • Client-Side Load Balancing

      • Eureka ์ž์ฒด๋Š” ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ๊ฐ€ ์•„๋‹ˆ๋ฉฐ, Client-Side Load Balancing ๋ฐฉ์‹ ์‚ฌ์šฉ

      • ํด๋ผ์ด์–ธํŠธ(Spring Cloud Gateway๋‚˜ RestTemplate)๊ฐ€ Eureka๋กœ๋ถ€ํ„ฐ ํŠน์ • ์„œ๋น„์Šค์˜ ์ธ์Šคํ„ด์Šค ๋ชฉ๋ก์„ ๋ฐ›์•„์™€ ์ž์ฒด์ ์œผ๋กœ ์š”์ฒญ์„ ๋ถ„์‚ฐ ์ฒ˜๋ฆฌ

Last updated

Was this helpful?