[Project] Spring cloud

Updated:

Categories:

Tags: ,

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


Spring Cloud๋ž€?

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

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

1. Eureka: ์ „ํ™”๋ฒˆํ˜ธ๋ถ€ ์—ญํ• ์„ ํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ

Eureka๋Š” ์„œ๋น„์Šค ๋””์Šค์ปค๋ฒ„๋ฆฌ์˜ ์ค‘์‹ฌ์ด๋ผ๊ณ  ๋ณด๋ฉด ๋œ๋‹ค. ์‰ฝ๊ฒŒ ๋งํ•˜๋ฉด, ๊ฐ ์„œ๋น„์Šค๊ฐ€ ์–ด๋””์— ์žˆ๋Š”์ง€ ์•Œ๋ ค์ฃผ๋Š” โ€˜์ „ํ™”๋ฒˆํ˜ธ๋ถ€โ€™ ์—ญํ• ์„ ํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ๋‹ค. ๊ฐ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋Š” Eureka ์„œ๋ฒ„์— ์ž์‹ ์„ ๋“ฑ๋กํ•˜๊ณ , ๋‹ค๋ฅธ ์„œ๋น„์Šค๋“ค์€ ํ•„์š”ํ•œ ๋•Œ์— ์ด Eureka ์„œ๋ฒ„์—์„œ ๊ทธ ์œ„์น˜ ์ •๋ณด๋ฅผ ์–ป๋Š”๋‹ค. ์ด๋ ‡๊ฒŒ ํ•จ์œผ๋กœ์จ ์„œ๋น„์Šค ๊ฐ„ ํ†ต์‹ ์ด ํ›จ์”ฌ ์ˆ˜์›”ํ•ด์ง„๋‹ค.

์—ฌ๊ธฐ์„œ ๊ธฐ์–ตํ•ด์•ผ ํ•  ๊ฑด, ๊ฐ ์„œ๋น„์Šค๊ฐ€ Eureka ํด๋ผ์ด์–ธํŠธ๋กœ ์„ค์ •๋ผ ์žˆ์œผ๋ฉด, ์ฃผ๊ธฐ์ ์œผ๋กœ ์ž์‹ ์˜ ์ƒํƒœ์™€ ์œ„์น˜(IP, ํฌํŠธ)๋ฅผ Eureka ์„œ๋ฒ„์— ๋“ฑ๋กํ•˜๊ณ  ๊ฐฑ์‹ ํ•œ๋‹ค๋Š” ์ ์ด๋‹ค.


2. API Gateway: ์™ธ๋ถ€ ํŠธ๋ž˜ํ”ฝ์˜ ๊ด€๋ฌธ

API Gateway๋Š” ์™ธ๋ถ€์—์„œ ๋“ค์–ด์˜ค๋Š” ๋ชจ๋“  ํŠธ๋ž˜ํ”ฝ์˜ ์ž…๊ตฌ๋‹ค. ํ”ํžˆ North-South ํŠธ๋ž˜ํ”ฝ์„ ์ œ์–ดํ•œ๋‹ค๊ณ  ํ‘œํ˜„ํ•˜๋Š”๋ฐ, ์ด๋Š” ์™ธ๋ถ€์—์„œ ๋‚ด๋ถ€๋กœ, ํ˜น์€ ๋‚ด๋ถ€์—์„œ ์™ธ๋ถ€๋กœ ๊ฐ€๋Š” ํŠธ๋ž˜ํ”ฝ์„ ๋งํ•œ๋‹ค. ์ด์™€ ๋ฐ˜๋Œ€๋กœ ์„œ๋น„์Šค ๊ฐ„์˜ ํ†ต์‹ , ์ฆ‰ East-West ํŠธ๋ž˜ํ”ฝ์€ ์ฃผ๋กœ ์„œ๋น„์Šค ๋ฉ”์‰ฌ๊ฐ€ ๋‹ด๋‹นํ•œ๋‹ค. ์ด ์ฐจ์ด๋ฅผ ์•Œ๊ณ  ์žˆ์œผ๋ฉด ํ—ท๊ฐˆ๋ฆฌ์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค.


3. API Gateway์™€ Service Mesh์˜ ๊ณตํ†ต ๊ธฐ๋Šฅ

