[MSA] - 3. ํ•„์š”ํ•œ ์„œ๋น„์Šค๋ฅผ ์ฐพ์•„์ฃผ๋Š” Service Discovery

๋ฐ˜์‘ํ˜•

์•ˆ๋…•ํ•˜์„ธ์š”. ๋‹ค๋“ค ๊ตฌ์ • ์—ฐํœด ์ž˜ ๋ณด๋‚ด๊ณ  ๊ณ„์‹ ๊ฐ€์š”? ๊ตฌ์ • ์–ธํœด๊ธด ํ•˜์ง€๋งŒ, ์ €์—๊ฒŒ๋Š” ๊ธธ๊ฒŒ ๋Š๊ปด์ง€๋Š” ์—ฐํœด์ธ์ง€๋ผ, ์˜ค๋Š˜๋„ ์ด๋ ‡๊ฒŒ ๋„์ ์—ฌ ๋ด…๋‹ˆ๋‹ค.

์˜ค๋Š˜์€ Service Discovery์— ๋Œ€ํ•œ ์ด์•ผ๊ธฐ๋ฅผ ๋‹ค๋ค„๋ณด๋„๋ก ํ• ๊ฒŒ์š”. ์„œ๋น„์Šค ๋””์Šค์ปค๋ฒ„๋ฆฌ๋Š” ์ง€๋‚œ API Gateway์—์„œ๋„ ์ž ์‹œ ๋‹ค๋ค˜๋˜ ๋‚ด์šฉ์ด์ง€๋งŒ ์„œ๋น„์Šค๊ฐ€ ๋ถ„๋ฆฌ๋˜์–ด ์žˆ๋Š” MSA์—์„œ ๊ฐ ์„œ๋น„์Šค๊ฐ€ ๋‹ค์Œ์— ๋ถˆ๋Ÿฌ์•ผํ•  ์„œ๋น„์Šค๊ฐ€ ์–ด๋””์— ์žˆ๋Š”์ง€๋ฅผ ์ฐพ์•„์ฃผ๋Š” ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค.

 

 

What is Service Discovery ?

์‰ฌ์šด ์„ค๋ช…์„ ์œ„ํ•ด Wi-Fi๋ฅผ ์˜ˆ๋กœ ๋“ค์–ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์Šค๋งˆํŠธํฐ์ด๋‚˜ ํƒœ๋ธ”๋ฆฟ PC, ๋…ธํŠธ๋ถ์—์„œ ์ธํ„ฐ๋„ท์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด Wi-Fi์— ์—ฐ๊ฒฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์›๋ž˜๋ผ๋ฉด, ์ง์ ‘ SSID๋ฅผ ์ž…๋ ฅํ•ด์•ผ๋งŒ ํ•˜์ฃ .

ํ•˜์ง€๋งŒ AP ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์šฐ๋ฆฌ๋Š” ์ด๋ ‡๊ฒŒ ๋””๋ฐ”์ด์Šค์—์„œ ๋ณด์—ฌ์ฃผ๋Š” AP์— ์ ‘์†ํ•˜์—ฌ ๋‚ด๊ฐ€ ๊ตฌ์ถ•ํ•œ AP ํ˜น์€ ๋‹ค๋ฅธ ์นดํŽ˜๋‚˜ ํŽธ์˜์  ๋“ฑ์— ์žˆ๋Š” AP๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ, MSA๋ฅผ ๊ตฌ์„ฑํ•˜๋‹ค๋ณด๋ฉด ์œ„์™€ ๊ฐ™์€ ์ƒํ™ฉ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ์„œ๋น„์Šค๋ณ„๋กœ ์„œ๋ฒ„๋ฅผ ๋ณ„๋„๋กœ ๊ตฌ์„ฑํ–ˆ์ง€๋งŒ ๋Œ€์šฉ๋Ÿ‰ ํŠธ๋ž˜ํ”ฝ์„ ์ฒ˜๋ฆฌํ•˜๊ฒŒ ๋˜๋ฉด ์œ„์™€ ๊ฐ™์ด ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ์„ ํ•˜๊ฒŒ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

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

์„œ๋น„์Šค ๋””์Šค์ปค๋ฒ„๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด, ๊ฒŒ์ดํŠธ์›จ์ด์—์„œ ์›ํ•˜๋Š” ์„œ๋น„์Šค๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ๊ณ , ํ•ด๋‹น ์„œ๋น„์Šค์— ๋งž์ถฐ ๋ณด๋‚ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ์ด๋Ÿฌํ•œ ๋ฌธ์ œ์ ์„ ๋œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

Service Discovery ๊ตฌ์„ฑ

