Kubernetes ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์ค€๋น„ํ•˜๋Š” ๊ฒƒ์ด ์‰ฝ๊ณ  ํŽธ๋ฆฌํ•ฉ๋‹ˆ๊นŒ? ์• ๋“œ์˜จ ์šด์˜์ž ๋ฐœํ‘œ

Kubernetes ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์ค€๋น„ํ•˜๋Š” ๊ฒƒ์ด ์‰ฝ๊ณ  ํŽธ๋ฆฌํ•ฉ๋‹ˆ๊นŒ? ์• ๋“œ์˜จ ์šด์˜์ž ๋ฐœํ‘œ

๋‹ค์Œ์˜ ์‰˜ ์—ฐ์‚ฐ์ž ์šฐ๋ฆฌ๋Š” ๊ทธ์˜ ํ˜•์„ ์†Œ๊ฐœํ•ฉ๋‹ˆ๋‹ค - ์• ๋“œ์˜จ ์—ฐ์‚ฐ์ž. ์ด๋Š” ์ถ”๊ฐ€ ๊ธฐ๋Šฅ์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋Š” Kubernetes ํด๋Ÿฌ์Šคํ„ฐ์— ์‹œ์Šคํ…œ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ์„ค์น˜ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ์˜คํ”ˆ ์†Œ์Šค ํ”„๋กœ์ ํŠธ์ž…๋‹ˆ๋‹ค.

์™œ ์ถ”๊ฐ€ ์‚ฌํ•ญ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

Kubernetes๊ฐ€ ์ด๋ฏธ ๋งŒ๋“ค์–ด์ง„ ์˜ฌ์ธ์› ์ œํ’ˆ์ด ์•„๋‹ˆ๋ฉฐ "์„ฑ์ธ์šฉ" ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๊ตฌ์ถ•ํ•˜๋ ค๋ฉด ๋‹ค์–‘ํ•œ ์ถ”๊ฐ€ ๊ธฐ๋Šฅ์ด ํ•„์š”ํ•˜๋‹ค๋Š” ๊ฒƒ์€ ๋น„๋ฐ€์ด ์•„๋‹™๋‹ˆ๋‹ค. ์• ๋“œ์˜จ ์šด์˜์ž๋Š” ์ด๋Ÿฌํ•œ ์• ๋“œ์˜จ์„ ์ตœ์‹  ์ƒํƒœ๋กœ ์„ค์น˜, ๊ตฌ์„ฑ ๋ฐ ์œ ์ง€ํ•˜๋Š” ๋ฐ ๋„์›€์„ ์ค๋‹ˆ๋‹ค.

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

Kubernetes ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์ค€๋น„ํ•˜๋Š” ๊ฒƒ์ด ์‰ฝ๊ณ  ํŽธ๋ฆฌํ•ฉ๋‹ˆ๊นŒ? ์• ๋“œ์˜จ ์šด์˜์ž ๋ฐœํ‘œ

๊ทธ๋“ค๊ณผ ํ•จ๊ป˜ ์ผํ•˜๋Š” ๊ตฌ์ฒด์ ์ธ ๋‚ด์šฉ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