API Gateway์™€ ์„œ๋น„์Šค ๋ฉ”์‰ฌ๋Š” ๋ช‡ ๊ฐ€์ง€ ๊ณตํ†ต๋œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค

  • Distributed Tracing
  • Service Discovery
  • Load Balancing
  • TLS Termination
  • JWT Validation
  • Request Routing
  • Traffic Splitting
  • Canary Deployment
  • Traffic Mirroring
  • Rate Limiting

์ด์ฒ˜๋Ÿผ ์—ฌ๋Ÿฌ ๊ธฐ๋Šฅ์—์„œ ๊ฒน์น˜์ง€๋งŒ, ๊ฐ๊ฐ์˜ ์šฉ๋„๋Š” ๋‹ค๋ฅด๋‹ˆ๊นŒ ์ƒํ™ฉ์— ๋งž๊ฒŒ ์„ ํƒํ•ด์•ผ ํ•œ๋‹ค.


4. API Gateway๋งŒ์ด ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ

  1. Edge Decoupling

    Edge Decoupling์€ ์™ธ๋ถ€ ์š”์ฒญ๊ณผ ๋‚ด๋ถ€ API ์‚ฌ์ด์˜ ์™„์ถฉ ์—ญํ• ์„ ํ•œ๋‹ค๊ณ  ๋ณด๋ฉด ๋œ๋‹ค.

    ์—ฌ๊ธฐ์„œ API Gateway๊ฐ€ ํ•  ์ˆ˜ ์žˆ๋Š” ์ผ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค:

    • ์š”์ฒญ/์‘๋‹ต ๋ณ€ํ™˜
      • ์™ธ๋ถ€๋กœ๋ถ€ํ„ฐ ์˜ค๋Š” ์š”์ฒญ์„ ์ˆ˜์ •ํ•ด์„œ ๋ฐฑ์—”๋“œ์˜ ์„ธ๋ถ€ ์‚ฌํ•ญ์„ ๊ฐ์ถœ ์ˆ˜ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ํ—ค๋”๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์ œ๊ฑฐํ•˜๊ณ , ํŽ˜์ด๋กœ๋“œ ๋ณ€ํ™˜ ๋“ฑ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ”„๋กœํ† ์ฝœ ๋ณ€ํ™˜
      • XML, JSON ๊ฐ™์€ ์„œ๋กœ ๋‹ค๋ฅธ ํ”„๋กœํ† ์ฝœ์„ API Gateway๊ฐ€ ์•Œ์•„์„œ ๋ณ€ํ™˜ํ•ด์ค„ ์ˆ˜ ์žˆ๋‹ค.
    • ์˜ค๋ฅ˜/์†๋„ ์ œํ•œ์— ๋”ฐ๋ฅธ ์‘๋‹ต ์‚ฌ์šฉ์ž ์ง€์ •
      • ํŠน์ • ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ๋‚˜ ํŠธ๋ž˜ํ”ฝ์ด ๋„ˆ๋ฌด ๋งŽ์•„ ์†๋„ ์ œํ•œ์ด ๊ฑธ๋ ธ์„ ๋•Œ, ๊ฒŒ์ดํŠธ์›จ์ด๊ฐ€ ์ž์ฒด์ ์œผ๋กœ ์‘๋‹ต์„ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•ํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ์ง์ ‘ ์‘๋‹ต
      • ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋น„์ •์ƒ์ ์ธ ์š”์ฒญ์„ ํ•  ๋•Œ, ๋ฐฑ์—”๋“œ์— ๊ฐ€์ง€ ์•Š๊ณ  API Gateway ์ž์ฒด์—์„œ ๋ฐ”๋กœ ์‘๋‹ต์„ ์ค„ ์ˆ˜ ์žˆ๋‹ค.
    • ํ”„๋ก์‹œ ํŒŒ์ดํ”„๋ผ์ธ ์ œ์–ด
      • ์š”์ฒญ ์ฒ˜๋ฆฌ ์ˆœ์„œ๋ฅผ ๋ฐ”๊พธ๊ฑฐ๋‚˜, ๋””๋ฒ„๊น… ๋„๊ตฌ๋ฅผ ์ œ๊ณตํ•ด์„œ ๋ณต์žกํ•œ ๋กœ์ง์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.
  2. Request Control (์š”์ฒญ ์ œ์–ด)
    • API Gateway๋Š” ํด๋Ÿฌ์Šคํ„ฐ๋กœ ๋“ค์–ด์˜ค๋Š” ํŠธ๋ž˜ํ”ฝ์„ ๋‹จ์ˆœํžˆ ํ—ˆ์šฉํ•˜๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ, ์–ด๋–ค ๋ฐ์ดํ„ฐ์™€ ์š”์ฒญ/์‘๋‹ต์ด ํ—ˆ์šฉ๋˜๋Š”์ง€๋ฅผ ์„ธ๋ฐ€ํ•˜๊ฒŒ ์ œ์–ดํ•œ๋‹ค.
    • ์˜ˆ๋ฅผ ๋“ค์–ด, SQL Injection๊ณผ ๊ฐ™์€ ๊ณต๊ฒฉ์„ ๋ง‰์„ ์ˆ˜ ์žˆ๋‹ค. ์ด๊ฑธ ์œ„ํ•ด API Gateway๋Š” ์•„ํ‚คํ…์ฒ˜์— ๋“ค์–ด์˜ค๋Š” ํŠธ๋ž˜ํ”ฝ์— ๋Œ€ํ•œ ๊นŠ์€ ์ดํ•ด๊ฐ€ ํ•„์š”ํ•˜๋‹ค.
  3. Custom Security/Bridging Trust Domains
    • API Gateway์˜ ๊ฝƒ์ด๋ผ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ ์ค‘ ํ•˜๋‚˜๊ฐ€ ๋ฐ”๋กœ ์—ฃ์ง€ ๋ณด์•ˆ, ์ฆ‰ ์ธ์ฆ๊ณผ ์ธ๊ฐ€ ๊ด€๋ฆฌ๋‹ค.
    • ์—ฌ๊ธฐ์„œ ์ค‘์š”ํ•œ ๊ฑด ์ธ์ฆ(Authentication)๊ณผ ์ธ๊ฐ€(Authorization)๋ฅผ ๊ตฌ๋ถ„ํ•˜๋Š” ๊ฒƒ.



