๐ŸŒŸ Consul: ์„œ๋น„์Šค ๊ฒ€์ƒ‰ ๋ฐ ๊ตฌ์„ฑ ๊ด€๋ฆฌ์˜ ๋งˆ๋ฒ•์‚ฌ ๐Ÿง™โ€โ™‚๏ธ

์ฝ˜ํ…์ธ  ๋Œ€ํ‘œ ์ด๋ฏธ์ง€ - ๐ŸŒŸ Consul: ์„œ๋น„์Šค ๊ฒ€์ƒ‰ ๋ฐ ๊ตฌ์„ฑ ๊ด€๋ฆฌ์˜ ๋งˆ๋ฒ•์‚ฌ ๐Ÿง™โ€โ™‚๏ธ

 

 

์•ˆ๋…•ํ•˜์„ธ์š”, ์—ฌ๋Ÿฌ๋ถ„! ์˜ค๋Š˜์€ ์ •๋ง ํฅ๋ฏธ์ง„์ง„ํ•œ ์ฃผ์ œ๋ฅผ ๊ฐ€์ง€๊ณ  ์™”์–ด์š”. ๋ฐ”๋กœ Consul์ด๋ผ๋Š” ๋†€๋ผ์šด ๋„๊ตฌ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•ด๋ณผ ๊ฑฐ์˜ˆ์š”. ๐ŸŽ‰ Consul์€ ๋งˆ์น˜ ํ˜„๋Œ€์ ์ธ IT ์ธํ”„๋ผ์˜ ๋งˆ๋ฒ•์‚ฌ์™€ ๊ฐ™์€ ์กด์žฌ๋ž๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ๋ถ„, ์ค€๋น„๋˜์…จ๋‚˜์š”? ๊ทธ๋Ÿผ Consul์˜ ์‹ ๋น„๋กœ์šด ์„ธ๊ณ„๋กœ ํ•จ๊ป˜ ๋– ๋‚˜๋ณผ๊นŒ์š”? ๐Ÿš€

๐Ÿ’ก ์ž ๊น! Consul์— ๋Œ€ํ•ด ๋ฐฐ์šฐ๊ธฐ ์ „์—, ์šฐ๋ฆฌ๊ฐ€ ์™œ ์ด๋Ÿฐ ๋„๊ตฌ๊ฐ€ ํ•„์š”ํ•œ์ง€ ์ƒ๊ฐํ•ด๋ณผ๊นŒ์š”? ํ˜„๋Œ€์˜ IT ํ™˜๊ฒฝ์€ ๋งˆ์น˜ ๋ณต์žกํ•œ ๋ฏธ๋กœ์™€ ๊ฐ™์•„์š”. ์ˆ˜๋งŽ์€ ์„œ๋น„์Šค๋“ค์ด ์„œ๋กœ ์–ฝํ˜€์žˆ๊ณ , ๊ทธ ๊ตฌ์„ฑ์€ ๊ณ„์†ํ•ด์„œ ๋ณ€ํ™”ํ•˜์ฃ . ์ด๋Ÿฐ ํ™˜๊ฒฝ์—์„œ ์–ด๋–ป๊ฒŒ ํ•˜๋ฉด ๋ชจ๋“  ๊ฒƒ์„ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ณ  ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ์„๊นŒ์š”? ๋ฐ”๋กœ ์—ฌ๊ธฐ์„œ Consul์ด ๋“ฑ์žฅํ•ฉ๋‹ˆ๋‹ค!

๐ŸŒˆ Consul์ด๋ž€ ๋ฌด์—‡์ธ๊ฐ€์š”?

Consul์€ HashiCorp๋ผ๋Š” ํšŒ์‚ฌ์—์„œ ๋งŒ๋“  ์˜คํ”ˆ์†Œ์Šค ๋„๊ตฌ์˜ˆ์š”. ์ด ๋„๊ตฌ๋Š” ์„œ๋น„์Šค ๊ฒ€์ƒ‰(Service Discovery)๊ณผ ๊ตฌ์„ฑ ๊ด€๋ฆฌ(Configuration Management)๋ฅผ ์œ„ํ•œ ๊ฐ•๋ ฅํ•œ ์†”๋ฃจ์…˜์ด์—์š”. ๋งˆ์น˜ ํ˜„๋Œ€์ ์ธ IT ์ธํ”„๋ผ์˜ ์Šค์œ„์Šค ๊ตฐ์šฉ ์นผ๊ณผ ๊ฐ™๋‹ค๊ณ  ํ•  ์ˆ˜ ์žˆ์ฃ ! ๐Ÿ‡จ๐Ÿ‡ญ๐Ÿ”ช

Consul์˜ ์ฃผ์š” ๊ธฐ๋Šฅ์„ ๊ฐ„๋‹จํžˆ ์‚ดํŽด๋ณผ๊นŒ์š”?

  • ๐Ÿ” ์„œ๋น„์Šค ๊ฒ€์ƒ‰: ๋„คํŠธ์›Œํฌ ์ƒ์˜ ์„œ๋น„์Šค๋“ค์„ ์ž๋™์œผ๋กœ ์ฐพ์•„์ฃผ๊ณ  ์—ฐ๊ฒฐํ•ด์ค๋‹ˆ๋‹ค.
  • โš™๏ธ ๊ตฌ์„ฑ ๊ด€๋ฆฌ: ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์„ค์ •์„ ์ค‘์•™์—์„œ ๊ด€๋ฆฌํ•˜๊ณ  ์‹ค์‹œ๊ฐ„์œผ๋กœ ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์žˆ์–ด์š”.
  • ๐Ÿ” ๋ณด์•ˆ: ์„œ๋น„์Šค ๊ฐ„ ํ†ต์‹ ์„ ์•ˆ์ „ํ•˜๊ฒŒ ์•”ํ˜ธํ™”ํ•ฉ๋‹ˆ๋‹ค.
  • ๐Ÿฅ ํ—ฌ์Šค ์ฒดํฌ: ์„œ๋น„์Šค์˜ ๊ฑด๊ฐ• ์ƒํƒœ๋ฅผ ์ง€์†์ ์œผ๋กœ ๋ชจ๋‹ˆํ„ฐ๋งํ•ฉ๋‹ˆ๋‹ค.

์ด์ œ ๊ฐ๊ฐ์˜ ๊ธฐ๋Šฅ์— ๋Œ€ํ•ด ๋” ์ž์„ธํžˆ ์•Œ์•„๋ณผ๊นŒ์š”? ์ค€๋น„๋˜์…จ๋‚˜์š”? ๊ทธ๋Ÿผ ์ถœ๋ฐœ~! ๐Ÿš€

๐Ÿ” ์„œ๋น„์Šค ๊ฒ€์ƒ‰: Consul์˜ ์Šˆํผ ํŒŒ์›Œ!

์ž, ์—ฌ๋Ÿฌ๋ถ„! ์„œ๋น„์Šค ๊ฒ€์ƒ‰์ด ๋ญ”์ง€ ์•„์‹œ๋‚˜์š”? ์‰ฝ๊ฒŒ ์„ค๋ช…ํ•ด๋“œ๋ฆด๊ฒŒ์š”. ๐Ÿค“

์ƒ์ƒํ•ด๋ณด์„ธ์š”. ์—ฌ๋Ÿฌ๋ถ„์ด ๊ฑฐ๋Œ€ํ•œ ๋„์‹œ์— ์‚ด๊ณ  ์žˆ๋‹ค๊ณ  ํ•ด๋ณผ๊นŒ์š”? ์ด ๋„์‹œ์—๋Š” ์ˆ˜๋งŽ์€ ๊ฐ€๊ฒŒ๋“ค์ด ์žˆ์–ด์š”. ๋ ˆ์Šคํ† ๋ž‘, ์นดํŽ˜, ์„œ์  ๋“ฑ๋“ฑ... ๊ทธ๋Ÿฐ๋ฐ ๋ฌธ์ œ๋Š” ์ด ๊ฐ€๊ฒŒ๋“ค์ด ๊ณ„์†ํ•ด์„œ ์œ„์น˜๋ฅผ ๋ฐ”๊พธ๊ณ , ์ƒˆ๋กœ์šด ๊ฐ€๊ฒŒ๊ฐ€ ์ƒ๊ธฐ๊ณ , ์–ด๋–ค ๊ฐ€๊ฒŒ๋Š” ๋ฌธ์„ ๋‹ซ๋Š”๋‹ค๋Š” ๊ฑฐ์˜ˆ์š”. ๐Ÿ˜ตโ€๐Ÿ’ซ

๋งŒ์•ฝ ์—ฌ๋Ÿฌ๋ถ„์ด ํŠน์ • ๊ฐ€๊ฒŒ๋ฅผ ์ฐพ๊ณ  ์‹ถ๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ• ๊นŒ์š”? ๋งค๋ฒˆ ๋„์‹œ ์ „์ฒด๋ฅผ ๋Œ์•„๋‹ค๋‹ˆ๋ฉด์„œ ์ฐพ์•„์•ผ ํ• ๊นŒ์š”? ๊ทธ๋ ‡๋‹ค๋ฉด ์ •๋ง ํž˜๋“ค๊ฒ ์ฃ ?

๋ฐ”๋กœ ์ด๋Ÿฐ ์ƒํ™ฉ์ด ํ˜„๋Œ€์˜ IT ์ธํ”„๋ผ์—์„œ๋„ ์ผ์–ด๋‚˜๊ณ  ์žˆ์–ด์š”. ์ˆ˜๋งŽ์€ ์„œ๋น„์Šค๋“ค์ด ๊ณ„์†ํ•ด์„œ ์ƒ๊ฒจ๋‚˜๊ณ , ์‚ฌ๋ผ์ง€๊ณ , ์œ„์น˜๋ฅผ ๋ฐ”๊ฟ”์š”. ์ด๋Ÿฐ ํ™˜๊ฒฝ์—์„œ ํ•„์š”ํ•œ ์„œ๋น„์Šค๋ฅผ ์–ด๋–ป๊ฒŒ ์ฐพ์„ ์ˆ˜ ์žˆ์„๊นŒ์š”?

๐Ÿฆธโ€โ™‚๏ธ ์—ฌ๊ธฐ์„œ Consul์˜ ์„œ๋น„์Šค ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ์ด ๋“ฑ์žฅํ•ฉ๋‹ˆ๋‹ค!

Consul์€ ๋งˆ์น˜ ๋ชจ๋“  ์„œ๋น„์Šค์˜ ์œ„์น˜๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์•Œ๊ณ  ์žˆ๋Š” ์Šˆํผ ๋‚ด๋น„๊ฒŒ์ด์…˜ ์‹œ์Šคํ…œ๊ณผ ๊ฐ™์•„์š”. ์–ด๋–ค ์„œ๋น„์Šค๊ฐ€ ์–ด๋””์— ์žˆ๋Š”์ง€, ์ง€๊ธˆ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ์ง€ ์•„๋‹Œ์ง€๋ฅผ ์ฆ‰์‹œ ์•Œ๋ ค์ค„ ์ˆ˜ ์žˆ์ฃ .