์‹ค์Šต์—์„œ ์•Œ ์ˆ˜ ์žˆ๋“ฏ์ด ๋ฌธ์ œ๋Š” ํ•˜๋‚˜์˜ ์„ค์น˜์—๋งŒ ๊ตญํ•œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ํŽธ์•ˆํ•˜๊ฒŒ ์ž‘์—…ํ•˜๋ ค๋ฉด ์ถ”๊ฐ€ ๊ธฐ๋Šฅ์„ ์—…๋ฐ์ดํŠธํ•˜๊ณ  ๋น„ํ™œ์„ฑํ™”(ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ์ œ๊ฑฐ)ํ•ด์•ผ ํ•˜๋ฉฐ ํ”„๋กœ๋•์…˜ ํด๋Ÿฌ์Šคํ„ฐ์— ์„ค์น˜ํ•˜๊ธฐ ์ „์— ์ผ๋ถ€๋ฅผ ํ…Œ์ŠคํŠธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด ์—ฌ๊ธฐ์„œ๋Š” Ansible๋งŒ์œผ๋กœ ์ถฉ๋ถ„ํ• ๊นŒ์š”? ์•„๋งˆ๋„. ํ•˜์ง€๋งŒ ์ผ๋ฐ˜์ ์œผ๋กœ ๋ณธ๊ฒฉ์ ์ธ ์ถ”๊ฐ€ ๊ธฐ๋Šฅ์€ ์„ค์ • ์—†์ด๋Š” ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.. ์ด๋Ÿฌํ•œ ์„ค์ •์€ ํด๋Ÿฌ์Šคํ„ฐ ๋ณ€ํ˜•(aws, gce, azure, bare-metal, do ๋“ฑ)์— ๋”ฐ๋ผ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ผ๋ถ€ ์„ค์ •์€ ๋ฏธ๋ฆฌ ์ง€์ •ํ•  ์ˆ˜ ์—†์œผ๋ฉฐ ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ๊ฐ€์ ธ์™€์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํด๋Ÿฌ์Šคํ„ฐ๋Š” ์ •์ ์ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ผ๋ถ€ ์„ค์ •์˜ ๊ฒฝ์šฐ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋ชจ๋‹ˆํ„ฐ๋งํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์—ฌ๊ธฐ์—๋Š” Ansible์ด ์ด๋ฏธ ์—†์Šต๋‹ˆ๋‹ค. ํด๋Ÿฌ์Šคํ„ฐ์— ์กด์žฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์šด์˜์ž.

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

addon-operator์—์„œ๋Š” ์ด๊ฒƒ์ด ์–ด๋–ป๊ฒŒ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋‚˜์š”?

์ƒˆ๋กœ์šด ์†”๋ฃจ์…˜์„ ๋งŒ๋“ค ๋•Œ ์šฐ๋ฆฌ๋Š” ๋‹ค์Œ ์›์น™์— ๋”ฐ๋ผ ์ง„ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค.

  • ์ถ”๊ฐ€ ๊ธฐ๋Šฅ ์„ค์น˜ ํ”„๋กœ๊ทธ๋žจ์€ ๋‹ค์Œ์„ ์ง€์›ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ…œํ”Œ๋ฆฟ ๋ฐ ์„ ์–ธ์  ๊ตฌ์„ฑ. ์šฐ๋ฆฌ๋Š” ์• ๋“œ์˜จ์„ ์„ค์น˜ํ•˜๋Š” ๋งˆ๋ฒ• ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋งŒ๋“ค์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์• ๋“œ์˜จ ์šด์˜์ž๋Š” Helm์„ ์‚ฌ์šฉํ•˜์—ฌ ์• ๋“œ์˜จ์„ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค. ์„ค์น˜ํ•˜๋ ค๋ฉด ์ฐจํŠธ๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ๊ตฌ์„ฑ์— ์‚ฌ์šฉํ•  ๊ฐ’์„ ์„ ํƒํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ์„ค์ •์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์„ค์น˜ ์‹œ ์ƒ์„ฑ, ๊ทธ๋“ค์€ ํ•  ์ˆ˜์žˆ๋‹ค ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ๊ฐ€์ ธ์˜ค๊ธฐ๋˜๋Š” ์—…๋ฐ์ดํŠธ ๋ฐ›๊ธฐ, ํด๋Ÿฌ์Šคํ„ฐ ๋ฆฌ์†Œ์Šค ๋ชจ๋‹ˆํ„ฐ๋ง. ์ด๋Ÿฌํ•œ ์ž‘์—…์€ ํ›„ํฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์„ค์ •์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ํด๋Ÿฌ์Šคํ„ฐ์— ์ €์žฅ. ํด๋Ÿฌ์Šคํ„ฐ์— ์„ค์ •์„ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด ConfigMap/์• ๋“œ์˜จ ์šด์˜์ž๊ฐ€ ์ƒ์„ฑ๋˜๊ณ  ์• ๋“œ์˜จ ์šด์˜์ž๋Š” ์ด ConfigMap์— ๋Œ€ํ•œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋ชจ๋‹ˆํ„ฐ๋งํ•ฉ๋‹ˆ๋‹ค. ์• ๋“œ์˜จ ์—ฐ์‚ฐ์ž๋Š” ๊ฐ„๋‹จํ•œ ๊ทœ์น™์„ ์‚ฌ์šฉํ•˜์—ฌ ์„ค์ •์— ๋Œ€ํ•œ ์•ก์„ธ์Šค๋ฅผ ํ›„ํฌ์— ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  • ์ถ”๊ฐ€๋Š” ์„ค์ •์— ๋”ฐ๋ผ ๋‹ค๋ฆ„. ์„ค์ •์ด ๋ณ€๊ฒฝ๋œ ๊ฒฝ์šฐ Addon-operator๋Š” ์ƒˆ๋กœ์šด ๊ฐ’์œผ๋กœ Helm ์ฐจํŠธ๋ฅผ ๋กค์•„์›ƒํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” Helm ์ฐจํŠธ, ๊ทธ์— ๋Œ€ํ•œ ๊ฐ’ ๋ฐ ๋ชจ๋“ˆ ํ›„ํฌ์˜ ์กฐํ•ฉ์„ ํ˜ธ์ถœํ–ˆ์Šต๋‹ˆ๋‹ค(์ž์„ธํ•œ ๋‚ด์šฉ์€ ์•„๋ž˜ ์ฐธ์กฐ).
  • ๊ฐ์ƒ‰. ๋งˆ๋ฒ•์˜ ๋ฆด๋ฆฌ์Šค ์Šคํฌ๋ฆฝํŠธ๋Š” ์—†์Šต๋‹ˆ๋‹ค. ์—…๋ฐ์ดํŠธ ๋ฉ”์ปค๋‹ˆ์ฆ˜์€ ์ผ๋ฐ˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ถ”๊ฐ€ ๊ธฐ๋Šฅ๊ณผ ์ถ”๊ฐ€ ๊ธฐ๋Šฅ ์—ฐ์‚ฐ์ž๋ฅผ ์ด๋ฏธ์ง€๋กœ ์ˆ˜์ง‘ํ•˜๊ณ  ํƒœ๊ทธ๋ฅผ ์ง€์ •ํ•˜๊ณ  ๋กค์•„์›ƒํ•ฉ๋‹ˆ๋‹ค.
  • ๊ฒฐ๊ณผ ๊ด€๋ฆฌ. ์• ๋“œ์˜จ ์šด์˜์ž๋Š” Prometheus์— ๋Œ€ํ•œ ์ธก์ •ํ•ญ๋ชฉ์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