์„œ๋น„์Šค ๋””์Šค์ปค๋ฒ„๋ฆฌ๋Š” ๊ฐ ์„œ๋น„์Šค ์ธ์Šคํ„ด์Šค์˜ ์ฃผ์†Œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์„œ๋ฒ„์™€ ๊ทธ๋ฅผ ๋ฐ›๋Š” ํด๋ผ์ด์–ธํŠธ ๋ฐฉ์‹์œผ๋กœ ์ด๋ฃจ์–ด์ง„ Client-Server ์•„ํ‚คํ…์ฒ˜๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. 

์šฐ๋ฆฌ๋Š” ๊ทธ ์„œ๋ฒ„๋ฅผ Service Registry๋ผ๊ณ  ํ•˜๊ณ , ๊ทธ ํด๋ผ์ด์–ธํŠธ๋ฅผ Registry Client๋ผ๊ณ  ์ด์•ผ๊ธฐ ํ•ด๋ด…์‹œ๋‹ค.

๊ฐ ์„œ๋น„์Šค ์ธ์Šคํ„ด์Šค์— Registry Client๋ฅผ ๋ถ™์—ฌ์ฃผ๊ณ , ํ•ด๋‹น ํด๋ผ์ด์–ธํŠธ๋“ค์ด ์ž์‹ ๋“ค์˜ ์ฃผ์†Œ๋ฅผ ์„œ๋ฒ„์— ์ ‘์†ํ•˜์—ฌ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์„œ๋น„์Šค ๋””์Šค์ปค๋ฒ„๋ฆฌ๋Š” ์ด๋“ค ์„œ๋น„์Šค๋ฅผ ์ฐพ์•„์ฃผ๋Š” ์—ญํ• ์„ ํ•˜๊ฒŒ ๋˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•˜๋Š” ๋Œ€ํ‘œ์ ์ธ ์„œ๋น„์Šค ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • Netflix Eureka
  • Apache ZooKeeper
  • etcd
  • consul

 

 

Register Pattern

Service Registry๋Š” ์œ„ ๊ตฌ์กฐ์™€ ๊ฐ™์ด Registry Client๊ฐ€ ์ง์ ‘ Service Registry์— ๋“ฑ๋กํ•˜์—ฌ ์ฐจํ›„์— ๊ฒŒ์ดํŠธ์›จ์ด๋‚˜ ๋‹ค๋ฅธ ์ธ์Šคํ„ด์Šค๊ฐ€ ๋น ๋ฅด๊ฒŒ ์ฐพ์„ ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ๋Š” ๋“ฑ๋ก ํ•ด์ฃผ๋Š” ํŒจํ„ด์ด ์žˆ๋Š”๋ฐ, ์ด๋ฅผ ์šฐ๋ฆฌ๋Š” Self-Registration Pattern์ด๋ผ ํ•ฉ๋‹ˆ๋‹ค.

  • ์…€ํ”„ ๋“ฑ๋ก ํŒจํ„ด (Self-Registration Pattern)
  • ์จ๋“œ ํŒŒํ‹ฐ ๋“ฑ๋ก ํŒจํ„ด (3rd-Party Registration Pattern)

Service Discovery์— ์‚ฌ์šฉ๋˜๋Š” ์„œ๋น„์Šค ๋“ฑ๋ก ํŒจํ„ด์€ ์œ„ 2๊ฐ€์ง€๊ฐ€ ์ œ๊ณต๋˜๋ฉฐ ์…€ํ”„ ๋“ฑ๋ก ํŒจํ„ด์€ ๋“ฑ๋ก๊ณผ ๊ด€๋ฆฌ๋ฅผ ํ•˜๋Š” ์ฃผ์ฒด๊ฐ€ ์„œ๋น„์Šค ์ธ์Šคํ„ด์Šค ์ž์‹ ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ Service Registry์— ์ž์‹ ์˜ ์ •๋ณด๋ฅผ ๋“ฑ๋กํ•˜๊ณ , ์ฃผ๊ธฐ์ ์œผ๋กœ ์ž์‹ ์ด ์‚ด์•„ ์žˆ๋‹ค๋Š” ์‹ ํ˜ธ๋ฅผ ๊ณ„์† ์ „์†กํ•˜๊ฒŒ ๋˜๋Š”๋ฐ, ๋งŒ์•ฝ ์ด ์‹ ํ˜ธ๊ฐ€ ๋Š๊ธธ ๊ฒฝ์šฐ, Registry์—์„œ ์ด ์ •๋ณด๋Š” ์‚ฌ๋ผ์ง€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ฃผ๋กœ Eureka์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.