๊ทธ๋Ÿผ Consul์˜ ์„œ๋น„์Šค ๊ฒ€์ƒ‰์ด ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ๋” ์ž์„ธํžˆ ์•Œ์•„๋ณผ๊นŒ์š”? ๐Ÿ•ต๏ธโ€โ™€๏ธ

1. ์„œ๋น„์Šค ๋“ฑ๋ก ๐Ÿ“

๋จผ์ €, ๋ชจ๋“  ์„œ๋น„์Šค๋Š” Consul์— ์ž์‹ ์˜ ์ •๋ณด๋ฅผ ๋“ฑ๋กํ•ด์š”. ์ด ์ •๋ณด์—๋Š” ์„œ๋น„์Šค์˜ ์ด๋ฆ„, IP ์ฃผ์†Œ, ํฌํŠธ ๋ฒˆํ˜ธ ๋“ฑ์ด ํฌํ•จ๋ผ์š”. ๋งˆ์น˜ ๊ฐ€๊ฒŒ๊ฐ€ ์ „ํ™”๋ฒˆํ˜ธ๋ถ€์— ์ž์‹ ์˜ ์ •๋ณด๋ฅผ ๋“ฑ๋กํ•˜๋Š” ๊ฒƒ๊ณผ ๋น„์Šทํ•˜์ฃ !


  # Consul ์„œ๋น„์Šค ์ •์˜ ์˜ˆ์‹œ (JSON ํ˜•์‹)
  {
    "service": {
      "name": "web-app",
      "port": 80,
      "tags": ["v1", "production"],
      "check": {
        "http": "http://localhost/health",
        "interval": "10s"
      }
    }
  }
  

์œ„์˜ ์ฝ”๋“œ๋Š” 'web-app'์ด๋ผ๋Š” ์„œ๋น„์Šค๋ฅผ Consul์— ๋“ฑ๋กํ•˜๋Š” ์˜ˆ์‹œ์˜ˆ์š”. ์ด ์„œ๋น„์Šค๋Š” 80๋ฒˆ ํฌํŠธ์—์„œ ์‹คํ–‰๋˜๊ณ  ์žˆ๊ณ , 'v1'๊ณผ 'production'์ด๋ผ๋Š” ํƒœ๊ทธ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์–ด์š”. ๋˜ํ•œ 10์ดˆ๋งˆ๋‹ค ํ•œ ๋ฒˆ์”ฉ ํ—ฌ์Šค ์ฒดํฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋„๋ก ์„ค์ •๋˜์–ด ์žˆ์ฃ .

2. ์„œ๋น„์Šค ์กฐํšŒ ๐Ÿ”Ž

์„œ๋น„์Šค๊ฐ€ ํ•„์š”ํ•œ ๋‹ค๋ฅธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๋“ค์€ Consul์—๊ฒŒ "์ €๊ธฐ์š”, 'web-app' ์„œ๋น„์Šค ์–ด๋”” ์žˆ๋‚˜์š”?"๋ผ๊ณ  ๋ฌผ์–ด๋ณผ ์ˆ˜ ์žˆ์–ด์š”. ๊ทธ๋Ÿฌ๋ฉด Consul์€ ์ฆ‰์‹œ ํ•ด๋‹น ์„œ๋น„์Šค์˜ ์œ„์น˜ ์ •๋ณด๋ฅผ ์•Œ๋ ค์ค˜์š”.


  # Consul API๋ฅผ ํ†ตํ•œ ์„œ๋น„์Šค ์กฐํšŒ ์˜ˆ์‹œ
  curl http://localhost:8500/v1/catalog/service/web-app
  

์ด ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๋ฉด Consul์€ 'web-app' ์„œ๋น„์Šค์˜ ๋ชจ๋“  ์ธ์Šคํ„ด์Šค ์ •๋ณด๋ฅผ JSON ํ˜•ํƒœ๋กœ ๋ฐ˜ํ™˜ํ•ด์š”. ์ด ์ •๋ณด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ๋‹ค๋ฅธ ์„œ๋น„์Šค๋“ค์€ 'web-app'๊ณผ ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜๋Š” ๊ฑฐ์ฃ !

3. ๋™์  ์—…๋ฐ์ดํŠธ ๐Ÿ”„

์—ฌ๊ธฐ์„œ ์ •๋ง ๋ฉ‹์ง„ ์ ์€ Consul์ด ์ด ๋ชจ๋“  ์ •๋ณด๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์—…๋ฐ์ดํŠธํ•œ๋‹ค๋Š” ๊ฑฐ์˜ˆ์š”. ์ƒˆ๋กœ์šด ์„œ๋น„์Šค๊ฐ€ ์ถ”๊ฐ€๋˜๊ฑฐ๋‚˜, ๊ธฐ์กด ์„œ๋น„์Šค๊ฐ€ ์ค‘๋‹จ๋˜๊ฑฐ๋‚˜, ์„œ๋น„์Šค์˜ ์œ„์น˜๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฉด Consul์€ ์ฆ‰์‹œ ์ด ์ •๋ณด๋ฅผ ๋ฐ˜์˜ํ•ด์š”.

์˜ˆ๋ฅผ ๋“ค์–ด, 'web-app' ์„œ๋น„์Šค์˜ ์ƒˆ๋กœ์šด ์ธ์Šคํ„ด์Šค๊ฐ€ ์ถ”๊ฐ€๋˜๋ฉด Consul์€ ์ž๋™์œผ๋กœ ์ด๋ฅผ ๊ฐ์ง€ํ•˜๊ณ  ์„œ๋น„์Šค ๋ชฉ๋ก์— ์ถ”๊ฐ€ํ•ด์š”. ๋ฐ˜๋Œ€๋กœ ์–ด๋–ค ์ธ์Šคํ„ด์Šค๊ฐ€ ์ค‘๋‹จ๋˜๋ฉด Consul์€ ์ด๋ฅผ ๋ชฉ๋ก์—์„œ ์ œ๊ฑฐํ•˜์ฃ .

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

4. ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ โš–๏ธ

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

์˜ˆ๋ฅผ ๋“ค์–ด, 'web-app' ์„œ๋น„์Šค์˜ ์ธ์Šคํ„ด์Šค๊ฐ€ 3๊ฐœ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ณผ๊นŒ์š”? Consul์€ ์ด ์ค‘ ํ•˜๋‚˜๋ฅผ ๋ฌด์ž‘์œ„๋กœ ์„ ํƒํ•ด์„œ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ์–ด์š”. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ํ•œ ์ธ์Šคํ„ด์Šค์— ๋ชจ๋“  ํŠธ๋ž˜ํ”ฝ์ด ๋ชฐ๋ฆฌ๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ต๋‹ˆ๋‹ค.

5. ํ—ฌ์Šค ์ฒดํฌ ํ†ตํ•ฉ ๐Ÿฅ

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

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ํด๋ผ์ด์–ธํŠธ๋“ค์€ ํ•ญ์ƒ ๊ฑด๊ฐ•ํ•œ ์„œ๋น„์Šค ์ธ์Šคํ„ด์Šค์™€๋งŒ ์—ฐ๊ฒฐ๋  ์ˆ˜ ์žˆ์–ด์š”. ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•œ ์„œ๋น„์Šค๋กœ ํŠธ๋ž˜ํ”ฝ์ด ์ „์†ก๋˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์ฃ .

Consul ์„œ๋น„์Šค ๊ฒ€์ƒ‰ ๋‹ค์ด์–ด๊ทธ๋žจ Consul Service A Service B Service C Service D

์œ„์˜ ๋‹ค์ด์–ด๊ทธ๋žจ์€ Consul์„ ์ค‘์‹ฌ์œผ๋กœ ์—ฌ๋Ÿฌ ์„œ๋น„์Šค๋“ค์ด ์–ด๋–ป๊ฒŒ ์—ฐ๊ฒฐ๋˜๋Š”์ง€๋ฅผ ๋ณด์—ฌ์ฃผ๊ณ  ์žˆ์–ด์š”. ๊ฐ ์„œ๋น„์Šค๋Š” Consul์— ์ž์‹ ์˜ ์ •๋ณด๋ฅผ ๋“ฑ๋กํ•˜๊ณ , Consul์€ ์ด ์ •๋ณด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์„œ๋น„์Šค ๊ฒ€์ƒ‰์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฑฐ์ฃ .

6. DNS ์ธํ„ฐํŽ˜์ด์Šค ๐ŸŒ

Consul์€ DNS ์ธํ„ฐํŽ˜์ด์Šค๋„ ์ œ๊ณตํ•ด์š”. ์ด ๋ง์€ ๋ฌด์—‡์ด๋ƒ๊ณ ์š”? ์„œ๋น„์Šค๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•ด ํŠน๋ณ„ํ•œ API๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„๋„, ๊ทธ๋ƒฅ ์ผ๋ฐ˜์ ์ธ DNS ์ฟผ๋ฆฌ๋กœ ์„œ๋น„์Šค๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค๋Š” ๋œป์ด์—์š”!

์˜ˆ๋ฅผ ๋“ค์–ด, 'web-app.service.consul'์ด๋ผ๋Š” DNS ์ฟผ๋ฆฌ๋ฅผ ๋ณด๋‚ด๋ฉด Consul์€ 'web-app' ์„œ๋น„์Šค์˜ IP ์ฃผ์†Œ๋ฅผ ๋ฐ˜ํ™˜ํ•ด์š”. ์ด๋Š” ๊ธฐ์กด์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๋“ค๋„ ์‰ฝ๊ฒŒ Consul์˜ ์„œ๋น„์Šค ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ์ฃ .


  # DNS๋ฅผ ํ†ตํ•œ ์„œ๋น„์Šค ์กฐํšŒ ์˜ˆ์‹œ
  dig @127.0.0.1 -p 8600 web-app.service.consul
  

์ด ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๋ฉด 'web-app' ์„œ๋น„์Šค์˜ IP ์ฃผ์†Œ๋ฅผ DNS ์‘๋‹ต์œผ๋กœ ๋ฐ›์„ ์ˆ˜ ์žˆ์–ด์š”.

7. ๋‹ค์ค‘ ๋ฐ์ดํ„ฐ์„ผํ„ฐ ์ง€์› ๐ŸŒ

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

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

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

8. ์„œ๋น„์Šค ๋ฉ”์‹œ ํ†ตํ•ฉ ๐Ÿ•ธ๏ธ