addon-operator์˜ ํŒจ๋”ฉ์ด๋ž€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

์ถ”๊ฐ€๋Š” ํด๋Ÿฌ์Šคํ„ฐ์— ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๋ชจ๋“  ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด Ingress ์„ค์น˜๋Š” ์ถ”๊ฐ€ ๊ธฐ๋Šฅ์˜ ์ข‹์€ ์˜ˆ์ž…๋‹ˆ๋‹ค. ์ž์ฒด CRD(prometheus-operator, cert-manager, kube-controller-manager ๋“ฑ)๊ฐ€ ์žˆ๋Š” ๋ชจ๋“  ์—ฐ์‚ฐ์ž ๋˜๋Š” ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜๋Š” ์ž‘์ง€๋งŒ ์‚ฌ์šฉํ•˜๊ธฐ ์‰ฌ์šด ๊ฒƒ(์˜ˆ: ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ ๋น„๋ฐ€์„ ์ƒˆ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์— ๋ณต์‚ฌํ•˜๋Š” ๋น„๋ฐ€ ๋ณต์‚ฌ๊ธฐ ๋˜๋Š” ์ƒˆ ๋…ธ๋“œ์—์„œ sysctl ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” sysctl ํŠœ๋„ˆ).

์ถ”๊ฐ€ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด Addon-operator๋Š” ๋ช‡ ๊ฐ€์ง€ ๊ฐœ๋…์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

  • ํˆฌ๊ตฌ ์ฐจํŠธ Prometheus, Grafana, nginx-ingress์™€ ๊ฐ™์€ ๋‹ค์–‘ํ•œ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ํด๋Ÿฌ์Šคํ„ฐ์— ์„ค์น˜ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ํ•„์š”ํ•œ ๊ตฌ์„ฑ ์š”์†Œ์— Helm ์ฐจํŠธ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ Addon-operator๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„ค์น˜ํ•˜๋Š” ๊ฒƒ์€ ๋งค์šฐ ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค.
  • ๊ฐ€์น˜ ์ €์žฅ. Helm ์ฐจํŠธ์—๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ์‹œ๊ฐ„์ด ์ง€๋‚จ์— ๋”ฐ๋ผ ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ๋Š” ๋‹ค์–‘ํ•œ ์„ค์ •์ด ์žˆ์Šต๋‹ˆ๋‹ค. Addon-operator๋Š” ์ด๋Ÿฌํ•œ ์„ค์ • ์ €์žฅ์„ ์ง€์›ํ•˜๋ฉฐ Helm ์ฐจํŠธ๋ฅผ ์ƒˆ๋กœ์šด ๊ฐ’์œผ๋กœ ๋‹ค์‹œ ์„ค์น˜ํ•˜๊ธฐ ์œ„ํ•ด ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋ชจ๋‹ˆํ„ฐ๋งํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ํ›„ํฌ ์• ๋“œ์˜จ ์šด์˜์ž๊ฐ€ ์ด๋ฒคํŠธ์—์„œ ์‹คํ–‰ํ•˜๊ณ  ๊ฐ’ ์ €์žฅ์†Œ์— ์•ก์„ธ์Šคํ•˜๋Š” ์‹คํ–‰ ํŒŒ์ผ์ž…๋‹ˆ๋‹ค. ํ›„ํฌ๋Š” ํด๋Ÿฌ์Šคํ„ฐ์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๊ณ  ๊ฐ’ ์ €์žฅ์†Œ์˜ ๊ฐ’์„ ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ €๊ฒƒ๋“ค. ํ›„ํฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํด๋Ÿฌ์Šคํ„ฐ ์‹œ์ž‘ ์‹œ ๋˜๋Š” ์ผ์ •์— ๋”ฐ๋ผ ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ๊ฐ’์„ ์ˆ˜์ง‘ํ•˜๋Š” ๊ฒ€์ƒ‰์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜๋„ ์žˆ๊ณ , ํด๋Ÿฌ์Šคํ„ฐ์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์— ๋”ฐ๋ผ ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ๊ฐ’์„ ์ˆ˜์ง‘ํ•˜๋Š” ์ง€์†์ ์ธ ๊ฒ€์ƒ‰์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๊ธฐ์ค€ ์น˜์ˆ˜ Helm ์ฐจํŠธ, ๊ฐ’ ์ €์žฅ์†Œ ๋ฐ ํ›„ํฌ์˜ ์กฐํ•ฉ์ž…๋‹ˆ๋‹ค. ๋ชจ๋“ˆ์„ ํ™œ์„ฑํ™”ํ•˜๊ฑฐ๋‚˜ ๋น„ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“ˆ์„ ๋น„ํ™œ์„ฑํ™”ํ•œ๋‹ค๋Š” ๊ฒƒ์€ ๋ชจ๋“  Helm ์ฐจํŠธ ๋ฆด๋ฆฌ์Šค๋ฅผ ์‚ญ์ œํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“ˆ์€ ์˜ˆ๋ฅผ ๋“ค์–ด ํ•„์š”ํ•œ ๋ชจ๋“  ๋ชจ๋“ˆ์ด ํ™œ์„ฑํ™”๋˜๊ฑฐ๋‚˜ ๊ฒ€์ƒ‰์ด ํ›„ํฌ์—์„œ ํ•„์š”ํ•œ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ฐพ์€ ๊ฒฝ์šฐ ๋™์ ์œผ๋กœ ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๋ณด์กฐ ํ™œ์„ฑํ™” ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค.
  • ๊ธ€๋กœ๋ฒŒ ํ›„ํฌ. ์ด๋“ค์€ "์ž์ฒด์ ์œผ๋กœ" ํ›„ํฌ์ด๋ฉฐ, ๋ชจ๋“ˆ์— ํฌํ•จ๋˜์ง€ ์•Š์œผ๋ฉฐ ์ „์—ญ ๊ฐ’ ์ €์žฅ์†Œ์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๊ทธ ๊ฐ’์€ ๋ชจ๋“ˆ์˜ ๋ชจ๋“  ํ›„ํฌ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ๋ถ€๋ถ„๋“ค์€ ์–ด๋–ป๊ฒŒ ํ•จ๊ป˜ ์ž‘๋™ํ•ฉ๋‹ˆ๊นŒ? ๋ฌธ์„œ์˜ ๊ทธ๋ฆผ์„ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