๋ฐ˜๋Œ€๋กœ 3rd ํŒŒํ‹ฐ ๋“ฑ๋ก ํŒจํ„ด์€ ์™ธ๋ถ€์—์„œ ์„œ๋น„์Šค๋ฅผ ๋“ฑ๋กํ•˜์—ฌ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ Service Registry๊ฐ€ ๊ฐ ์„œ๋น„์Šค ์ธ์Šคํ„ด์Šค์˜ ๋ณ€ํ™”๋ฅผ Polling ํ•˜๊ฑฐ๋‚˜, Pub/Sub๋ฅผ ์ˆ˜ํ–„ํ•จ์œผ๋กœ์จ ๊ณ„์† ์—…๋ฐ์ดํŠธ๋ฅผ ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ์ด ๋ฐฉ๋ฒ•์˜ ๋‹จ์ ์€ Service Registry๊ฐ€ ์ฃฝ์–ด๋ฒ„๋ฆฌ๋ฉด, ๊ทธ ๊ธฐ๋Šฅ ์ž์ฒด๋ฅผ ์†์‹คํ•ด๋ฒ„๋ฆฌ๊ธฐ ๋•Œ๋ฌธ์— Risk๊ฐ€ ๊ต‰์žฅํžˆ ํฌ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. Broker ํŒจํ„ด์˜ ๋‹จ์ ์„ ๊ทธ๋Œ€๋กœ ๋นผ๋‹ฎ์€ ๊ฒƒ์ด์ฃ . ์ด๋Ÿฌํ•œ ๋ฐฉ์‹์€ NetflixOSS Prana์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ํŠนํžˆ Prana๋Š” non-JVM ์–ธ์–ด๋กœ ์ž‘์„ฑ๋œ ์„œ๋น„์Šค ์ธ์Šคํ„ด์Šค๋“ค์„ ์œ„ํ•ด ๋งŒ๋“ค์–ด์ง„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์œผ๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ๊ฐ™์ด ์‹คํ–‰๋˜์ฃ .

 

 

๋งˆ์น˜๋ฉฐ...

์—ฐํœด์ด๊ธฐ ๋•Œ๋ฌธ์— ์˜ค๋Š˜์€ ๊ท€๊ฒฝ๊ธธ์— ์ž ์‹œ ์‰ฌ์–ด๊ฐ€๋Š” ์‹œ๊ฐ„ ๋™์•ˆ ๋ณด์‹ค ์ˆ˜ ์žˆ๋„๋ก ์งง๊ฒŒ ์ž‘์„ฑํ•ด๋ดค์Šต๋‹ˆ๋‹ค. ๋ฌผ๋ก  ์ฃผ์ œ ์ž์ฒด๋„ ๊ทธ๋ ‡๊ฒŒ ์–ด๋ ค์šด ์ฃผ์ œ๋„ ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ€๋ฒผ์šด ๋งˆ์Œ์œผ๋กœ ๋ณด์‹ค ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋ผ ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ์„œ๋น„์Šค ๋””์Šค์ปค๋ฒ„๋ฆฌ๋Š” MSA์— ์žˆ์–ด, ์—†์–ด์„œ๋Š” ์•ˆ๋  ์กด์žฌ์ž…๋‹ˆ๋‹ค. ์„œ๋น„์Šค ์ธ์Šคํ„ด์Šค๊ฐ€ ๋ฌด์ˆ˜ํžˆ ๋งŽ์•„์ง€๊ณ , ์ด๋“ค์ด ํฉ์–ด์ง€๋Š” ํ˜•ํƒœ์ด๊ธฐ ๋•Œ๋ฌธ์— ์šฐ๋ฆฌ๊ฐ€ ์›ํ•˜๋Š” ์„œ๋น„์Šค๋ฅผ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๋น ๋ฅด๊ฒŒ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ด๋Š” ๋ฐ˜๋“œ์‹œ ๋„์ž…ํ•ด์•ผ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‹ค์Œ ํฌ์ŠคํŠธ์—์„œ๋Š” Spring Cloud๋ฅผ ์ด์šฉํ•ด ์ด๋ฅผ ์ง์ ‘ ๊ตฌํ˜„ํ•ด๋ณด๋Š” ์‹œ๊ฐ„์„ ๊ฐ€์ ธ๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

 

Ref: ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค(4) ์„œ๋น„์Šค ๋””์Šค์ปค๋ฒ„๋ฆฌ - (https://futurecreator.github.io/2018/10/18/service-discovery-in-microservices/)

๋ฐ˜์‘ํ˜•
TAGS.

Tistory Comments