Consul์€ ์„œ๋น„์Šค ๋ฉ”์‹œ ๊ธฐ๋Šฅ๋„ ์ œ๊ณตํ•ด์š”. ์„œ๋น„์Šค ๋ฉ”์‹œ๋ž€ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ๊ฐ„์˜ ํ†ต์‹ ์„ ๊ด€๋ฆฌํ•˜๋Š” ์ธํ”„๋ผ ๊ณ„์ธต์„ ๋งํ•ด์š”. Consul Connect๋ผ๋Š” ๊ธฐ๋Šฅ์„ ํ†ตํ•ด ์„œ๋น„์Šค ๊ฐ„ ํ†ต์‹ ์„ ์•ˆ์ „ํ•˜๊ฒŒ ์•”ํ˜ธํ™”ํ•˜๊ณ , ์ ‘๊ทผ ์ œ์–ด๋ฅผ ํ•  ์ˆ˜ ์žˆ์–ด์š”.

์ด ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋ฉด ์„œ๋น„์Šค ๊ฒ€์ƒ‰๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, ๋ฐœ๊ฒฌ๋œ ์„œ๋น„์Šค์™€์˜ ์•ˆ์ „ํ•œ ํ†ต์‹ ๊นŒ์ง€ Consul์ด ์ฑ…์ž„์ ธ์ค˜์š”. ๋งˆ์น˜ ๋ชจ๋“  ์„œ๋น„์Šค๋“ค์ด ๋ณด์•ˆ ๋‹ด๋‹น ๋น„์„œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฒƒ๊ณผ ๊ฐ™์ฃ !

๊ฒฐ๋ก : Consul์˜ ์„œ๋น„์Šค ๊ฒ€์ƒ‰, ์™œ ์ค‘์š”ํ• ๊นŒ์š”? ๐Ÿค”

์ž, ์ด์ œ Consul์˜ ์„œ๋น„์Šค ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ์— ๋Œ€ํ•ด ๊ฝค ์ž์„ธํžˆ ์•Œ์•„๋ดค์–ด์š”. ๊ทธ๋Ÿฐ๋ฐ ์™œ ์ด ๊ธฐ๋Šฅ์ด ๊ทธ๋ ‡๊ฒŒ ์ค‘์š”ํ• ๊นŒ์š”?

  1. ๋™์  ํ™˜๊ฒฝ ๋Œ€์‘: ํ˜„๋Œ€์˜ ํด๋ผ์šฐ๋“œ ํ™˜๊ฒฝ์—์„œ๋Š” ์„œ๋น„์Šค์˜ ์œ„์น˜๊ฐ€ ๊ณ„์† ๋ณ€ํ•  ์ˆ˜ ์žˆ์–ด์š”. Consul์€ ์ด๋Ÿฐ ๋™์ ์ธ ํ™˜๊ฒฝ์—์„œ๋„ ํ•ญ์ƒ ์ตœ์‹ ์˜ ์„œ๋น„์Šค ์ •๋ณด๋ฅผ ์ œ๊ณตํ•ด์š”.
  2. ์ž๋™ํ™”: ์„œ๋น„์Šค์˜ ๋“ฑ๋ก๊ณผ ๋ฐœ๊ฒฌ์ด ์ž๋™์œผ๋กœ ์ด๋ฃจ์–ด์ ธ์š”. ๊ฐœ๋ฐœ์ž๋‚˜ ์šด์˜์ž๊ฐ€ ์ผ์ผ์ด ์„ค์ • ํŒŒ์ผ์„ ์ˆ˜์ •ํ•  ํ•„์š”๊ฐ€ ์—†์ฃ .
  3. ํ™•์žฅ์„ฑ: ์„œ๋น„์Šค์˜ ์ˆ˜๊ฐ€ ๋Š˜์–ด๋‚˜๋„ Consul์€ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์–ด์š”. ๋ช‡ ๊ฐœ์˜ ์„œ๋น„์Šค๋“ , ๋ช‡ ์ฒœ ๊ฐœ์˜ ์„œ๋น„์Šค๋“  ๋ฌธ์ œ์—†์ฃ .
  4. ์•ˆ์ •์„ฑ: ํ—ฌ์Šค ์ฒดํฌ์™€ ํ†ตํ•ฉ๋˜์–ด ์žˆ์–ด ํ•ญ์ƒ ๊ฑด๊ฐ•ํ•œ ์„œ๋น„์Šค๋งŒ์„ ๋ฐ˜ํ™˜ํ•ด์š”. ์ด๋Š” ์‹œ์Šคํ…œ์˜ ์•ˆ์ •์„ฑ์„ ํฌ๊ฒŒ ๋†’์—ฌ์ค˜์š”.
  5. ์œ ์—ฐ์„ฑ: DNS ์ธํ„ฐํŽ˜์ด์Šค, HTTP API ๋“ฑ ๋‹ค์–‘ํ•œ ๋ฐฉ์‹์œผ๋กœ ์„œ๋น„์Šค๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ์–ด์š”. ์ด๋Š” ๋‹ค์–‘ํ•œ ํ™˜๊ฒฝ๊ณผ ์š”๊ตฌ์‚ฌํ•ญ์— ๋Œ€์‘ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค˜์š”.

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

๐ŸŽญ ์ƒ์ƒํ•ด๋ณด์„ธ์š”: Consul ์—†์ด ์ˆ˜๋ฐฑ, ์ˆ˜์ฒœ ๊ฐœ์˜ ์„œ๋น„์Šค๋“ค์ด ์„œ๋กœ๋ฅผ ์ฐพ์•„ ํ—ค๋งค๋Š” ๋ชจ์Šต์„... ๋งˆ์น˜ ๊ฑฐ๋Œ€ํ•œ ๋ฏธ๋กœ ์†์—์„œ ๊ธธ์„ ์žƒ์€ ์ฅ๋“ค ๊ฐ™์ง€ ์•Š๋‚˜์š”? ํ•˜์ง€๋งŒ Consul์ด ์žˆ๋‹ค๋ฉด, ๋ชจ๋“  ์„œ๋น„์Šค๋“ค์€ ์–ธ์ œ๋‚˜ ์„œ๋กœ์˜ ์œ„์น˜๋ฅผ ์ •ํ™•ํžˆ ์•Œ ์ˆ˜ ์žˆ์–ด์š”. ๋งˆ์น˜ ๋ชจ๋“  ์ฅ๋“ค์—๊ฒŒ ์™„๋ฒฝํ•œ ๋ฏธ๋กœ ์ง€๋„๋ฅผ ์ค€ ๊ฒƒ๊ณผ ๊ฐ™์ฃ !

์ž, ์ด์ œ Consul์˜ ์„œ๋น„์Šค ๊ฒ€์ƒ‰์— ๋Œ€ํ•ด ๊ฝค ๊นŠ์ด ์žˆ๊ฒŒ ์•Œ์•„๋ดค์–ด์š”. ์–ด๋– ์‹ ๊ฐ€์š”? ์ •๋ง ๋Œ€๋‹จํ•œ ๊ธฐ๋Šฅ์ด์ฃ ? ํ•˜์ง€๋งŒ Consul์˜ ๋งˆ๋ฒ•์€ ์—ฌ๊ธฐ์„œ ๋๋‚˜์ง€ ์•Š์•„์š”. ๋‹ค์Œ์œผ๋กœ๋Š” Consul์˜ ๋˜ ๋‹ค๋ฅธ ๊ฐ•๋ ฅํ•œ ๊ธฐ๋Šฅ์ธ '๊ตฌ์„ฑ ๊ด€๋ฆฌ'์— ๋Œ€ํ•ด ์•Œ์•„๋ณผ ๊ฑฐ์˜ˆ์š”. ์ค€๋น„๋˜์…จ๋‚˜์š”? ๊ทธ๋Ÿผ ๊ณ„์†ํ•ด์„œ Consul์˜ ์„ธ๊ณ„๋กœ ๋” ๊นŠ์ด ๋“ค์–ด๊ฐ€ ๋ณผ๊นŒ์š”? ๐Ÿš€

โš™๏ธ ๊ตฌ์„ฑ ๊ด€๋ฆฌ: Consul์˜ ๋งˆ๋ฒ• ์ง€ํŒก์ด ๐Ÿง™โ€โ™‚๏ธ

์ž, ์ด์ œ Consul์˜ ๋˜ ๋‹ค๋ฅธ ๊ฐ•๋ ฅํ•œ ๊ธฐ๋Šฅ์ธ '๊ตฌ์„ฑ ๊ด€๋ฆฌ'์— ๋Œ€ํ•ด ์•Œ์•„๋ณผ ์‹œ๊ฐ„์ด์—์š”. ์ด ๊ธฐ๋Šฅ์€ ๋งˆ์น˜ ๋งˆ๋ฒ• ์ง€ํŒก์ด์™€ ๊ฐ™์•„์š”. ์™œ ๊ทธ๋Ÿฐ์ง€ ํ•จ๊ป˜ ์‚ดํŽด๋ณผ๊นŒ์š”? ๐Ÿ”ฎ

๊ตฌ์„ฑ ๊ด€๋ฆฌ๋ž€ ๋ฌด์—‡์ธ๊ฐ€์š”? ๐Ÿค”

๊ตฌ์„ฑ ๊ด€๋ฆฌ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์„ค์ •์„ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋งํ•ด์š”. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ ์ •๋ณด, API ํ‚ค, ๊ธฐ๋Šฅ ํ”Œ๋ž˜๊ทธ ๋“ฑ์ด ๋ชจ๋‘ ๊ตฌ์„ฑ์— ํฌํ•จ๋  ์ˆ˜ ์žˆ์–ด์š”. ์ด๋Ÿฐ ์„ค์ •๋“ค์„ ์–ด๋–ป๊ฒŒ ๊ด€๋ฆฌํ•˜๊ณ  ์—…๋ฐ์ดํŠธํ• ๊นŒ์š”?

๐ŸŽญ ์ƒ์ƒํ•ด๋ณด์„ธ์š”: ์—ฌ๋Ÿฌ๋ถ„์ด ๊ฑฐ๋Œ€ํ•œ ์˜ค์ผ€์ŠคํŠธ๋ผ์˜ ์ง€ํœ˜์ž๋ผ๊ณ  ์ƒ๊ฐํ•ด๋ณด์„ธ์š”. ๊ฐ ์•…๊ธฐ ์—ฐ์ฃผ์ž๋“ค(์„œ๋น„์Šค๋“ค)์—๊ฒŒ ์–ด๋–ค ๊ณก์„ ์—ฐ์ฃผํ• ์ง€, ์–ด๋–ค ํ…œํฌ๋กœ ์—ฐ์ฃผํ• ์ง€ ๋“ฑ์˜ ์ง€์‹œ๋ฅผ ๋‚ด๋ ค์•ผ ํ•ด์š”. ๊ทธ๋Ÿฐ๋ฐ ๊ณต์—ฐ ์ค‘๊ฐ„์— ๊ณก์„ ๋ฐ”๊ฟ”์•ผ ํ•œ๋‹ค๋ฉด? ๋ชจ๋“  ์—ฐ์ฃผ์ž์—๊ฒŒ ์ผ์ผ์ด ๊ฐ€์„œ ์ƒˆ๋กœ์šด ์•…๋ณด๋ฅผ ๋‚˜๋ˆ ์ค˜์•ผ ํ• ๊นŒ์š”? ์ด๋Ÿฐ ์ƒํ™ฉ์—์„œ Consul์˜ ๊ตฌ์„ฑ ๊ด€๋ฆฌ๋Š” ๋งˆ์น˜ ๋งˆ๋ฒ•์˜ ์ง€ํœ˜๋ด‰๊ณผ ๊ฐ™์•„์š”. ์ง€ํœ˜๋ด‰์„ ํ•œ ๋ฒˆ ํœ˜๋‘๋ฅด๋ฉด ๋ชจ๋“  ์—ฐ์ฃผ์ž์˜ ์•…๋ณด๊ฐ€ ์ˆœ์‹๊ฐ„์— ๋ฐ”๋€Œ๋Š” ๊ฑฐ์ฃ !