Kubernetes ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์ค€๋น„ํ•˜๋Š” ๊ฒƒ์ด ์‰ฝ๊ณ  ํŽธ๋ฆฌํ•ฉ๋‹ˆ๊นŒ? ์• ๋“œ์˜จ ์šด์˜์ž ๋ฐœํ‘œ

๋‘ ๊ฐ€์ง€ ์ž‘์—… ์‹œ๋‚˜๋ฆฌ์˜ค๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. ๊ธ€๋กœ๋ฒŒ ํ›„ํฌ๋Š” ์ด๋ฒคํŠธ(์˜ˆ: ํด๋Ÿฌ์Šคํ„ฐ์˜ ๋ฆฌ์†Œ์Šค๊ฐ€ ๋ณ€๊ฒฝ๋˜๋Š” ๊ฒฝ์šฐ)์— ์˜ํ•ด ํŠธ๋ฆฌ๊ฑฐ๋ฉ๋‹ˆ๋‹ค. ์ด ํ›„ํฌ๋Š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ฒ˜๋ฆฌํ•˜๊ณ  ์ƒˆ ๊ฐ’์„ ์ „์—ญ ๊ฐ’ ์ €์žฅ์†Œ์— ์”๋‹ˆ๋‹ค. ์• ๋“œ์˜จ ์šด์˜์ž๋Š” ์ „์—ญ ์ €์žฅ์†Œ๊ฐ€ ๋ณ€๊ฒฝ๋˜์—ˆ์Œ์„ ํ™•์ธํ•˜๊ณ  ๋ชจ๋“  ๋ชจ๋“ˆ์„ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ๋ชจ๋“ˆ์€ ํ›„ํฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ™œ์„ฑํ™”ํ•ด์•ผ ํ•˜๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ๊ฒฐ์ •ํ•˜๊ณ  ๊ฐ’ ์ €์žฅ์†Œ๋ฅผ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“ˆ์ด ํ™œ์„ฑํ™”๋œ ๊ฒฝ์šฐ Addon-operator๋Š” Helm ์ฐจํŠธ ์„ค์น˜๋ฅผ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ Helm ์ฐจํŠธ๋Š” ๋ชจ๋“ˆ ์ €์žฅ์†Œ์™€ ์ „์—ญ ์ €์žฅ์†Œ์˜ ๊ฐ’์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  2. ๋‘ ๋ฒˆ์งธ ์‹œ๋‚˜๋ฆฌ์˜ค๋Š” ๋” ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“ˆ ํ›„ํฌ๋Š” ์ด๋ฒคํŠธ์— ์˜ํ•ด ํŠธ๋ฆฌ๊ฑฐ๋˜๊ณ  ๋ชจ๋“ˆ ๊ฐ’ ์ €์žฅ์†Œ์˜ ๊ฐ’์„ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค. ์• ๋“œ์˜จ ์šด์˜์ž๋Š” ์ด๋ฅผ ์ธ์ง€ํ•˜๊ณ  ์—…๋ฐ์ดํŠธ๋œ ๊ฐ’์œผ๋กœ Helm ์ฐจํŠธ๋ฅผ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