Service discovery

โœ”๏ธ Service discovery๋Š” MicroService Architecture์—์„œ ๊ฐœ๋ณ„ ์„œ๋น„์Šค๊ฐ€ ๋™์ ์œผ๋กœ ์œ„์น˜ํ•œ ์ฃผ์†Œ๋‚˜ ํฌํŠธ ๋“ฑ์„ ์ฐพ์„ ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๋งค์ปค๋‹ˆ์ฆ˜

โœ”๏ธ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค์—์„œ๋Š” ๊ฐ ์„œ๋น„์Šค๊ฐ€ ๋…๋ฆฝ์ ์œผ๋กœ ๋ฐฐํฌ๋˜๊ณ  ํ™•์žฅ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์„œ๋น„์Šค ๊ฐ„ ํ†ต์‹ ์„ ์œ„ํ•ด์„œ ์„œ๋กœ์˜ ์œ„์น˜๋ฅผ ์•Œ์•„์•ผ ํ•˜๊ณ , ์ด๋Ÿฐ ๋™์  ํ™˜๊ฒฝ์—์„œ ์„œ๋น„์Šค๊ฐ€ ์–ด๋””์— ์œ„์น˜ํ•˜๋Š”์ง€ ์•Œ๊ธฐ ์œ„ํ•ด ์„œ๋น„์Šค ๋””์Šค์ปค๋ฒ„๋ฆฌ๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