Consul์˜ ๊ตฌ์„ฑ ๊ด€๋ฆฌ๋Š” ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋‚˜์š”? ๐Ÿ› ๏ธ

Consul์˜ ๊ตฌ์„ฑ ๊ด€๋ฆฌ๋Š” Key/Value ์ €์žฅ์†Œ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ž‘๋™ํ•ด์š”. ์ด๋Š” ๋งˆ์น˜ ๊ฑฐ๋Œ€ํ•œ ์‚ฌ์ „๊ณผ ๊ฐ™์•„์š”. ๊ฐ ์„ค์ • ํ•ญ๋ชฉ(Key)์— ๋Œ€ํ•ด ํ•ด๋‹นํ•˜๋Š” ๊ฐ’(Value)์„ ์ €์žฅํ•  ์ˆ˜ ์žˆ์ฃ . ๊ทธ๋ฆฌ๊ณ  ์ด ์ •๋ณด๋Š” ์‹ค์‹œ๊ฐ„์œผ๋กœ ์—…๋ฐ์ดํŠธ๋˜๊ณ  ์ „ํŒŒ๋ผ์š”.

1. ๊ตฌ์„ฑ ์ €์žฅ ๐Ÿ“ฅ

๋จผ์ €, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ตฌ์„ฑ์„ Consul์˜ Key/Value ์ €์žฅ์†Œ์— ์ €์žฅํ•ด์š”. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์•„์š”:


  # Consul CLI๋ฅผ ์‚ฌ์šฉํ•œ ๊ตฌ์„ฑ ์ €์žฅ ์˜ˆ์‹œ
  consul kv put config/database/url "mysql://user:password@localhost:3306/mydb"
  consul kv put config/database/max_connections "100"
  

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด 'config/database/url'๊ณผ 'config/database/max_connections'๋ผ๋Š” ํ‚ค์— ๊ฐ๊ฐ์˜ ๊ฐ’์ด ์ €์žฅ๋ผ์š”.

2. ๊ตฌ์„ฑ ์กฐํšŒ ๐Ÿ”

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ํ•„์š”ํ•  ๋•Œ Consul์—์„œ ์ด ๊ตฌ์„ฑ์„ ์กฐํšŒํ•  ์ˆ˜ ์žˆ์–ด์š”:


  # Consul CLI๋ฅผ ์‚ฌ์šฉํ•œ ๊ตฌ์„ฑ ์กฐํšŒ ์˜ˆ์‹œ
  consul kv get config/database/url
  consul kv get config/database/max_connections
  

์ด ๋ช…๋ น์–ด๋“ค์€ ๊ฐ๊ฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค URL๊ณผ ์ตœ๋Œ€ ์—ฐ๊ฒฐ ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•  ๊ฑฐ์˜ˆ์š”.

3. ์‹ค์‹œ๊ฐ„ ์—…๋ฐ์ดํŠธ ๐Ÿ”„

Consul์˜ ์ •๋ง ๋ฉ‹์ง„ ์ ์€ ์ด ๊ตฌ์„ฑ์ด ์‹ค์‹œ๊ฐ„์œผ๋กœ ์—…๋ฐ์ดํŠธ๋œ๋‹ค๋Š” ๊ฑฐ์˜ˆ์š”. ๊ตฌ์„ฑ์ด ๋ณ€๊ฒฝ๋˜๋ฉด Consul์€ ์ฆ‰์‹œ ์ด๋ฅผ ๊ฐ์ง€ํ•˜๊ณ , ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๊ตฌ๋…ํ•˜๊ณ  ์žˆ๋Š” ๋ชจ๋“  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์•Œ๋ ค์ค˜์š”.


  # ๊ตฌ์„ฑ ๋ณ€๊ฒฝ ์˜ˆ์‹œ
  consul kv put config/database/max_connections "200"
  

์ด ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๋ฉด, ์ตœ๋Œ€ ์—ฐ๊ฒฐ ์ˆ˜๊ฐ€ 100์—์„œ 200์œผ๋กœ ๋ณ€๊ฒฝ๋ผ์š”. ๊ทธ๋ฆฌ๊ณ  ์ด ๋ณ€๊ฒฝ ์‚ฌํ•ญ์€ ์ฆ‰์‹œ ๋ชจ ๋“  ๊ด€๋ จ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ „ํŒŒ๋ฉ๋‹ˆ๋‹ค.

4. ๊ตฌ์„ฑ ๋ฒ„์ „ ๊ด€๋ฆฌ ๐Ÿ“š

Consul์€ ๊ฐ ๊ตฌ์„ฑ ํ•ญ๋ชฉ์˜ ๋ณ€๊ฒฝ ์ด๋ ฅ๋„ ๊ด€๋ฆฌํ•ด์š”. ์ด๋ฅผ ํ†ตํ•ด ์–ธ์ œ, ์–ด๋–ค ๋ณ€๊ฒฝ์ด ์žˆ์—ˆ๋Š”์ง€ ์ถ”์ ํ•  ์ˆ˜ ์žˆ๊ณ , ํ•„์š”ํ•˜๋‹ค๋ฉด ์ด์ „ ๋ฒ„์ „์œผ๋กœ ๋กค๋ฐฑํ•  ์ˆ˜๋„ ์žˆ์–ด์š”.


  # ๊ตฌ์„ฑ ํ•ญ๋ชฉ์˜ ๋ณ€๊ฒฝ ์ด๋ ฅ ์กฐํšŒ
  consul kv get -recurse -detailed config/database/max_connections
  

์ด ๋ช…๋ น์–ด๋Š” 'max_connections' ์„ค์ •์˜ ๋ชจ๋“  ๋ณ€๊ฒฝ ์ด๋ ฅ์„ ๋ณด์—ฌ์ค„ ๊ฑฐ์˜ˆ์š”.

5. ์ ‘๊ทผ ์ œ์–ด ๐Ÿ”

Consul์€ ACL(Access Control List)์„ ํ†ตํ•ด ๊ตฌ์„ฑ์— ๋Œ€ํ•œ ์ ‘๊ทผ์„ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์–ด์š”. ์ด๋ฅผ ํ†ตํ•ด ํŠน์ • ์‚ฌ์šฉ์ž๋‚˜ ์„œ๋น„์Šค๋งŒ ํŠน์ • ๊ตฌ์„ฑ์„ ์ฝ๊ฑฐ๋‚˜ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค์ •ํ•  ์ˆ˜ ์žˆ์ฃ .


  # ACL ํ† ํฐ์„ ์‚ฌ์šฉํ•œ ๊ตฌ์„ฑ ์ ‘๊ทผ ์˜ˆ์‹œ
  consul kv put -token=<your-token> config/api/key "secret-api-key"
  

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์ ์ ˆํ•œ ๊ถŒํ•œ์„ ๊ฐ€์ง„ ํ† ํฐ์„ ๊ฐ€์ง„ ์‚ฌ์šฉ์ž๋‚˜ ์„œ๋น„์Šค๋งŒ API ํ‚ค๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์–ด์š”.

Consul ๊ตฌ์„ฑ ๊ด€๋ฆฌ์˜ ์žฅ์  ๐ŸŒŸ

์ž, ์ด์ œ Consul์˜ ๊ตฌ์„ฑ ๊ด€๋ฆฌ๊ฐ€ ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ์•Œ์•„๋ดค์–ด์š”. ๊ทธ๋Ÿผ ์ด ๊ธฐ๋Šฅ์ด ์™œ ๊ทธ๋ ‡๊ฒŒ ๊ฐ•๋ ฅํ•˜๊ณ  ์œ ์šฉํ•œ์ง€ ์ •๋ฆฌํ•ด๋ณผ๊นŒ์š”?

  1. ์ค‘์•™ ์ง‘์ค‘ํ™”: ๋ชจ๋“  ๊ตฌ์„ฑ์„ ํ•œ ๊ณณ์—์„œ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์–ด์š”. ์ด๋Š” ๊ด€๋ฆฌ์˜ ํšจ์œจ์„ฑ์„ ํฌ๊ฒŒ ๋†’์—ฌ์ค˜์š”.
  2. ์‹ค์‹œ๊ฐ„ ์—…๋ฐ์ดํŠธ: ๊ตฌ์„ฑ ๋ณ€๊ฒฝ์ด ์ฆ‰์‹œ ๋ชจ๋“  ๊ด€๋ จ ์„œ๋น„์Šค์— ์ „ํŒŒ๋ผ์š”. ์„œ๋น„์Šค๋ฅผ ์žฌ์‹œ์ž‘ํ•  ํ•„์š”๊ฐ€ ์—†์ฃ .
  3. ๋ฒ„์ „ ๊ด€๋ฆฌ: ๊ตฌ์„ฑ์˜ ๋ณ€๊ฒฝ ์ด๋ ฅ์„ ์ถ”์ ํ•˜๊ณ  ํ•„์š”์‹œ ๋กค๋ฐฑํ•  ์ˆ˜ ์žˆ์–ด์š”.
  4. ๋ณด์•ˆ: ACL์„ ํ†ตํ•ด ๊ตฌ์„ฑ์— ๋Œ€ํ•œ ์ ‘๊ทผ์„ ์„ธ๋ฐ€ํ•˜๊ฒŒ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์–ด์š”.
  5. ํ™•์žฅ์„ฑ: ์ž‘์€ ๊ทœ๋ชจ์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๋ถ€ํ„ฐ ๋Œ€๊ทœ๋ชจ ๋ถ„์‚ฐ ์‹œ์Šคํ…œ๊นŒ์ง€ ๋ชจ๋‘ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด์š”.