์ถ”๊ฐ€๋Š” ํ•˜๋‚˜์˜ ๋‹จ์ผ ํ›„ํฌ ๋˜๋Š” ํ•˜๋‚˜์˜ Helm ์ฐจํŠธ๋กœ ๊ตฌํ˜„๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ ์ข…์† ๋ชจ๋“ˆ์ด๋”๋ผ๋„ - ์ด๋Š” ํด๋Ÿฌ์Šคํ„ฐ์— ์„ค์น˜๋˜๋Š” ๊ตฌ์„ฑ ์š”์†Œ์˜ ๋ณต์žก์„ฑ๊ณผ ์›ํ•˜๋Š” ๊ตฌ์„ฑ ์œ ์—ฐ์„ฑ ์ˆ˜์ค€์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง‘๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์ €์žฅ์†Œ(/์˜ˆ์‹œ) ํ›„ํฌ์™€ Helm ์ฐจํŠธ๊ฐ€ ์žˆ๋Š” ๊ฐ„๋‹จํ•œ ๋ชจ๋“ˆ๋กœ ๊ตฌํ˜„๋˜๊ณ  ๊ฐ’ ์ €์žฅ์†Œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ConfigMap์„ ํŽธ์ง‘ํ•˜์—ฌ ์„ค์ •์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋Š” sysctl-tuner ์ถ”๊ฐ€ ๊ธฐ๋Šฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์—…๋ฐ์ดํŠธ ์ „๋‹ฌ