โœ”๏ธ ์ฃผ์š” ๊ธฐ๋Šฅ

  1. Service Registry
    • Service Registry๋Š” ๊ฐ ์„œ๋น„์Šค์˜ ์œ„์น˜ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ๊ฐ™์€ ์—ญํ• ์„ ํ•œ๋‹ค.
    • Eureka, Consul, Zookeeper ๊ฐ™์€ ํˆด์ด ๋Œ€ํ‘œ์ ์ธ ์„œ๋น„์Šค ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ ์—ญํ• ์„ ์ˆ˜ํ–‰
    • ์„œ๋น„์Šค๊ฐ€ ์‹œ์ž‘๋˜๋ฉด ์ž์‹ ์„ ์„œ๋น„์Šค ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์— ๋“ฑ๋กํ•˜๊ณ , ์ข…๋ฃŒ๋˜๋ฉด ์ œ๊ฑฐ ๋œ๋‹ค.
  2. ์„œ๋น„์Šค ๋“ฑ๋ก
    • ์„œ๋น„์Šค๊ฐ€ ์‹œ์ž‘๋  ๋•Œ, ์„œ๋น„์Šค ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์— ์ž์‹ ์˜ IP์™€ ํฌํŠธ ์ •๋ณด๋ฅผ ๋“ฑ๋กํ•˜๋Š” ๊ณผ์ •
    • ์„œ๋น„์Šค ๋“ฑ๋ก์€ ์„œ๋น„์Šค๊ฐ€ ์ง์ ‘ ํ•  ์ˆ˜๋„ ์žˆ๊ณ , ์ด๋ฅผ ๋Œ€์‹ ํ•˜๋Š” ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ๋‚˜ ํ”„๋ก์‹œ๊ฐ€ ์ฒ˜๋ฆฌํ•  ์ˆ˜๋„ ์žˆ๋‹ค.
  3. ์„œ๋น„์Šค ์กฐํšŒ
    • ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋‹ค๋ฅธ ์„œ๋น„์Šค์— ์š”์ฒญ์„ ๋ณด๋‚ด๊ธฐ ์ „์—, ์„œ๋น„์Šค ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์—์„œ ํ•ด๋‹น ์„œ๋น„์Šค์˜ ์œ„์น˜ ์ •๋ณด๋ฅผ ์กฐํšŒํ•˜๋Š” ๊ณผ์ •
    • ์„œ๋น„์Šค ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ๋Š” ์„œ๋น„์Šค๊ฐ€ ๋™์ž‘ ์ค‘์ธ์ง€ ์—ฌ๋ถ€์™€ ๊ด€๋ จ๋œ ์ƒํƒœ ์ •๋ณด๋ฅผ ๊ด€๋ฆฌํ•˜๋ฉฐ, ์„œ๋น„์Šค๊ฐ€ ์ค‘๋‹จ๋˜๋ฉด ์„œ๋น„์Šค ๋ชฉ๋ก์—์„œ ์ œ๊ฑฐํ•œ๋‹ค.

โœ”๏ธ ์žฅ์ 

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

โœ”๏ธ Service Discovery tool

  • Netflix Eureka: Netflix๊ฐ€ ๊ฐœ๋ฐœํ•œ ์˜คํ”ˆ ์†Œ์Šค ์„œ๋น„์Šค ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ๋กœ, Spring Cloud์—์„œ ๋„๋ฆฌ ์‚ฌ์šฉ
  • HashiCorp Consul: ์„œ๋น„์Šค ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์™€ ํ•จ๊ป˜ ์„œ๋น„์Šค ๊ตฌ์„ฑ ๊ด€๋ฆฌ, ๋ณด์•ˆ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ํˆด.
  • Apache Zookeeper: ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์„ ์œ„ํ•œ ์ค‘์•™ํ™”๋œ ์„œ๋น„์Šค ๊ด€๋ฆฌ ํˆด๋กœ, ์„œ๋น„์Šค ๋””์Šค์ปค๋ฒ„๋ฆฌ์—๋„ ์‚ฌ์šฉ๋จ.

โœ”๏ธ ์„œ๋น„์Šค ๋””์Šค์ปค๋ฒ„๋ฆฌ๋Š” ๋‘ ๊ฐ€์ง€ ํŒจํ„ด์ด ์žˆ๋Š”๋ฐ Client-side discovery์™€ Server-side discovery๊ฐ€ ์žˆ๋‹ค. ์ด๊ฑด ์•„๋ž˜์— ๋”ฐ๋กœ ์ •๋ฆฌํ•  ์˜ˆ์ •

Client-side discovery vs Server-side discovery

Service discovery ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ๋Š” ํฌ๊ฒŒ client discovery ๋ฐฉ์‹๊ณผ server side discovery ๋ฐฉ์‹์ด ์žˆ๋‹ค.