๐Ÿ’ก ์žฌ๋Šฅ๋„ท ํŒ! ์žฌ๋Šฅ๋„ท๊ณผ ๊ฐ™์€ ๋Œ€๊ทœ๋ชจ ํ”Œ๋žซํผ์—์„œ๋Š” ์ด๋Ÿฐ ๊ตฌ์„ฑ ๊ด€๋ฆฌ ๊ธฐ๋Šฅ์ด ํŠนํžˆ ์œ ์šฉํ•ด์š”. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์ ์ง„์ ์œผ๋กœ ๋กค์•„์›ƒํ•˜๊ฑฐ๋‚˜, ์ง€์—ญ๋ณ„๋กœ ๋‹ค๋ฅธ ์„ค์ •์„ ์ ์šฉํ•˜๊ฑฐ๋‚˜, ๊ธด๊ธ‰ ์ƒํ™ฉ์—์„œ ๋น ๋ฅด๊ฒŒ ์„ค์ •์„ ๋ณ€๊ฒฝํ•ด์•ผ ํ•  ๋•Œ Consul์˜ ๊ตฌ์„ฑ ๊ด€๋ฆฌ ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์–ด์š”.

์‹ค์ œ ์‚ฌ์šฉ ์‚ฌ๋ก€ ๐ŸŒ

Consul์˜ ๊ตฌ์„ฑ ๊ด€๋ฆฌ๊ฐ€ ์‹ค์ œ๋กœ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋Š”์ง€ ๋ช‡ ๊ฐ€์ง€ ์˜ˆ๋ฅผ ๋“ค์–ด๋ณผ๊นŒ์š”?

1. ๊ธฐ๋Šฅ ํ”Œ๋ž˜๊ทธ ๊ด€๋ฆฌ ๐Ÿšฉ

์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ๊ฐœ๋ฐœํ–ˆ์ง€๋งŒ ์•„์ง ๋ชจ๋“  ์‚ฌ์šฉ์ž์—๊ฒŒ ๊ณต๊ฐœํ•˜๊ณ  ์‹ถ์ง€ ์•Š๋‹ค๋ฉด? Consul์„ ์‚ฌ์šฉํ•ด ๊ธฐ๋Šฅ ํ”Œ๋ž˜๊ทธ๋ฅผ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์–ด์š”.


  # ๊ธฐ๋Šฅ ํ”Œ๋ž˜๊ทธ ์„ค์ •
  consul kv put features/new_ui_enabled "false"

  # ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ์˜ ์‚ฌ์šฉ (์˜์‚ฌ ์ฝ”๋“œ)
  if (consul.get("features/new_ui_enabled") == "true") {
    showNewUI();
  } else {
    showOldUI();
  }
  

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์–ธ์ œ๋“  Consul์—์„œ ๊ฐ’์„ "true"๋กœ ๋ณ€๊ฒฝํ•˜์—ฌ ์ƒˆ UI๋ฅผ ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ์–ด์š”.

2. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ตฌ์„ฑ ๊ด€๋ฆฌ ๐Ÿ’พ

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ ์ •๋ณด๋ฅผ Consul์— ์ €์žฅํ•˜๊ณ  ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์–ด์š”.


  # ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ตฌ์„ฑ ์„ค์ •
  consul kv put config/database/primary/host "db.example.com"
  consul kv put config/database/primary/port "5432"
  consul kv put config/database/primary/username "app_user"
  consul kv put config/database/primary/password "super_secret"

  # ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ์˜ ์‚ฌ์šฉ (์˜์‚ฌ ์ฝ”๋“œ)
  dbConfig = {
    host: consul.get("config/database/primary/host"),
    port: consul.get("config/database/primary/port"),
    username: consul.get("config/database/primary/username"),
    password: consul.get("config/database/primary/password")
  }
  connectToDatabase(dbConfig);
  

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ •๋ณด๋ฅผ ๋ณ€๊ฒฝํ•ด์•ผ ํ•  ๋•Œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜์ง€ ์•Š๊ณ ๋„ Consul์—์„œ ๋ฐ”๋กœ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์–ด์š”.

3. ๋™์  ์„œ๋น„์Šค ๊ตฌ์„ฑ ๐Ÿ”„

์„œ๋น„์Šค์˜ ๋™์ž‘์„ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์กฐ์ •ํ•ด์•ผ ํ•  ๋•Œ Consul์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด์š”.


  # ์„œ๋น„์Šค ๊ตฌ์„ฑ ์„ค์ •
  consul kv put config/api_service/rate_limit "1000"
  consul kv put config/api_service/timeout "30"

  # ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ์˜ ์‚ฌ์šฉ (์˜์‚ฌ ์ฝ”๋“œ)
  function handleRequest() {
    rateLimit = parseInt(consul.get("config/api_service/rate_limit"));
    timeout = parseInt(consul.get("config/api_service/timeout"));
    
    if (checkRateLimit(rateLimit)) {
      processRequestWithTimeout(timeout);
    } else {
      returnRateLimitError();
    }
  }
  

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์„œ๋น„์Šค์˜ ์†๋„ ์ œํ•œ์ด๋‚˜ ํƒ€์ž„์•„์›ƒ ์„ค์ •์„ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์กฐ์ •ํ•  ์ˆ˜ ์žˆ์–ด์š”.

์ฃผ์˜ํ•  ์  โš ๏ธ

Consul์˜ ๊ตฌ์„ฑ ๊ด€๋ฆฌ ๊ธฐ๋Šฅ์€ ์ •๋ง ๊ฐ•๋ ฅํ•˜์ง€๋งŒ, ์‚ฌ์šฉํ•  ๋•Œ ์ฃผ์˜ํ•ด์•ผ ํ•  ์ ๋“ค๋„ ์žˆ์–ด์š”:

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

๐ŸŽญ ์ƒ์ƒํ•ด๋ณด์„ธ์š”: Consul์˜ ๊ตฌ์„ฑ ๊ด€๋ฆฌ๋Š” ๋งˆ์น˜ ๋งˆ๋ฒ•์‚ฌ์˜ ๋งˆ๋ฒ•์ฑ…๊ณผ ๊ฐ™์•„์š”. ๋งˆ๋ฒ•์‚ฌ๊ฐ€ ์ฃผ๋ฌธ์„ ๋ฐ”๊พธ๋ฉด ์ „ ์„ธ๊ณ„์˜ ๋ชจ๋“  ๊ฒƒ์ด ์ฆ‰์‹œ ๊ทธ์— ๋งž์ถฐ ๋ณ€ํ•˜์ฃ . ํ•˜์ง€๋งŒ ๊ฐ•๋ ฅํ•œ ๋งˆ๋ฒ•์ธ ๋งŒํผ ์‹ ์ค‘ํ•˜๊ฒŒ ์‚ฌ์šฉํ•ด์•ผ ํ•ด์š”. ์ž˜๋ชป๋œ ์ฃผ๋ฌธ์„ ์™ธ์šฐ๋ฉด ์˜๋„์น˜ ์•Š์€ ๊ฒฐ๊ณผ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์œผ๋‹ˆ๊นŒ์š”!

๊ฒฐ๋ก : Consul์˜ ๊ตฌ์„ฑ ๊ด€๋ฆฌ, ํ˜„๋Œ€์ ์ธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํ•„์ˆ˜ ์š”์†Œ ๐ŸŒŸ

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

Consul์˜ ๊ตฌ์„ฑ ๊ด€๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ด์ ์„ ์–ป์„ ์ˆ˜ ์žˆ์–ด์š”:

  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์œ ์—ฐ์„ฑ๊ณผ ํ™•์žฅ์„ฑ ํ–ฅ์ƒ
  • ์šด์˜ ํšจ์œจ์„ฑ ์ฆ๋Œ€
  • ๋ณ€๊ฒฝ ๊ด€๋ฆฌ์˜ ๊ฐ„์†Œํ™”
  • ์‹œ์Šคํ…œ ์ „๋ฐ˜์˜ ์ผ๊ด€์„ฑ ์œ ์ง€

๋ฌผ๋ก , ์ด๋Ÿฐ ๊ฐ•๋ ฅํ•œ ๋„๊ตฌ๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ์‹ ์ค‘ํ•œ ๊ณ„ํš๊ณผ ์„ค๊ณ„๊ฐ€ ํ•„์š”ํ•ด์š”. ํ•˜์ง€๋งŒ ์ œ๋Œ€๋กœ ํ™œ์šฉํ•œ๋‹ค๋ฉด, Consul์˜ ๊ตฌ์„ฑ ๊ด€๋ฆฌ๋Š” ์—ฌ๋Ÿฌ๋ถ„์˜ ์‹œ์Šคํ…œ์„ ํ•œ ๋‹จ๊ณ„ ๋” ๋ฐœ์ „์‹œํ‚ฌ ์ˆ˜ ์žˆ๋Š” ๊ฐ•๋ ฅํ•œ ๋ฌด๊ธฐ๊ฐ€ ๋  ๊ฑฐ์˜ˆ์š”.

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

๐Ÿฅ ํ—ฌ์Šค ์ฒดํฌ: Consul์˜ ๊ฑด๊ฐ• ์ง€ํ‚ด์ด ๐Ÿฉบ

์ž, ์ด์ œ Consul์˜ ๋˜ ๋‹ค๋ฅธ ์ค‘์š”ํ•œ ๊ธฐ๋Šฅ์ธ 'ํ—ฌ์Šค ์ฒดํฌ'์— ๋Œ€ํ•ด ์•Œ์•„๋ณผ ์‹œ๊ฐ„์ด์—์š”. ์ด ๊ธฐ๋Šฅ์€ ๋งˆ์น˜ ์‹œ์Šคํ…œ์˜ ์ฃผ์น˜์˜์™€ ๊ฐ™์€ ์—ญํ• ์„ ํ•œ๋‹ต๋‹ˆ๋‹ค. ์™œ ๊ทธ๋Ÿฐ์ง€ ํ•จ๊ป˜ ์‚ดํŽด๋ณผ๊นŒ์š”? ๐Ÿ”

ํ—ฌ์Šค ์ฒดํฌ๋ž€ ๋ฌด์—‡์ธ๊ฐ€์š”? ๐Ÿค”

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

๐ŸŽญ ์ƒ์ƒํ•ด๋ณด์„ธ์š”: ์—ฌ๋Ÿฌ๋ถ„์ด ๊ฑฐ๋Œ€ํ•œ ๋ณ‘์›์˜ ์›์žฅ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ด๋ณด์„ธ์š”. ์ˆ˜๋งŽ์€ ํ™˜์ž๋“ค(์„œ๋น„์Šค๋“ค)์ด ์žˆ๊ณ , ๊ฐ ํ™˜์ž์˜ ์ƒํƒœ๋ฅผ ๊ณ„์† ์ฒดํฌํ•ด์•ผ ํ•ด์š”. ๊ทธ๋Ÿฐ๋ฐ ์ผ์ผ์ด ๋ชจ๋“  ๋ณ‘์‹ค์„ ๋Œ์•„๋‹ค๋‹ˆ๋ฉด์„œ ํ™•์ธํ•  ์ˆ˜๋Š” ์—†๊ฒ ์ฃ ? Consul์˜ ํ—ฌ์Šค ์ฒดํฌ๋Š” ๋งˆ์น˜ ๊ฐ ๋ณ‘์‹ค์— ์ž๋™ ๋ชจ๋‹ˆํ„ฐ๋ง ์‹œ์Šคํ…œ์„ ์„ค์น˜ํ•œ ๊ฒƒ๊ณผ ๊ฐ™์•„์š”. ํ™˜์ž์˜ ์ƒํƒœ๊ฐ€ ๋‚˜๋น ์ง€๋ฉด ์ฆ‰์‹œ ์•Œ๋ฆผ์ด ์˜ค๊ณ , ํ•„์š”ํ•œ ์กฐ์น˜๋ฅผ ์ทจํ•  ์ˆ˜ ์žˆ๋Š” ๊ฑฐ์ฃ !