Addon-operator๊ฐ€ ์„ค์น˜ํ•˜๋Š” ๊ตฌ์„ฑ ์š”์†Œ ์—…๋ฐ์ดํŠธ ๊ตฌ์„ฑ์— ๋Œ€ํ•œ ๋ช‡ ๋งˆ๋””์ž…๋‹ˆ๋‹ค.

ํด๋Ÿฌ์Šคํ„ฐ์—์„œ Addon-operator๋ฅผ ์‹คํ–‰ํ•˜๋ ค๋ฉด ๋‹ค์Œ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ถ”๊ฐ€ ์‚ฌํ•ญ์œผ๋กœ ์ด๋ฏธ์ง€ ๊ตฌ์ถ• Hook, Helm ์ฐจํŠธ ํŒŒ์ผ ํ˜•ํƒœ๋กœ ๋ฐ”์ด๋„ˆ๋ฆฌ ํŒŒ์ผ ์ถ”๊ฐ€ addon-operator ํ›„ํฌ์— ํ•„์š”ํ•œ ๋ชจ๋“  ๊ฒƒ: bash, kubectl, jq, python ๋“ฑ. ๊ทธ๋Ÿฐ ๋‹ค์Œ ์ด ์ด๋ฏธ์ง€๋ฅผ ์ผ๋ฐ˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์œผ๋กœ ํด๋Ÿฌ์Šคํ„ฐ์— ๋กค์•„์›ƒํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๋Œ€๋ถ€๋ถ„ ํ•˜๋‚˜ ๋˜๋Š” ๋‹ค๋ฅธ ํƒœ๊ทธ ์ง€์ • ์ฒด๊ณ„๋ฅผ ๊ตฌ์„ฑํ•˜๋ ค๊ณ  ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํด๋Ÿฌ์Šคํ„ฐ ์ˆ˜๊ฐ€ ์ ์€ ๊ฒฝ์šฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ๋™์ผํ•œ ์ ‘๊ทผ ๋ฐฉ์‹์ด ์ ํ•ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ƒˆ ๋ฆด๋ฆฌ์Šค, ์ƒˆ ๋ฒ„์ „, ๋ชจ๋“  ํด๋Ÿฌ์Šคํ„ฐ๋กœ ์ด๋™ํ•˜์—ฌ ํฌ๋“œ ์ด๋ฏธ์ง€๋ฅผ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ƒ๋‹น์ˆ˜์˜ ํด๋Ÿฌ์Šคํ„ฐ๋กœ ๋กค์•„์›ƒํ•˜๋Š” ๊ฒฝ์šฐ ์ฑ„๋„์—์„œ ์ž์ฒด ์—…๋ฐ์ดํŠธํ•˜๋Š” ๊ฐœ๋…์ด ์šฐ๋ฆฌ์—๊ฒŒ ๋” ์ ํ•ฉํ–ˆ์Šต๋‹ˆ๋‹ค.

๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ์ฑ„๋„์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ฌด์—‡์ด๋“  ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋Š” ์‹๋ณ„์ž์ž…๋‹ˆ๋‹ค(์˜ˆ: dev/stage/ea/stable).
  • ์ฑ„๋„ ์ด๋ฆ„์€ ์ด๋ฏธ์ง€ ํƒœ๊ทธ์ž…๋‹ˆ๋‹ค. ์ฑ„๋„์— ์—…๋ฐ์ดํŠธ๋ฅผ ์ถœ์‹œํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ์ƒˆ ์ด๋ฏธ์ง€๊ฐ€ ์ˆ˜์ง‘๋˜๊ณ  ์ฑ„๋„ ์ด๋ฆ„์œผ๋กœ ํƒœ๊ทธ๊ฐ€ ์ง€์ •๋ฉ๋‹ˆ๋‹ค.
  • ์ƒˆ ์ด๋ฏธ์ง€๊ฐ€ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์— ๋‚˜ํƒ€๋‚˜๋ฉด Addon-operator๊ฐ€ ๋‹ค์‹œ ์‹œ์ž‘๋˜๊ณ  ์ƒˆ ์ด๋ฏธ์ง€๋กœ ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ๋‹ค์Œ์— ์“ฐ์—ฌ์ง„ ๊ฒƒ์ฒ˜๋Ÿผ ๋ชจ๋ฒ” ์‚ฌ๋ก€๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๋ฌธ์„œ. ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์€ ๊ถŒ์žฅ๋˜์ง€ ์•Š์ง€๋งŒ ์šฐ๋ฆฌ๋Š” ๋™์ผํ•œ ํด๋Ÿฌ์Šคํ„ฐ์— ์žˆ๋Š” ์ผ๋ฐ˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜. Addon-operator์˜ ๊ฒฝ์šฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ํด๋Ÿฌ์Šคํ„ฐ์— ๋ถ„์‚ฐ๋œ ๋งŽ์€ ๋ฐฐํฌ์ด๋ฉฐ, ์ž๋™ ์—…๋ฐ์ดํŠธ๋Š” ๋งŽ์€ ๋„์›€์ด ๋˜๊ณ  ์‚ถ์„ ๋” ์‰ฝ๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