Client-Side Discovery

  • Client-Side Discovery์—์„œ๋Š” ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ง์ ‘ ์„œ๋น„์Šค ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์—์„œ ์„œ๋น„์Šค์˜ ์œ„์น˜๋ฅผ ์กฐํšŒํ•œ ํ›„, ํ•ด๋‹น ์„œ๋น„์Šค๋กœ ์š”์ฒญ์„ ๋ณด๋‚ธ๋‹ค.
  • ์„œ๋น„์Šค ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ๋Š” ๊ฐ ์„œ๋น„์Šค์˜ ์ธ์Šคํ„ด์Šค์™€ ๊ทธ ์œ„์น˜(IP ์ฃผ์†Œ์™€ ํฌํŠธ)๋ฅผ ์•Œ๊ณ  ์žˆ๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.

  1. ๋™์ž‘ ๋ฐฉ์‹:
    1. ์„œ๋น„์Šค ์ธ์Šคํ„ด์Šค๊ฐ€ ์‹œ์ž‘๋˜๋ฉด ์„œ๋น„์Šค ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์— ์ž์‹ ์˜ ์œ„์น˜(IP, ํฌํŠธ)๋ฅผ ๋“ฑ๋ก.
    2. ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋น„์Šค์— ์š”์ฒญ์„ ๋ณด๋‚ด๋ ค๊ณ  ํ•  ๋•Œ, ์„œ๋น„์Šค ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์—์„œ ํ•ด๋‹น ์„œ๋น„์Šค ์ธ์Šคํ„ด์Šค์˜ ์œ„์น˜๋ฅผ ์กฐํšŒ.
    3. ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„ ํƒํ•œ ์„œ๋น„์Šค ์ธ์Šคํ„ด์Šค์— ์ง์ ‘ ์š”์ฒญ์„ ์ „์†ก.
    4. ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ๊ณผ ์„œ๋น„์Šค ์œ„์น˜ ์กฐํšŒ๋ฅผ ์ž์ฒด์ ์œผ๋กœ ์ฒ˜๋ฆฌ.
  2. ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด๋“œ ๋””์Šค์ปค๋ฒ„๋ฆฌ์˜ ๊ตฌ์„ฑ ์š”์†Œ
    • Service Registry : Eureka, Consul, Zookeeper์™€ ๊ฐ™์€ ์‹œ์Šคํ…œ์ด ์„œ๋น„์Šค ๋“ฑ๋ก ๋ฐ ์กฐํšŒ๋ฅผ ๋‹ด๋‹น.
    • ํด๋ผ์ด์–ธํŠธ: ์ง์ ‘ ์„œ๋น„์Šค ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์—์„œ ํ•„์š”ํ•œ ์„œ๋น„์Šค๋ฅผ ์ฐพ๊ณ , ๊ทธ ์ •๋ณด๋กœ ์š”์ฒญ์„ ๋ณด๋ƒ„.
    • Load Balancer: ํด๋ผ์ด์–ธํŠธ์—์„œ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ์„ ์ˆ˜ํ–‰ (์˜ˆ: Ribbon ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ).
  3. ์˜ˆ
    • Spring Cloud์—์„œ Netflix Eureka๋ฅผ ์‚ฌ์šฉํ•œ ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด๋“œ ๋””์Šค์ปค๋ฒ„๋ฆฌ๊ฐ€ ๋Œ€ํ‘œ์ 
    • ํด๋ผ์ด์–ธํŠธ๊ฐ€ Eureka ์„œ๋ฒ„์—์„œ ๋‹ค๋ฅธ ์„œ๋น„์Šค์˜ ์œ„์น˜๋ฅผ ์กฐํšŒํ•˜๊ณ , ์ง์ ‘ ์„ ํƒํ•œ ์ธ์Šคํ„ด์Šค์— ์š”์ฒญ์„ ๋ณด๋‚ด๋Š” ๋ฐฉ์‹

      1
      2
      
        # ํด๋ผ์ด์–ธํŠธ๋Š” ์„œ๋น„์Šค ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ(Eureka)์—์„œ ์„œ๋น„์Šค ์œ„์น˜๋ฅผ ์กฐํšŒ ํ›„ ์š”์ฒญ ์ „์†ก
        Client --> Service Registry --> Selected Service
      
  4. ์žฅ์ 
    • ๋‹จ์ˆœํ•œ ์ธํ”„๋ผ
      • ์ถ”๊ฐ€์ ์ธ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ๋ฅผ ๊ตฌ์ถ•ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค.
    • ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ์„ ์ง์ ‘ ์ฒ˜๋ฆฌ
      • ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์–ด๋–ค ์„œ๋น„์Šค ์ธ์Šคํ„ด์Šค์— ์š”์ฒญํ• ์ง€ ๊ฒฐ์ •ํ•˜๋ฏ€๋กœ, ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ ์ „๋žต์„ ์œ ์—ฐํ•˜๊ฒŒ ์ ์šฉ ๊ฐ€๋Šฅ.
  5. ๋‹จ์ 
    • ํด๋ผ์ด์–ธํŠธ ๋ณต์žก์„ฑ ์ฆ๊ฐ€
      • ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋น„์Šค ์œ„์น˜ ์กฐํšŒ์™€ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ์„ ์ง์ ‘ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํด๋ผ์ด์–ธํŠธ ๋กœ์ง์ด ๋ณต์žกํ•ด์งˆ ์ˆ˜ ์žˆ๋‹ค.
    • ํด๋ผ์ด์–ธํŠธ ๋ณ€๊ฒฝ ํ•„์š”
      • ์„œ๋น„์Šค ๋””์Šค์ปค๋ฒ„๋ฆฌ๋‚˜ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ์— ๋ณ€ํ™”๊ฐ€ ์ƒ๊ธฐ๋ฉด ๋ชจ๋“  ํด๋ผ์ด์–ธํŠธ์— ์—…๋ฐ์ดํŠธ๊ฐ€ ํ•„์š”