Consul์˜ ํ—ฌ์Šค ์ฒดํฌ๋Š” ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋‚˜์š”? ๐Ÿ› ๏ธ

Consul์˜ ํ—ฌ์Šค ์ฒดํฌ๋Š” ๋‹ค์–‘ํ•œ ๋ฐฉ์‹์œผ๋กœ ์„œ๋น„์Šค์˜ ์ƒํƒœ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์–ด์š”. ์ฃผ์š” ๋ฐฉ์‹๋“ค์„ ์‚ดํŽด๋ณผ๊นŒ์š”?

1. HTTP ์ฒดํฌ ๐ŸŒ

์„œ๋น„์Šค๊ฐ€ ์›น ์—”๋“œํฌ์ธํŠธ๋ฅผ ์ œ๊ณตํ•œ๋‹ค๋ฉด, Consul์€ ์ฃผ๊ธฐ์ ์œผ๋กœ ์ด ์—”๋“œํฌ์ธํŠธ์— HTTP ์š”์ฒญ์„ ๋ณด๋‚ด ์‘๋‹ต์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์–ด์š”.


  {
    "check": {
      "id": "api-health",
      "name": "API Health Check",
      "http": "http://localhost:8080/health",
      "method": "GET",
      "interval": "10s",
      "timeout": "1s"
    }
  }
  

์ด ์„ค์ •์€ 10์ดˆ๋งˆ๋‹ค ํ•œ ๋ฒˆ์”ฉ 'http://localhost:8080/health' ์—”๋“œํฌ์ธํŠธ์— GET ์š”์ฒญ์„ ๋ณด๋‚ด๊ณ , 1์ดˆ ์•ˆ์— ์‘๋‹ต์ด ์˜ค์ง€ ์•Š์œผ๋ฉด ์‹คํŒจ๋กœ ๊ฐ„์ฃผํ•ด์š”.

2. TCP ์ฒดํฌ ๐Ÿ”Œ

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


  {
    "check": {
      "id": "database-connection",
      "name": "Database Connection Check",
      "tcp": "localhost:5432",
      "interval": "30s",
      "timeout": "5s"
    }
  }
  

์ด ์„ค์ •์€ 30์ดˆ๋งˆ๋‹ค ํ•œ ๋ฒˆ์”ฉ localhost์˜ 5432 ํฌํŠธ(์ผ๋ฐ˜์ ์ธ PostgreSQL ํฌํŠธ)์— ์—ฐ๊ฒฐ์„ ์‹œ๋„ํ•ด์š”. 5์ดˆ ์•ˆ์— ์—ฐ๊ฒฐ์ด ๋˜์ง€ ์•Š์œผ๋ฉด ์‹คํŒจ๋กœ ๊ฐ„์ฃผํ•˜์ฃ .

3. ์Šคํฌ๋ฆฝํŠธ ์ฒดํฌ ๐Ÿ“œ

๋” ๋ณต์žกํ•œ ์ฒดํฌ๊ฐ€ ํ•„์š”ํ•˜๋‹ค๋ฉด, Consul์€ ์‚ฌ์šฉ์ž ์ •์˜ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์–ด์š”.


  {
    "check": {
      "id": "memory-usage",
      "name": "Memory Usage Check",
      "args": ["/usr/local/bin/check_memory.sh"],
      "interval": "60s"
    }
  }
  

์ด ์„ค์ •์€ 60์ดˆ๋งˆ๋‹ค ํ•œ ๋ฒˆ์”ฉ 'check_memory.sh' ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•ด์š”. ์ด ์Šคํฌ๋ฆฝํŠธ๋Š” ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์„ ์ฒดํฌํ•˜๊ณ  ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ๊ฒ ์ฃ .

4. TTL(Time To Live) ์ฒดํฌ โณ

์„œ๋น„์Šค๊ฐ€ ์ž์ฒด์ ์œผ๋กœ ์ƒํƒœ๋ฅผ ๋ณด๊ณ ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด, TTL ์ฒดํฌ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด์š”.


  {
    "check": {
      "id": "web-app-report",
      "name": "Web App Status Report",
      "ttl": "60s"
    }
  }
  

์ด ์„ค์ •์—์„œ๋Š” ์„œ๋น„์Šค๊ฐ€ 60์ดˆ๋งˆ๋‹ค ํ•œ ๋ฒˆ์”ฉ ์ž์‹ ์˜ ์ƒํƒœ๋ฅผ Consul์— ๋ณด๊ณ ํ•ด์•ผ ํ•ด์š”. 60์ดˆ ์•ˆ์— ๋ณด๊ณ ๊ฐ€ ์—†์œผ๋ฉด Consul์€ ํ•ด๋‹น ์„œ๋น„์Šค์— ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค๊ณ  ํŒ๋‹จํ•˜์ฃ .

ํ—ฌ์Šค ์ฒดํฌ ๊ฒฐ๊ณผ ์ฒ˜๋ฆฌ ๐Ÿ”„

Consul์€ ํ—ฌ์Šค ์ฒดํฌ ๊ฒฐ๊ณผ์— ๋”ฐ๋ผ ๋‹ค์–‘ํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์–ด์š”:

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

Consul ํ—ฌ์Šค ์ฒดํฌ์˜ ์žฅ์  ๐ŸŒŸ

Consul์˜ ํ—ฌ์Šค ์ฒดํฌ ๊ธฐ๋Šฅ์€ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์žฅ์ ์„ ์ œ๊ณตํ•ด์š”:

  1. ์‹ค์‹œ๊ฐ„ ๋ชจ๋‹ˆํ„ฐ๋ง: ์„œ๋น„์Šค์˜ ์ƒํƒœ๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ์–ด์š”.
  2. ์ž๋™ํ™”๋œ ๋ฌธ์ œ ๊ฐ์ง€: ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์ฆ‰์‹œ ์•Œ ์ˆ˜ ์žˆ์–ด์š”.
  3. ์„œ๋น„์Šค ๊ฒ€์ƒ‰๊ณผ์˜ ํ†ตํ•ฉ: ๊ฑด๊ฐ•ํ•œ ์„œ๋น„์Šค๋งŒ ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ์— ํฌํ•จ๋˜๋ฏ€๋กœ ์‹œ์Šคํ…œ์˜ ์•ˆ์ •์„ฑ์ด ๋†’์•„์ ธ์š”.
  4. ์œ ์—ฐ์„ฑ: ๋‹ค์–‘ํ•œ ์œ ํ˜•์˜ ์ฒดํฌ๋ฅผ ์ง€์›ํ•ด ๊ฑฐ์˜ ๋ชจ๋“  ์ข…๋ฅ˜์˜ ์„œ๋น„์Šค์— ์ ์šฉํ•  ์ˆ˜ ์žˆ์–ด์š”.
  5. ํ™•์žฅ์„ฑ: ์ˆ˜์ฒœ ๊ฐœ์˜ ์„œ๋น„์Šค๋„ ํšจ์œจ์ ์œผ๋กœ ๋ชจ๋‹ˆํ„ฐ๋งํ•  ์ˆ˜ ์žˆ์–ด์š”.

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

์‹ค์ œ ์‚ฌ์šฉ ์‚ฌ๋ก€ ๐ŸŒ

Consul์˜ ํ—ฌ์Šค ์ฒดํฌ๊ฐ€ ์‹ค์ œ๋กœ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋Š”์ง€ ๋ช‡ ๊ฐ€์ง€ ์˜ˆ๋ฅผ ๋“ค์–ด๋ณผ๊นŒ์š”?

1. ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ๋ชจ๋‹ˆํ„ฐ๋ง ๐Ÿ”ฌ

์—ฌ๋Ÿฌ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋กœ ๊ตฌ์„ฑ๋œ ์‹œ์Šคํ…œ์—์„œ ๊ฐ ์„œ๋น„์Šค์˜ ์ƒํƒœ๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋งํ•  ์ˆ˜ ์žˆ์–ด์š”.


  {
    "service": {
      "name": "user-service",
      "port": 8080,
      "check": {
        "id": "user-service-health",
        "name": "User Service Health Check",
        "http": "http://localhost:8080/health",
        "method": "GET",
        "interval": "10s",
        "timeout": "1s"
      }
    }
  }
  

์ด ์„ค์ •์€ 'user-service'์˜ ์ƒํƒœ๋ฅผ 10์ดˆ๋งˆ๋‹ค ์ฒดํฌํ•ด์š”. ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์ฆ‰์‹œ ์•Œ ์ˆ˜ ์žˆ๊ณ , ๋‹ค๋ฅธ ์„œ๋น„์Šค๋“ค์ด ์ด ์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋„๋ก ํ•  ์ˆ˜ ์žˆ์ฃ .

2. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ ๋ชจ๋‹ˆํ„ฐ๋ง ๐Ÿ’พ

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ ์ƒํƒœ๋ฅผ ์ง€์†์ ์œผ๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ์–ด์š”.


  {
    "check": {
      "id": "postgres-connection",
      "name": "PostgreSQL Connection Check",
      "args": ["/usr/local/bin/check_postgres.sh"],
      "interval": "30s"
    }
  }
  

์ด ์Šคํฌ๋ฆฝํŠธ๋Š” 30์ดˆ๋งˆ๋‹ค ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ์„ ํ™•์ธํ•ด์š”. ์—ฐ๊ฒฐ์— ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธฐ๋ฉด ์ฆ‰์‹œ ์•Œ๋ฆผ์„ ๋ฐ›์„ ์ˆ˜ ์žˆ์ฃ .

3. ์™ธ๋ถ€ API ๋ชจ๋‹ˆํ„ฐ๋ง ๐ŸŒ

์‹œ์Šคํ…œ์ด ์˜์กดํ•˜๋Š” ์™ธ๋ถ€ API์˜ ์ƒํƒœ๋ฅผ ์ฒดํฌํ•  ์ˆ˜ ์žˆ์–ด์š”.


  {
    "check": {
      "id": "payment-gateway-api",
      "name": "Payment Gateway API Check",
      "http": "https://api.payment-gateway.com/status",
      "method": "GET",
      "interval": "60s",
      "timeout": "5s"
    }
  }
  

์ด ์„ค์ •์€ ๊ฒฐ์ œ ๊ฒŒ์ดํŠธ์›จ์ด API์˜ ์ƒํƒœ๋ฅผ 1๋ถ„๋งˆ๋‹ค ํ™•์ธํ•ด์š”. API์— ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธฐ๋ฉด ๋น ๋ฅด๊ฒŒ ๋Œ€์‘ํ•  ์ˆ˜ ์žˆ์ฃ .