์ฑ„๋„ ๋„์›€๋ง ๋ฐ ํ…Œ์ŠคํŠธ ์ค‘: ๋ณด์กฐ ํด๋Ÿฌ์Šคํ„ฐ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ์ฑ„๋„์— ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. stage ์ฑ„๋„์— ๋ฐฐํฌํ•˜๊ธฐ ์ „์— ์—…๋ฐ์ดํŠธ๋ฅผ ๋ฐฐํฌํ•˜์„ธ์š”. ea ะธ stable. ์ฑ„๋„์— ํด๋Ÿฌ์Šคํ„ฐ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ea ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ์œผ๋กœ ์ „ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. stable, ์ด ํด๋Ÿฌ์Šคํ„ฐ์˜ ๋ฌธ์ œ๋ฅผ ์กฐ์‚ฌํ•˜๋Š” ์ค‘์ž…๋‹ˆ๋‹ค. ํด๋Ÿฌ์Šคํ„ฐ๊ฐ€ ํ™œ์„ฑ ์ง€์›์—์„œ ์ œ์™ธ๋˜๋ฉด "๋™๊ฒฐ" ์ฑ„๋„๋กœ ์ „ํ™˜๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. freeze-2019-03-20.

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

์ผ๋ฐ˜์ ์œผ๋กœ ์ด ์ž‘์—…์€ Addon-operator ์—†์ด ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ Addon-operator๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด node-exporter ์„ค์น˜์šฉ ๋ชจ๋“ˆ์ด ํ•˜๋‚˜์˜ ์ €์žฅ์†Œ์— ํ‘œ์‹œ๋˜๊ณ  ์ด๋ฏธ์ง€ ๊ตฌ์ถ•์„ ์œ„ํ•œ Dockerfile์ด ๋ฐ”๋กœ ๊ฑฐ๊ธฐ์— ๋ณด๊ด€๋  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๋ชจ๋“  ์ฐธ๊ฐ€์ž๊ฐ€ ๋” ์‰ฝ๊ฒŒ ์ž‘์—…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฌด์Šจ ์ผ์ด ์ผ์–ด๋‚˜๋Š”์ง€ ์ดํ•ดํ•˜๋Š” ํ”„๋กœ์„ธ์Šค... ํด๋Ÿฌ์Šคํ„ฐ๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ์ธ ๊ฒฝ์šฐ PR์„ ํ…Œ์ŠคํŠธํ•˜๊ณ  ์ƒˆ ๋ฒ„์ „์„ ์ถœ์‹œํ•˜๋Š” ๊ฒƒ์ด ๋” ์‰ฌ์›Œ์ง‘๋‹ˆ๋‹ค!

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

๊ฒฐ๋ก 

Addon-operator์— ๊ตฌํ˜„๋œ ์›์น™์„ ์‚ฌ์šฉํ•˜๋ฉด ์ผ๋ฐ˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค์™€ ์œ ์‚ฌํ•˜๊ฒŒ ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ์ถ”๊ฐ€ ๊ธฐ๋Šฅ์„ ์ƒ์„ฑ, ํ…Œ์ŠคํŠธ, ์„ค์น˜ ๋ฐ ์—…๋ฐ์ดํŠธํ•˜๊ธฐ ์œ„ํ•œ ํˆฌ๋ช…ํ•œ ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

PS

๋ธ”๋กœ๊ทธ์—์„œ๋„ ์ฝ์–ด๋ณด์„ธ์š”.

์ถœ์ฒ˜ : habr.com

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€