Server-Side Discovery

  • ์„œ๋ฒ„ ์‚ฌ์ด๋“œ ๋””์Šค์ปค๋ฒ„๋ฆฌ์—์„œ๋Š” ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋น„์Šค์— ์š”์ฒญ์„ ๋ณด๋‚ผ ๋•Œ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ๊ฐ€ ์ค‘๊ฐ„์—์„œ ์š”์ฒญ์„ ๋ฐ›์•„ ์„œ๋น„์Šค ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ๋ฅผ ์กฐํšŒํ•˜๊ณ , ์ ์ ˆํ•œ ์„œ๋น„์Šค ์ธ์Šคํ„ด์Šค์— ์š”์ฒญ์„ ์ „๋‹ฌํ•œ๋‹ค.
  • ํด๋ผ์ด์–ธํŠธ๋Š” ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ๋ฅผ ํ†ตํ•ด ๋ชจ๋“  ํ†ต์‹ ์„ ํ•˜๊ณ , ์ง์ ‘ ์„œ๋น„์Šค ์œ„์น˜๋ฅผ ์ฐพ์ง€ ์•Š์•„๋„ ๋œ๋‹ค.

  1. ๋™์ž‘ ๋ฐฉ์‹
    1. ์„œ๋น„์Šค ์ธ์Šคํ„ด์Šค๊ฐ€ ์‹œ์ž‘๋˜๋ฉด ์„œ๋น„์Šค ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์— ์ž์‹ ์˜ ์œ„์น˜๋ฅผ ๋“ฑ๋ก.
    2. ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋น„์Šค์— ์š”์ฒญ์„ ๋ณด๋‚ด๋ฉด, ์š”์ฒญ์ด ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ๋กœ ์ „๋‹ฌ.
    3. ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ๋Š” ์„œ๋น„์Šค ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์—์„œ ์„œ๋น„์Šค ์œ„์น˜๋ฅผ ์กฐํšŒํ•œ ํ›„, ์ ์ ˆํ•œ ์„œ๋น„์Šค ์ธ์Šคํ„ด์Šค์— ์š”์ฒญ์„ ํฌ์›Œ๋”ฉ.
    4. ํด๋ผ์ด์–ธํŠธ๋Š” ์‹ค์ œ ์„œ๋น„์Šค ์œ„์น˜๋ฅผ ์•Œ์ง€ ๋ชปํ•œ ์ฑ„ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ๋ฅผ ํ†ตํ•ด ํ†ต์‹ .
  2. ์„œ๋ฒ„ ์‚ฌ์ด๋“œ ๋””์Šค์ปค๋ฒ„๋ฆฌ์˜ ๊ตฌ์„ฑ ์š”์†Œ
    • Service Registry
      • Eureka, Consul, Zookeeper ๋“ฑ๊ณผ ๊ฐ™์€ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ๊ฐ€ ๊ฐ ์„œ๋น„์Šค์˜ ์œ„์น˜ ์ •๋ณด๋ฅผ ๊ด€๋ฆฌ.
    • Load Balancer
      • HAProxy, AWS Elastic Load Balancer, NGINX ๋“ฑ๊ณผ ๊ฐ™์€ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ๊ฐ€ ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ์„ ๋ฐ›์•„ ์ ์ ˆํ•œ ์„œ๋น„์Šค๋กœ ์ „๋‹ฌ.
  3. ์˜ˆ
    • AWS์—์„œ ์ œ๊ณตํ•˜๋Š” Elastic Load Balancer (ELB)๋‚˜ NGINX๋Š” ์„œ๋ฒ„ ์‚ฌ์ด๋“œ ๋””์Šค์ปค๋ฒ„๋ฆฌ์˜ ๋Œ€ํ‘œ์ ์ธ ์‚ฌ๋ก€
    • ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ๋กœ ์š”์ฒญ์„ ๋ณด๋‚ด๋ฉด, ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ๊ฐ€ ์„œ๋น„์Šค ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์—์„œ ์„œ๋น„์Šค๋ฅผ ์กฐํšŒํ•˜๊ณ  ์ ์ ˆํ•œ ์„œ๋น„์Šค ์ธ์Šคํ„ด์Šค์— ์š”์ฒญ์„ ์ „๋‹ฌํ•˜๋Š” ๋ฐฉ์‹

      1
      2
      
        # ํด๋ผ์ด์–ธํŠธ๋Š” ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ์— ์š”์ฒญ์„ ๋ณด๋‚ด๊ณ , ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ๊ฐ€ ์„œ๋น„์Šค ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์—์„œ ์กฐํšŒ
        Client --> Load Balancer --> Service Registry --> Selected Service
      
  4. ์žฅ์ 
    • ํด๋ผ์ด์–ธํŠธ ๋‹จ์ˆœํ™”
      • ํด๋ผ์ด์–ธํŠธ๋Š” ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ์—๊ฒŒ ์š”์ฒญ๋งŒ ๋ณด๋‚ด๋ฉด ๋˜๋ฏ€๋กœ, ์„œ๋น„์Šค ์œ„์น˜ ์กฐํšŒ์™€ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ์— ๋Œ€ํ•ด ์‹ ๊ฒฝ ์“ธ ํ•„์š”๊ฐ€ ์—†๋‹ค
    • ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ์—์„œ ์ค‘์•™ํ™”๋œ ๊ด€๋ฆฌ
      • ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ๊ฐ€ ๋ชจ๋“  ์„œ๋น„์Šค ์œ„์น˜ ์กฐํšŒ์™€ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ์„ ๊ด€๋ฆฌํ•˜๋ฏ€๋กœ, ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์‰ฝ๊ฒŒ ์ ์šฉ ๊ฐ€๋Šฅ.
    • ํ™•์žฅ์„ฑ: ์—ฌ๋Ÿฌ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์žˆ์„ ๋•Œ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ์—์„œ ์ผ๊ด€๋˜๊ฒŒ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.
  5. ๋‹จ์ 
    • ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ ์ถ”๊ฐ€ ํ•„์š”
      • ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ๋ฅผ ๋ณ„๋„๋กœ ์„ค์ •ํ•˜๊ณ  ๊ด€๋ฆฌํ•ด์•ผ ํ•˜๋ฏ€๋กœ ์ธํ”„๋ผ๊ฐ€ ๋ณต์žกํ•ด์งˆ ์ˆ˜ ์žˆ์–ด.
    • ์ถ”๊ฐ€ ๋„คํŠธ์›Œํฌ ํ™‰
      • ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ์ด ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ๋ฅผ ๊ฑฐ์ณ์•ผ ํ•˜๋ฏ€๋กœ, ๋„คํŠธ์›Œํฌ ์ง€์—ฐ์ด ์ƒ๊ธธ ์ˆ˜ ์žˆ์–ด.

์ฐธ๊ณ  ์‚ฌ์ดํŠธ

https://themapisto.tistory.com/23

https://themapisto.tistory.com/186







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

Leave a comment