์ฃผ์˜ํ•  ์  โš ๏ธ

Consul์˜ ํ—ฌ์Šค ์ฒดํฌ ๊ธฐ๋Šฅ์€ ๊ฐ•๋ ฅํ•˜์ง€๋งŒ, ์‚ฌ์šฉํ•  ๋•Œ ์ฃผ์˜ํ•ด์•ผ ํ•  ์ ๋“ค๋„ ์žˆ์–ด์š”:

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

๐ŸŽญ ์ƒ์ƒํ•ด๋ณด์„ธ์š”: Consul์˜ ํ—ฌ์Šค ์ฒดํฌ๋Š” ๋งˆ์น˜ 24์‹œ๊ฐ„ ์šด์˜๋˜๋Š” ์‘๊ธ‰์‹ค๊ณผ ๊ฐ™์•„์š”. ํ™˜์ž(์„œ๋น„์Šค)์˜ ์ƒํƒœ๋ฅผ ์ง€์†์ ์œผ๋กœ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๊ณ , ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์ฆ‰์‹œ ๋Œ€์‘ํ•  ์ˆ˜ ์žˆ์ฃ . ํ•˜์ง€๋งŒ ๋ชจ๋“  ์žฌ์ฑ„๊ธฐ์— ์‘๊ธ‰์‹ค์— ๊ฐ€์ง€ ์•Š๋“ฏ์ด, ํ—ฌ์Šค ์ฒดํฌ๋„ ์ ์ ˆํ•˜๊ฒŒ ์„ค์ •ํ•ด์•ผ ํ•ด์š”. ๋„ˆ๋ฌด ๋ฏผ๊ฐํ•˜๊ฒŒ ์„ค์ •ํ•˜๋ฉด ๋ถˆํ•„์š”ํ•œ ๊ฒฝ๋ณด๊ฐ€ ์šธ๋ฆฌ๊ณ , ๋„ˆ๋ฌด ๋Š์Šจํ•˜๊ฒŒ ์„ค์ •ํ•˜๋ฉด ์ค‘์š”ํ•œ ๋ฌธ์ œ๋ฅผ ๋†“์น  ์ˆ˜ ์žˆ์œผ๋‹ˆ๊นŒ์š”!

๊ฒฐ๋ก : Consul์˜ ํ—ฌ์Šค ์ฒดํฌ, ์‹œ์Šคํ…œ ์•ˆ์ •์„ฑ์˜ ์ˆ˜ํ˜ธ์ž ๐Ÿ›ก๏ธ

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

Consul์˜ ํ—ฌ์Šค ์ฒดํฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ด์ ์„ ์–ป์„ ์ˆ˜ ์žˆ์–ด์š”:

  • ์‹œ์Šคํ…œ์˜ ์•ˆ์ •์„ฑ๊ณผ ๊ฐ€์šฉ์„ฑ ํ–ฅ์ƒ
  • ๋ฌธ์ œ ๋ฐœ์ƒ ์‹œ ๋น ๋ฅธ ๋Œ€์‘ ๊ฐ€๋Šฅ
  • ์„œ๋น„์Šค ๊ฒ€์ƒ‰๊ณผ์˜ ํ†ตํ•ฉ์„ ํ†ตํ•œ ์ž๋™ํ™”๋œ ์žฅ์•  ์ฒ˜๋ฆฌ
  • ๋ณต์žกํ•œ ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์˜ ํšจ์œจ์ ์ธ ๊ด€๋ฆฌ

๋ฌผ๋ก , ์ด๋Ÿฐ ๊ฐ•๋ ฅํ•œ ๋„๊ตฌ๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ์‹ ์ค‘ํ•œ ๊ณ„ํš๊ณผ ์„ค์ •์ด ํ•„์š”ํ•ด์š”. ํ•˜์ง€๋งŒ ์ œ๋Œ€๋กœ ํ™œ์šฉํ•œ๋‹ค๋ฉด, Consul์˜ ํ—ฌ์Šค ์ฒดํฌ๋Š” ์—ฌ๋Ÿฌ๋ถ„์˜ ์‹œ์Šคํ…œ์„ ๋”์šฑ ์•ˆ์ •์ ์ด๊ณ  ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“ค์–ด์ค„ ๊ฑฐ์˜ˆ์š”.

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

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

๐Ÿ› ๏ธ Consul ์‹ค์ „ ๊ตฌ์ถ• ๋ฐ ์šด์˜ ๊ฐ€์ด๋“œ ๐Ÿš€

์ž, ์ด์ œ Consul์˜ ํ•ต์‹ฌ ๊ธฐ๋Šฅ๋“ค์— ๋Œ€ํ•ด ์•Œ์•„๋ดค์œผ๋‹ˆ, ์‹ค์ œ๋กœ Consul์„ ์–ด๋–ป๊ฒŒ ๊ตฌ์ถ•ํ•˜๊ณ  ์šด์˜ํ•˜๋Š”์ง€ ์‚ดํŽด๋ณผ๊นŒ์š”? ์ด ๊ณผ์ •์€ ๋งˆ์น˜ ๋ ˆ๊ณ  ๋ธ”๋ก์œผ๋กœ ๋ฉ‹์ง„ ์„ฑ์„ ์Œ“๋Š” ๊ฒƒ๊ณผ ๊ฐ™์•„์š”. ๊ฐ ๋‹จ๊ณ„๋ฅผ ์ฐจ๊ทผ์ฐจ๊ทผ ๋”ฐ๋ผ๊ฐ€๋‹ค ๋ณด๋ฉด ์–ด๋Š์ƒˆ ๊ฐ•๋ ฅํ•œ Consul ํด๋Ÿฌ์Šคํ„ฐ๊ฐ€ ์™„์„ฑ๋  ๊ฑฐ์˜ˆ์š”! ๐Ÿ˜Š

1. Consul ์„ค์น˜ํ•˜๊ธฐ ๐Ÿ“ฅ

๋จผ์ € Consul์„ ์„ค์น˜ํ•ด์•ผ ํ•ด์š”. ๋‹ค์–‘ํ•œ ์šด์˜ ์ฒด์ œ์—์„œ ์‰ฝ๊ฒŒ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ๋‹ต๋‹ˆ๋‹ค.


  # Linux์—์„œ wget์„ ์‚ฌ์šฉํ•œ ์„ค์น˜ ์˜ˆ์‹œ
  wget https://releases.hashicorp.com/consul/1.9.3/consul_1.9.3_linux_amd64.zip
  unzip consul_1.9.3_linux_amd64.zip
  sudo mv consul /usr/local/bin/
  

์„ค์น˜๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด 'consul version' ๋ช…๋ น์–ด๋กœ ์ œ๋Œ€๋กœ ์„ค์น˜๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์–ด์š”.

2. Consul ์—์ด์ „ํŠธ ์‹คํ–‰ํ•˜๊ธฐ ๐Ÿƒโ€โ™‚๏ธ

Consul์€ ์—์ด์ „ํŠธ ๋ชจ๋“œ๋กœ ์‹คํ–‰๋ผ์š”. ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์—์„œ๋Š” ๊ฐ„๋‹จํžˆ ๋‹ค์Œ ๋ช…๋ น์–ด๋กœ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์ฃ .


  consul agent -dev
  

์ด ๋ช…๋ น์–ด๋Š” ๊ฐœ๋ฐœ ๋ชจ๋“œ๋กœ Consul์„ ์‹คํ–‰ํ•ด์š”. ์‹ค์ œ ์šด์˜ ํ™˜๊ฒฝ์—์„œ๋Š” ๋” ๋ณต์žกํ•œ ์„ค์ •์ด ํ•„์š”ํ•˜๋‹ต๋‹ˆ๋‹ค.

3. Consul ํด๋Ÿฌ์Šคํ„ฐ ๊ตฌ์„ฑํ•˜๊ธฐ ๐ŸŒ

์‹ค์ œ ํ™˜๊ฒฝ์—์„œ๋Š” ์—ฌ๋Ÿฌ Consul ์„œ๋ฒ„๋กœ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๊ตฌ์„ฑํ•ด์š”. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๊ณ ๊ฐ€์šฉ์„ฑ์„ ํ™•๋ณดํ•  ์ˆ˜ ์žˆ์ฃ .


  # ์„œ๋ฒ„ 1
  consul agent -server -bootstrap-expect=3 -node=server1 -bind=192.168.1.10 -data-dir=/tmp/consul

  # ์„œ๋ฒ„ 2
  consul agent -server -bootstrap-expect=3 -node=server2 -bind=192.168.1.11 -data-dir=/tmp/consul -join=192.168.1.10

  # ์„œ๋ฒ„ 3
  consul agent -server -bootstrap-expect=3 -node=server3 -bind=192.168.1.12 -data-dir=/tmp/consul -join=192.168.1.10
  

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด 3๊ฐœ์˜ ์„œ๋ฒ„๋กœ ๊ตฌ์„ฑ๋œ Consul ํด๋Ÿฌ์Šคํ„ฐ๊ฐ€ ๋งŒ๋“ค์–ด์ ธ์š”.

4. ์„œ๋น„์Šค ๋“ฑ๋กํ•˜๊ธฐ ๐Ÿ“

์ด์ œ Consul์— ์„œ๋น„์Šค๋ฅผ ๋“ฑ๋กํ•ด๋ณผ๊นŒ์š”? JSON ํŒŒ์ผ์„ ์‚ฌ์šฉํ•ด ์„œ๋น„์Šค๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ์–ด์š”.


  {
    "service": {
      "name": "web",
      "tags": ["rails"],
      "port": 80,
      "check": {
        "http": "http://localhost/health",
        "interval": "10s"
      }
    }
  }
  

์ด ํŒŒ์ผ์„ Consul์˜ ์„ค์ • ๋””๋ ‰ํ† ๋ฆฌ์— ์ €์žฅํ•˜๊ณ  Consul์„ ์žฌ์‹œ์ž‘ํ•˜๋ฉด ์„œ๋น„์Šค๊ฐ€ ๋“ฑ๋ก๋ผ์š”.

5. ์„œ๋น„์Šค ๊ฒ€์ƒ‰ํ•˜๊ธฐ ๐Ÿ”

๋“ฑ๋ก๋œ ์„œ๋น„์Šค๋Š” DNS๋‚˜ HTTP API๋ฅผ ํ†ตํ•ด ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ์–ด์š”.


  # DNS๋ฅผ ์ด์šฉํ•œ ๊ฒ€์ƒ‰
  dig @127.0.0.1 -p 8600 web.service.consul

  # HTTP API๋ฅผ ์ด์šฉํ•œ ๊ฒ€์ƒ‰
  curl http://localhost:8500/v1/catalog/service/web
  

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด 'web' ์„œ๋น„์Šค์˜ ์ •๋ณด๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์–ด์š”.

6. ๊ตฌ์„ฑ ๊ด€๋ฆฌ ์‚ฌ์šฉํ•˜๊ธฐ โš™๏ธ

Key/Value ์ €์žฅ์†Œ๋ฅผ ์‚ฌ์šฉํ•ด ๊ตฌ์„ฑ์„ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์–ด์š”.


  # ๊ฐ’ ์ €์žฅํ•˜๊ธฐ
  consul kv put config/database/url "postgresql://db.example.com:5432"

  # ๊ฐ’ ๊ฐ€์ ธ์˜ค๊ธฐ
  consul kv get config/database/url
  

์ด๋ ‡๊ฒŒ ์ €์žฅ๋œ ๊ตฌ์„ฑ์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ฝ์–ด์˜ฌ ์ˆ˜ ์žˆ์–ด์š”.

7. ๋ชจ๋‹ˆํ„ฐ๋ง ๋ฐ ๋กœ๊น… ์„ค์ •ํ•˜๊ธฐ ๐Ÿ“Š

Consul์˜ ์ƒํƒœ๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๋Š” ๊ฒƒ๋„ ์ค‘์š”ํ•ด์š”. Prometheus๋‚˜ Grafana ๊ฐ™์€ ๋„๊ตฌ์™€ ํ†ตํ•ฉํ•ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ฃ .


  # Consul ํ…”๋ ˆ๋ฉ”ํŠธ๋ฆฌ ์„ค์ • ์˜ˆ์‹œ
  {
    "telemetry": {
      "statsite_address": "127.0.0.1:8125",
      "disable_hostname": true
    }
  }
  

์ด ์„ค์ •์„ ์‚ฌ์šฉํ•˜๋ฉด Consul์˜ ๋ฉ”ํŠธ๋ฆญ์„ Statsite๋กœ ๋ณด๋‚ผ ์ˆ˜ ์žˆ์–ด์š”.

8. ๋ณด์•ˆ ์„ค์ •ํ•˜๊ธฐ ๐Ÿ”’

์‹ค์ œ ์šด์˜ ํ™˜๊ฒฝ์—์„œ๋Š” ๋ณด์•ˆ ์„ค์ •์ด ๋งค์šฐ ์ค‘์š”ํ•ด์š”. ACL(Access Control List)์„ ์„ค์ •ํ•ด ์ ‘๊ทผ์„ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์ฃ .


  # ACL ์„ค์ • ์˜ˆ์‹œ
  {
    "acl": {
      "enabled": true,
      "default_policy": "deny",
      "down_policy": "extend-cache"
    }
  }
  

์ด ์„ค์ •์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ชจ๋“  ์ ‘๊ทผ์„ ๊ฑฐ๋ถ€ํ•˜๊ณ , ๋ช…์‹œ์ ์œผ๋กœ ํ—ˆ์šฉ๋œ ์ž‘์—…๋งŒ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ด์š”.

๐Ÿ’ก ์žฌ๋Šฅ๋„ท ํŒ! Consul์„ ์šด์˜ํ•  ๋•Œ๋Š” ์ •๊ธฐ์ ์ธ ๋ฐฑ์—…๋„ ์žŠ์ง€ ๋งˆ์„ธ์š”. ํŠนํžˆ Key/Value ์ €์žฅ์†Œ์˜ ๋ฐ์ดํ„ฐ๋Š” ๋งค์šฐ ์ค‘์š”ํ•˜๋‹ˆ๊นŒ์š”. 'consul snapshot' ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•ด ์‰ฝ๊ฒŒ ๋ฐฑ์—…ํ•  ์ˆ˜ ์žˆ์–ด์š”.

9. ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ… ๋ฐ ๋””๋ฒ„๊น… ๐Ÿ”ง

๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ๋น ๋ฅด๊ฒŒ ๋Œ€์‘ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋กœ๊ทธ ๋ ˆ๋ฒจ์„ ์กฐ์ •ํ•˜๊ณ , ๋””๋ฒ„๊ทธ ์ •๋ณด๋ฅผ ํ™•์ธํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋‘์„ธ์š”.


  # ๋กœ๊ทธ ๋ ˆ๋ฒจ ์กฐ์ •
  consul agent -log-level=DEBUG

  # ๋ฉค๋ฒ„ ์ƒํƒœ ํ™•์ธ
  consul members

  # ์ƒ์„ธ ๋””๋ฒ„๊ทธ ์ •๋ณด ํ™•์ธ
  consul info
  

์ด๋Ÿฐ ๋ช…๋ น์–ด๋“ค์„ ์‚ฌ์šฉํ•˜๋ฉด Consul ํด๋Ÿฌ์Šคํ„ฐ์˜ ์ƒํƒœ๋ฅผ ์ž์„ธํžˆ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ์–ด์š”.

10. ์—…๊ทธ๋ ˆ์ด๋“œ ์ „๋žต ์ˆ˜๋ฆฝํ•˜๊ธฐ ๐Ÿ”„

Consul์„ ์—…๊ทธ๋ ˆ์ด๋“œํ•  ๋•Œ๋Š” ์ฃผ์˜๊ฐ€ ํ•„์š”ํ•ด์š”. ๋กค๋ง ์—…๊ทธ๋ ˆ์ด๋“œ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•ด ๋‹ค์šดํƒ€์ž„์„ ์ตœ์†Œํ™”ํ•  ์ˆ˜ ์žˆ์ฃ .

  1. ๊ฐ ์„œ๋ฒ„๋ฅผ ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์”ฉ ์—…๊ทธ๋ ˆ์ด๋“œํ•ด์š”.
  2. ์—…๊ทธ๋ ˆ์ด๋“œ ์ „์— ํ•ญ์ƒ ๋ฐฑ์—…์„ ๋งŒ๋“ค์–ด์š”.
  3. ์—…๊ทธ๋ ˆ์ด๋“œ ํ›„์—๋Š” ๋ชจ๋“  ๊ธฐ๋Šฅ์ด ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ํ•˜๋Š”์ง€ ๊ผญ ํ™•์ธํ•ด์š”.

๊ฒฐ๋ก : Consul, ํ˜„๋Œ€์ ์ธ ์ธํ”„๋ผ์˜ ํ•ต์‹ฌ ๐ŸŒŸ

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

Consul์„ ํ™œ์šฉํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ด์ ์„ ์–ป์„ ์ˆ˜ ์žˆ์–ด์š”:

  • ์„œ๋น„์Šค ๊ฒ€์ƒ‰์„ ํ†ตํ•œ ๋™์  ์ธํ”„๋ผ ๊ด€๋ฆฌ
  • ์ค‘์•™ํ™”๋œ ๊ตฌ์„ฑ ๊ด€๋ฆฌ๋กœ ์„ค์ • ๋ณ€๊ฒฝ์˜ ์šฉ์ด์„ฑ
  • ํ—ฌ์Šค ์ฒดํฌ๋ฅผ ํ†ตํ•œ ์‹œ์Šคํ…œ ์•ˆ์ •์„ฑ ํ–ฅ์ƒ
  • ๋ณด์•ˆ ๊ฐ•ํ™” ๋ฐ ์ ‘๊ทผ ์ œ์–ด
  • ํ™•์žฅ์„ฑ ์žˆ๋Š” ์•„ํ‚คํ…์ฒ˜ ๊ตฌ์„ฑ

Consul์€ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜, ์ปจํ…Œ์ด๋„ˆ ๊ธฐ๋ฐ˜ ํ™˜๊ฒฝ, ํด๋ผ์šฐ๋“œ ๋„ค์ดํ‹ฐ๋ธŒ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋“ฑ ํ˜„๋Œ€์ ์ธ IT ์ธํ”„๋ผ์—์„œ ํ•ต์‹ฌ์ ์ธ ์—ญํ• ์„ ํ•ด์š”. ์žฌ๋Šฅ๋„ท๊ณผ ๊ฐ™์€ ๋Œ€๊ทœ๋ชจ ํ”Œ๋žซํผ์—์„œ๋„ Consul์„ ํ™œ์šฉํ•˜๋ฉด ์‹œ์Šคํ…œ์„ ๋”์šฑ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ณ  ์šด์˜ํ•  ์ˆ˜ ์žˆ์„ ๊ฑฐ์˜ˆ์š”.

๐ŸŽญ ์ƒ์ƒํ•ด๋ณด์„ธ์š”: Consul์€ ๋งˆ์น˜ ํ˜„๋Œ€์ ์ธ ๋„์‹œ์˜ ์Šค๋งˆํŠธ ์‹œ์Šคํ…œ๊ณผ ๊ฐ™์•„์š”. ๊ตํ†ต ์‹ ํ˜ธ๋ฅผ ์ž๋™์œผ๋กœ ์ œ์–ดํ•˜๊ณ , ์ „๋ ฅ ์‚ฌ์šฉ์„ ์ตœ์ ํ™”ํ•˜๋ฉฐ, ์‘๊ธ‰ ์ƒํ™ฉ์„ ์ฆ‰์‹œ ๊ฐ์ง€ํ•˜๊ณ  ๋Œ€์‘ํ•˜์ฃ . ์ด๋Ÿฐ ์‹œ์Šคํ…œ์ด ์žˆ๋‹ค๋ฉด ๋„์‹œ๋Š” ๋”์šฑ ํšจ์œจ์ ์ด๊ณ  ์•ˆ์ „ํ•˜๊ฒŒ ์šด์˜๋  ์ˆ˜ ์žˆ์„ ๊ฑฐ์˜ˆ์š”. Consul์€ ๋ฐ”๋กœ IT ์ธํ”„๋ผ์˜ ๊ทธ๋Ÿฐ ์Šค๋งˆํŠธ ์‹œ์Šคํ…œ์ด๋ž๋‹ˆ๋‹ค!

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

Consul์˜ ์„ธ๊ณ„์—์„œ ์—ฌ๋Ÿฌ๋ถ„์˜ ๋ชจํ—˜์ด ์ฆ๊ฒ๊ณ  ์œ ์ตํ•˜๊ธฐ๋ฅผ ๋ฐ”๋ž„๊ฒŒ์š”. ์–ธ์ œ๋“  ๊ถ๊ธˆํ•œ ์ ์ด ์žˆ๋‹ค๋ฉด ๋ฌผ์–ด๋ณด์„ธ์š”. ํ•จ๊ป˜ ๋ฐฐ์šฐ๊ณ  ์„ฑ์žฅํ•˜๋Š” ๊ฒƒ, ๊ทธ๊ฒƒ์ด ๋ฐ”๋กœ ๊ธฐ์ˆ ์˜ ์•„๋ฆ„๋‹ค์›€์ด๋‹ˆ๊นŒ์š”. ์—ฌ๋Ÿฌ๋ถ„์˜ Consul ์—ฌ์ •์— ํ–‰์šด์ด ํ•จ๊ป˜ํ•˜๊ธฐ๋ฅผ! ๐Ÿ€