Ansible ๊ธฐ๋ณธ ์‚ฌํ•ญ์ด ์—†์œผ๋ฉด ํ”Œ๋ ˆ์ด๋ถ์€ ๋ˆ์ ๋ˆ์ ํ•œ ํŒŒ์Šคํƒ€ ๋ฉ์–ด๋ฆฌ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

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

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

๋…์ž๊ฐ€ ๊ธฐ๋Œ€ํ•˜๋Š” ์ˆ˜์ค€์€ ์ด๋ฏธ ์ˆ˜์ฒœ ์ค„์˜ ์–Œ๋ผ๊ฐ€ ์ž‘์„ฑ๋˜์—ˆ๊ณ , ๋ฌด์–ธ๊ฐ€๊ฐ€ ์ด๋ฏธ ์ œ์ž‘ ์ค‘์ด์ง€๋งŒ "์–ด์ฉ์ง€ ๋ชจ๋“  ๊ฒƒ์ด ๋น„๋šค์–ด์ ธ ์žˆ๋‹ค"๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ œ๋ชฉ

Ansible ์‚ฌ์šฉ์ž๊ฐ€ ์ €์ง€๋ฅด๋Š” ๊ฐ€์žฅ ํฐ ์‹ค์ˆ˜๋Š” ๋ฌด์—‡์ธ์ง€ ๋ชจ๋ฅด๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋ฆ„์„ ๋ชจ๋ฅด๋ฉด ์„ค๋ช…์„œ์˜ ๋‚ด์šฉ์„ ์ดํ•ดํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์‚ด์•„์žˆ๋Š” ์˜ˆ: ์ธํ„ฐ๋ทฐ ์ค‘์— Ansible์—์„œ ๋งŽ์€ ๊ธ€์„ ์ผ๋‹ค๊ณ  ๋งํ•˜๋Š” ๋“ฏํ•œ ์‚ฌ๋žŒ์ด โ€œํ”Œ๋ ˆ์ด๋ถ์€ ์–ด๋–ค ์š”์†Œ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์Šต๋‹ˆ๊นŒ?โ€๋ผ๋Š” ์งˆ๋ฌธ์— ๋Œ€๋‹ตํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋‚ด๊ฐ€ โ€œ๋Œ€๋‹ต์€ ํ”Œ๋ ˆ์ด๋ถ์œผ๋กœ ๊ตฌ์„ฑ๋  ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒ๋๋‹คโ€๊ณ  ์ œ์•ˆํ•˜์ž โ€œ์šฐ๋ฆฌ๋Š” ๊ทธ๊ฒƒ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹คโ€๋Š” ์š•์„ค์ด ๋’ค๋”ฐ๋ž๋‹ค. ์‚ฌ๋žŒ๋“ค์€ ๋ˆ์„ ์œ„ํ•ด Ansible์„ ์ž‘์„ฑํ•˜๊ณ  ๋†€์ด๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋“ค์€ ์‹ค์ œ๋กœ ๊ทธ๊ฒƒ์„ ์‚ฌ์šฉํ•˜์ง€๋งŒ ๊ทธ๊ฒƒ์ด ๋ฌด์—‡์ธ์ง€ ๋ชจ๋ฆ…๋‹ˆ๋‹ค.

๊ทธ๋Ÿผ ๊ฐ„๋‹จํ•œ ๊ฒƒ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด๋ฆ„์ด ๋ฌด์—‡์ธ๊ฐ€์š”? ์•„๋งˆ๋„ ๋‹น์‹ ์€ ์ด๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์„ ์ˆ˜๋„ ์žˆ๊ณ , ๋ฌธ์„œ๋ฅผ ์ฝ์„ ๋•Œ ์ฃผ์˜๋ฅผ ๊ธฐ์šธ์ด์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ชจ๋ฅผ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

ansible-playbook์€ ํ”Œ๋ ˆ์ด๋ถ์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ํ”Œ๋ ˆ์ด๋ถ์€ yml/yaml ํ™•์žฅ์ž๋ฅผ ๊ฐ€์ง„ ํŒŒ์ผ๋กœ, ๊ทธ ์•ˆ์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋‚ด์šฉ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

---
- hosts: group1
  roles:
    - role1

- hosts: group2,group3
  tasks:
    - debug:

์šฐ๋ฆฌ๋Š” ์ด ์ „์ฒด ํŒŒ์ผ์ด ํ”Œ๋ ˆ์ด๋ถ์ด๋ผ๋Š” ๊ฒƒ์„ ์ด๋ฏธ ๊นจ๋‹ฌ์•˜์Šต๋‹ˆ๋‹ค. ์—ญํ• ์ด ์–ด๋””์— ์žˆ๊ณ  ์ž‘์—…์ด ์–ด๋””์— ์žˆ๋Š”์ง€ ๋ณด์—ฌ์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ๋†€์ด๋Š” ์–ด๋””์— ์žˆ๋‚˜์š”? ๊ทธ๋ฆฌ๊ณ  ๋†€์ด์™€ ์—ญํ•  ๋˜๋Š” ํ”Œ๋ ˆ์ด๋ถ์˜ ์ฐจ์ด์ ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

๊ทธ๊ฒƒ์€ ๋ชจ๋‘ ๋ฌธ์„œ์— ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ๋“ค์€ ๊ทธ๊ฒƒ์„ ๊ทธ๋ฆฌ์›Œํ•ฉ๋‹ˆ๋‹ค. ์ดˆ๋ณด์ž - ๋„ˆ๋ฌด ๋งŽ์•„์„œ ํ•œ ๋ฒˆ์— ๋ชจ๋“  ๊ฒƒ์„ ๊ธฐ์–ตํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๊ฒฝํ—˜์ด ํ’๋ถ€ํ•œ - "์‚ฌ์†Œํ•œ ๊ฒƒ" ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๊ฒฝํ—˜์ด ์žˆ๋Š” ๊ฒฝ์šฐ ์ด ํŽ˜์ด์ง€๋ฅผ ์ตœ์†Œํ•œ XNUMX๊ฐœ์›”์— ํ•œ ๋ฒˆ์”ฉ ๋‹ค์‹œ ์ฝ์œผ๋ฉด ๊ท€ํ•˜์˜ ์ฝ”๋“œ๊ฐ€ ๋™๊ธ‰ ์ตœ๊ณ ์˜ ์ฝ”๋“œ๊ฐ€ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ๊ธฐ์–ตํ•˜์„ธ์š”. ํ”Œ๋ ˆ์ด๋ถ์€ ํ”Œ๋ ˆ์ด์™€ ํ”Œ๋ ˆ์ด๋กœ ๊ตฌ์„ฑ๋œ ๋ชฉ๋ก์ž…๋‹ˆ๋‹ค. import_playbook.
์ด๊ฒƒ์€ ํ•˜๋‚˜์˜ ์—ฐ๊ทน์ž…๋‹ˆ๋‹ค:

- hosts: group1
  roles:
    - role1

๊ทธ๋ฆฌ๊ณ  ์ด๊ฒƒ์€ ๋˜ ๋‹ค๋ฅธ ์—ฐ๊ทน์ด๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค:

- hosts: group2,group3
  tasks:
    - debug:

๋†€์ด๋ž€ ๋ฌด์—‡์ธ๊ฐ€? ๊ทธ๋…€๋Š” ์™œ์š”?

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

"๋ญ”๊ฐ€" "์–ด๋”˜๊ฐ€"๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ์—ฐ๊ทน์„ ์”๋‹ˆ๋‹ค. ์—ญํ• ์ด ์•„๋‹™๋‹ˆ๋‹ค. ๋ชจ๋“ˆ๊ณผ ๋Œ€๋ฆฌ์ธ์ด ์žˆ๋Š” ์—ญํ• ์ด ์•„๋‹™๋‹ˆ๋‹ค. ๋‹น์‹ ์€ ๊ทธ๊ฒƒ์„ ๊ฐ€์ง€๊ณ  ์—ฐ๊ทน์„ ์”๋‹ˆ๋‹ค. ํ˜ธ์ŠคํŠธ ํ•„๋“œ์—๋Š” ์‹คํ–‰ํ•  ์œ„์น˜๋ฅผ ๋‚˜์—ดํ•˜๊ณ  ์—ญํ• /์ž‘์—…์—๋Š” ์‹คํ–‰ํ•  ํ•ญ๋ชฉ์„ ๋‚˜์—ดํ•ฉ๋‹ˆ๋‹ค.

๊ฐ„๋‹จํ•˜์ฃ ? ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์–ด๋–ป๊ฒŒ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

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

์ „ํ˜•์ ์ธ ์˜ˆ๋Š” ๋ชจ๋‹ˆํ„ฐ๋ง์ž…๋‹ˆ๋‹ค. ๋ชจ๋‹ˆํ„ฐ๋ง์„ ๊ตฌ์„ฑํ•˜๋Š” ๋ชจ๋‹ˆํ„ฐ๋ง ์—ญํ• ์„ ๊ฐ–๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ๋ชจ๋‹ˆํ„ฐ๋ง ์—ญํ• ์€ ํ”Œ๋ ˆ์ด์— ๋”ฐ๋ผ ๋ชจ๋‹ˆํ„ฐ๋ง ํ˜ธ์ŠคํŠธ์— ํ• ๋‹น๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ชจ๋‹ˆํ„ฐ๋ง์„ ์œ„ํ•ด์„œ๋Š” ๋ชจ๋‹ˆํ„ฐ๋ง ์ค‘์ธ ํ˜ธ์ŠคํŠธ์— ํŒจํ‚ค์ง€๋ฅผ ์ „๋‹ฌํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ด ๋ฐํ˜€์กŒ์Šต๋‹ˆ๋‹ค. ๋Œ€๋ฆฌ์ž๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? iptables๋„ ๊ตฌ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋Œ€๋ฆฌ์ž? ๋˜ํ•œ ๋ชจ๋‹ˆํ„ฐ๋ง์„ ํ™œ์„ฑํ™”ํ•˜๋ ค๋ฉด DBMS์— ๋Œ€ํ•œ ๊ตฌ์„ฑ์„ ์ž‘์„ฑ/์ˆ˜์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋Œ€๋ฆฌ์ž! ๊ทธ๋ฆฌ๊ณ  ์ฐฝ์˜๋ ฅ์ด ๋ถ€์กฑํ•˜๋ฉด ๋Œ€ํ‘œ๋‹จ์„ ๋งŒ๋“ค ์ˆ˜๋„ ์žˆ์–ด์š” include_role ๊ทธ๋ฃน ๋ชฉ๋ก ๋ฐ ๋‚ด๋ถ€์—์„œ ๊นŒ๋‹ค๋กœ์šด ํ•„ํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ค‘์ฒฉ ๋ฃจํ”„์—์„œ include_role ๋‹น์‹ ์€ ๋” ๋งŽ์€ ๊ฒƒ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค delegate_to ๋‹ค์‹œ. ๊ทธ๋ฆฌ๊ณ  ์šฐ๋ฆฌ๋Š” ๊ฐ„๋‹ค...

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

์—ฌ๊ธฐ์„œ ์‹ค์ˆ˜๋Š” ์–ด๋””์„œ ๋ฐœ์ƒํ–ˆ๋‚˜์š”? ํ˜ธ์ŠคํŠธ X์—์„œ ์ž‘์—… "x"๋ฅผ ์ˆ˜ํ–‰ํ•˜๋ ค๋ฉด ํ˜ธ์ŠคํŠธ Y๋กœ ๊ฐ€์„œ ๊ฑฐ๊ธฐ์„œ "y"๋ฅผ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•œ๋‹ค๋Š” ์‚ฌ์‹ค์„ ๋ฐœ๊ฒฌํ•œ ์ˆœ๊ฐ„ ๊ฐ„๋‹จํ•œ ์—ฐ์Šต์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ฐ€์„œ ํ˜ธ์ŠคํŠธ Y์—์„œ y๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” play๋ฅผ ์ž‘์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. "x"์— ๋ญ”๊ฐ€๋ฅผ ์ถ”๊ฐ€ํ•˜์ง€ ๋ง๊ณ  ์ฒ˜์Œ๋ถ€ํ„ฐ ๋‹ค์‹œ ์ž‘์„ฑํ•˜์„ธ์š”. ํ•˜๋“œ์ฝ”๋”ฉ๋œ ๋ณ€์ˆ˜์—๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค.

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

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

์˜ค๋ฅ˜: ์—ญํ• ์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค. ์ด ๋น„์œ ๋Š” ์ข‹์€ ์‹œ์ž‘์„ ๋„ˆ๋ฌด ๋งŽ์ด ๋ง์ณค๊ธฐ ๋•Œ๋ฌธ์— ๋ณด๊ธฐ๋งŒ ํ•ด๋„ ์Šฌํ”„๋‹ค. ์—ญํ• ์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๊ธฐ๋Šฅ์ด ์•„๋‹™๋‹ˆ๋‹ค. ๊ทธ๋…€๋Š” ๊ณ„์‚ฐ์„ ํ•  ์ˆ˜ ์—†๊ณ  ํ”Œ๋ ˆ์ด ์ˆ˜์ค€์˜ ๊ฒฐ์ •์„ ๋‚ด๋ฆด ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋†€์ด๊ฐ€ ์–ด๋–ค ๊ฒฐ์ •์„ ๋‚ด๋ฆฌ๋Š”์ง€ ์•Œ๋ ค์ฃผ์„ธ์š”.

๊ณ ๋งˆ์›Œ์š”, ๋‹น์‹  ๋ง์ด ๋งž์•„์š”. Play๋Š” ์–ด๋–ค ํ˜ธ์ŠคํŠธ์—์„œ ์–ด๋–ค ์ž‘์—…๊ณผ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ• ์ง€ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค(๋ณด๋‹ค ์ •ํ™•ํ•˜๊ฒŒ๋Š” ์ •๋ณด ํฌํ•จ).

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

Ansible๋กœ ํ”„๋กœ๊ทธ๋ž˜๋ฐํ•˜๋Š” ๊ฒƒ์ด ์™œ ์œ„ํ—˜ํ•œ์ง€, ๊ทธ๋ฆฌ๊ณ  ์™œ COBOL์ด Ansible๋ณด๋‹ค ๋‚˜์€์ง€ ์ด ์žฅ์—์„œ ๋ณ€์ˆ˜์™€ ์ง„์ž์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์ง€๊ธˆ์€ ํ•œ ๊ฐ€์ง€๋งŒ ๊ฐ€์ •ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ฐ ๊ณ„์‚ฐ์€ ์ „์—ญ ๋ณ€์ˆ˜์— ์ง€์šธ ์ˆ˜ ์—†๋Š” ๋ณ€๊ฒฝ ํ”์ ์„ ๋‚จ๊ธฐ๋ฉฐ ์ด์— ๋Œ€ํ•ด ์•„๋ฌด๊ฒƒ๋„ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋‘ ๊ฐœ์˜ "ํ”์ "์ด ๊ต์ฐจํ•˜์ž๋งˆ์ž ๋ชจ๋“  ๊ฒƒ์ด ์‚ฌ๋ผ์กŒ์Šต๋‹ˆ๋‹ค.

๋น„๊ผฌ๋Š” ์‚ฌ๋žŒ์— ๋Œ€ํ•œ ์ฐธ๊ณ  ์‚ฌํ•ญ: ์—ญํ• ์€ ํ™•์‹คํžˆ ์ œ์–ด ํ๋ฆ„์— ์˜ํ–ฅ์„ ๋ฏธ์น  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋จน๋‹ค delegate_to ํ•ฉ๋ฆฌ์ ์ธ ์šฉ๋„๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๋จน๋‹ค meta: end host/play. ํ•˜์ง€๋งŒ! ์šฐ๋ฆฌ๊ฐ€ ๊ธฐ๋ณธ์„ ๊ฐ€๋ฅด์น˜๋Š” ๊ฒƒ์„ ๊ธฐ์–ตํ•˜์‹œ๋‚˜์š”? ์žŠ์–ด๋ฒ„๋ฆฐ ๊ฒƒ delegate_to. ์šฐ๋ฆฌ๋Š” ๊ฐ€์žฅ ๋‹จ์ˆœํ•˜๊ณ  ์•„๋ฆ„๋‹ค์šด Ansible ์ฝ”๋“œ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ฝ๊ธฐ ์‰ฝ๊ณ , ์“ฐ๊ธฐ ์‰ฝ๊ณ , ๋””๋ฒ„๊ทธํ•˜๊ธฐ ์‰ฝ๊ณ , ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์‰ฝ๊ณ , ์™„๋ฃŒํ•˜๊ธฐ ์‰ฝ์Šต๋‹ˆ๋‹ค. ๋‹ค์‹œ ํ•œ ๋ฒˆ:

ํ”Œ๋ ˆ์ดํ•˜๊ณ  ํ”Œ๋ ˆ์ด๋งŒ์ด ์–ด๋–ค ํ˜ธ์ŠคํŠธ์—์„œ ๋ฌด์—‡์„ ์‹คํ–‰ํ• ์ง€ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค.

์ด ์„น์…˜์—์„œ๋Š” ๋†€์ด์™€ ์—ญํ•  ์‚ฌ์ด์˜ ๋Œ€๋ฆฝ์„ ๋‹ค๋ฃจ์—ˆ์Šต๋‹ˆ๋‹ค. ์ด์ œ ์ž‘์—…๊ณผ ์—ญํ• ์˜ ๊ด€๊ณ„์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

์ž„๋ฌด์™€ ์—ญํ• 

๋†€์ด๋ฅผ ๊ณ ๋ คํ•ด๋ณด์„ธ์š”:

- hosts: somegroup
  pre_tasks:
    - some_tasks1:
  roles:
     - role1
     - role2
  post_tasks:
     - some_task2:
     - some_task3:

foo๋ฅผ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ๊ฒƒ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค foo: name=foobar state=present. ์ด๊ฑด ์–ด๋””์— ์จ์•ผ ํ•˜๋‚˜์š”? ๋ฏธ๋ฆฌ? ์šฐํŽธ? ์—ญํ• ์„ ๋งŒ๋“œ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

...๊ทธ๋ฆฌ๊ณ  ์ž‘์—…์€ ์–ด๋””๋กœ ๊ฐ”๋‚˜์š”?

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

์žฌ์ƒ ์žฅ์น˜: ํ˜ธ์ŠคํŠธ ์ง€์‹œ์–ด, ์žฌ์ƒ ์ž์ฒด ๋ฐ pre_tasks ์„ค์ •, ์ž‘์—…, ์—ญํ• , post_tasks ์„น์…˜. ํ”Œ๋ ˆ์ด๋ฅผ ์œ„ํ•œ ๋‚˜๋จธ์ง€ ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ์ด์ œ ์šฐ๋ฆฌ์—๊ฒŒ ์ค‘์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ž‘์—… ๋ฐ ์—ญํ• ์ด ํฌํ•จ๋œ ์„น์…˜์˜ ์ˆœ์„œ: pre_tasks, roles, tasks, post_tasks. ์˜๋ฏธ์ƒ ์‹คํ–‰ ์ˆœ์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. tasks ะธ roles ๋ช…ํ™•ํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ๋ชจ๋ฒ” ์‚ฌ๋ก€์— ๋”ฐ๋ฅด๋ฉด ์„น์…˜์„ ์ถ”๊ฐ€ํ•œ๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. tasks, ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒฝ์šฐ์—๋งŒ roles. ์žˆ์„ ๊ฒฝ์šฐ roles, ์ฒจ๋ถ€๋œ ๋ชจ๋“  ์ž‘์—…์€ ์„น์…˜์— ๋ฐฐ์น˜๋ฉ๋‹ˆ๋‹ค. pre_tasks/post_tasks.

๋‚จ์€ ๊ฒƒ์€ ๋ชจ๋“  ๊ฒƒ์ด ์˜๋ฏธ์ ์œผ๋กœ ๋ช…ํ™•ํ•˜๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. pre_tasks, ๊ทธ ๋‹ค์Œ์— roles, ๊ทธ ๋‹ค์Œ์— post_tasks.

ํ•˜์ง€๋งŒ ์šฐ๋ฆฌ๋Š” ์•„์ง ์งˆ๋ฌธ์— ๋Œ€๋‹ตํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๋ชจ๋“ˆ ํ˜ธ์ถœ์€ ์–ด๋””์— ์žˆ์Šต๋‹ˆ๊นŒ? foo ์“ฐ๋‹ค? ๊ฐ ๋ชจ๋“ˆ์— ๋Œ€ํ•œ ์ „์ฒด ์—ญํ• ์„ ์ž‘์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? ์•„๋‹ˆ๋ฉด ๋ชจ๋“  ๋ฉด์—์„œ ๋‘๊บผ์šด ์—ญํ• ์„ ๋งก๋Š” ๊ฒƒ์ด ์ข‹์„๊นŒ์š”? ์—ญํ• ์ด ์•„๋‹ˆ๋ผ๋ฉด ์‚ฌ์ „ ๋˜๋Š” ์‚ฌํ›„ ์–ด๋””์— ์ž‘์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ?

์ด๋Ÿฌํ•œ ์งˆ๋ฌธ์— ๋Œ€ํ•œ ํ•ฉ๋ฆฌ์ ์ธ ๋Œ€๋‹ต์ด ์—†๋‹ค๋ฉด ์ด๋Š” ์ง๊ด€์ด ๋ถ€์กฑํ•˜๋‹ค๋Š” ์‹ ํ˜ธ, ์ฆ‰ ๋™์ผํ•œ "ํ”๋“ค๋ฆฌ๋Š” ๊ธฐ์ดˆ"์ž…๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์„ ์•Œ์•„ ๋ด…์‹œ๋‹ค. ์ฒซ์งธ, ๋ณด์•ˆ ์งˆ๋ฌธ์ž…๋‹ˆ๋‹ค. ํ”Œ๋ ˆ์ด๊ฐ€ pre_tasks ะธ post_tasks (๊ทธ๋ฆฌ๊ณ  ์ž‘์—…์ด๋‚˜ ์—ญํ• ์ด ์—†์Šต๋‹ˆ๋‹ค.) ๋‹ค์Œ์—์„œ ์ฒซ ๋ฒˆ์งธ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. post_tasks ๋๊นŒ์ง€ ์˜ฎ๊ธธ๊ฒŒ์š” pre_tasks?

๋ฌผ๋ก , ์งˆ๋ฌธ์˜ ํ‘œํ˜„์€ ๊ทธ๊ฒƒ์ด ๊นจ์งˆ ๊ฒƒ์ž„์„ ์•”์‹œํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ •ํ™•ํžˆ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

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

๋”ฐ๋ผ์„œ ์ž‘์—…์„ ๋‹ค์Œ์—์„œ ๋“œ๋ž˜๊ทธํ•˜๋ฉด post_tasks ะฒ pre_tasks, ๊ทธ๋Ÿฌ๋ฉด ์ž ์žฌ์ ์œผ๋กœ ํ•ธ๋“ค๋Ÿฌ๊ฐ€ ์‹คํ–‰๋˜๊ธฐ ์ „์— ์‹คํ–‰ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋งŒ์•ฝ์— pre_tasks ์›น ์„œ๋ฒ„๊ฐ€ ์„ค์น˜ ๋ฐ ๊ตฌ์„ฑ๋˜์—ˆ์œผ๋ฉฐ post_tasks ๋ฌด์–ธ๊ฐ€๊ฐ€ ์ „์†ก๋œ ๋‹ค์Œ ์ด ์ž‘์—…์„ ์„น์…˜์œผ๋กœ ์ „์†กํ•ฉ๋‹ˆ๋‹ค. pre_tasks "์ „์†ก" ์‹œ ์„œ๋ฒ„๊ฐ€ ์•„์ง ์‹คํ–‰๋˜์ง€ ์•Š๊ณ  ๋ชจ๋“  ๊ฒƒ์ด ์ค‘๋‹จ๋œ๋‹ค๋Š” ์‚ฌ์‹ค๋กœ ์ด์–ด์ง‘๋‹ˆ๋‹ค.

์ด์ œ ๋‹ค์‹œ ์ƒ๊ฐํ•ด ๋ด…์‹œ๋‹ค. ์™œ ํ•„์š”ํ•œ๊ฐ€์š”? pre_tasks ะธ post_tasks? ์˜ˆ๋ฅผ ๋“ค์–ด, ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์ „์— ํ•„์š”ํ•œ ๋ชจ๋“  ๊ฒƒ(ํ•ธ๋“ค๋Ÿฌ ํฌํ•จ)์„ ์™„๋ฃŒํ•˜๊ธฐ ์œ„ํ•ด. ใ… post_tasks ์—ญํ• (ํ•ธ๋“ค๋Ÿฌ ํฌํ•จ) ์‹คํ–‰ ๊ฒฐ๊ณผ๋กœ ์ž‘์—…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ธฐ๋ฏผํ•œ Ansible ์ „๋ฌธ๊ฐ€๊ฐ€ ๊ทธ๊ฒƒ์ด ๋ฌด์—‡์ธ์ง€ ์•Œ๋ ค์ค„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. meta: flush_handlers, ๊ทธ๋Ÿฌ๋‚˜ ์žฌ์ƒ ์ค‘์ธ ์„น์…˜์˜ ์‹คํ–‰ ์ˆœ์„œ์— ์˜์กดํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์™œ ํ”Œ๋Ÿฌ์‹œ_handler๊ฐ€ ํ•„์š”ํ•œ๊ฐ€์š”? ๊ฒŒ๋‹ค๊ฐ€, ๋ฉ”ํƒ€: ํ”Œ๋Ÿฌ์‹œ_ํ•ธ๋“ค๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ค‘๋ณต ํ•ธ๋“ค๋Ÿฌ๋กœ ์ธํ•ด ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ์ผ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์‚ฌ์šฉํ•  ๋•Œ ์ด์ƒํ•œ ๊ฒฝ๊ณ ๊ฐ€ ํ‘œ์‹œ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. when ัƒ block ๋“ฑ. ์•ค์„œ๋ธ”์„ ๋” ์ž˜ ์•Œ์ˆ˜๋ก "๊นŒ๋‹ค๋กœ์šด" ์†”๋ฃจ์…˜์— ๋Œ€ํ•ด ๋” ๋งŽ์€ ๋‰˜์•™์Šค๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์‚ฌ์ „/์—ญํ• /์‚ฌํ›„ ๊ฐ„์˜ ์ž์—ฐ์Šค๋Ÿฌ์šด ๊ตฌ๋ถ„์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฐ„๋‹จํ•œ ์†”๋ฃจ์…˜์€ ๋ฏธ๋ฌ˜ํ•œ ์ฐจ์ด๋ฅผ ์œ ๋ฐœํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

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

์ด์ œ "์—ญํ•  ๋˜๋Š” ์ž‘์—…"์ด๋ผ๋Š” ์งˆ๋ฌธ์— ๋Œ€ํ•œ ๋Œ€๋‹ต์€ ์ด๋ฏธ ์ง„ํ–‰ ์ค‘์ธ ์ž‘์—…์œผ๋กœ ๊ท€๊ฒฐ๋ฉ๋‹ˆ๋‹ค. ์ž‘์—…์ด ์žˆ์œผ๋ฉด ์ž‘์—…์— ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์—ญํ• ์ด ์žˆ๋Š” ๊ฒฝ์šฐ ์—ญํ• ์„ ์ƒ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(ํ•˜๋‚˜์˜ ์ž‘์—…์—์„œ๋„). ์ž‘์—…๊ณผ ์—ญํ• ์€ ๋™์‹œ์— ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์ ์„ ์ƒ๊ธฐ์‹œ์ผœ ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.

Ansible์˜ ๊ธฐ๋ณธ ์‚ฌํ•ญ์„ ์ดํ•ดํ•˜๋ฉด ๊ฒ‰๋ณด๊ธฐ์— ์ทจํ–ฅ์— ๋Œ€ํ•œ ์งˆ๋ฌธ์— ๋Œ€ํ•œ ํ•ฉ๋ฆฌ์ ์ธ ๋‹ต๋ณ€์„ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ž‘์—… ๋ฐ ์—ญํ• (XNUMX๋ถ€)

์ด์ œ ๋ง‰ ํ”Œ๋ ˆ์ด๋ถ์„ ์ž‘์„ฑํ•˜๊ธฐ ์‹œ์ž‘ํ•  ๋•Œ์˜ ์ƒํ™ฉ์— ๋Œ€ํ•ด ๋…ผ์˜ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. foo, bar, baz๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ์„ธ ๊ฐ€์ง€ ์ž„๋ฌด๋Š” ํ•˜๋‚˜์˜ ์—ญํ• ์ž…๋‹ˆ๊นŒ, ์•„๋‹ˆ๋ฉด ์„ธ ๊ฐ€์ง€ ์—ญํ• ์ž…๋‹ˆ๊นŒ? ์งˆ๋ฌธ์„ ์š”์•ฝํ•˜์ž๋ฉด, ์–ด๋Š ์‹œ์ ๋ถ€ํ„ฐ ์—ญํ•  ์ž‘์„ฑ์„ ์‹œ์ž‘ํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? ํƒœ์Šคํฌ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ ์—ญํ•  ์ž‘์„ฑ์˜ ์š”์ ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?... ์—ญํ• ์ด๋ž€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

๊ฐ€์žฅ ํฐ ์‹ค์ˆ˜ ์ค‘ ํ•˜๋‚˜(์ด์— ๋Œ€ํ•ด์„œ๋Š” ์ด๋ฏธ ์ด์•ผ๊ธฐํ–ˆ์Šต๋‹ˆ๋‹ค)๋Š” ์—ญํ• ์„ ํ”„๋กœ๊ทธ๋žจ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ํ•จ์ˆ˜์™€ ๊ฐ™๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์ธ ํ•จ์ˆ˜ ์„ค๋ช…์€ ์–ด๋–ค ๋ชจ์Šต์ธ๊ฐ€์š”? ์ž…๋ ฅ ์ธ์ˆ˜๋ฅผ ๋ฐ›์•„๋“ค์ด๊ณ , ๋ถ€์ž‘์šฉ๊ณผ ์ƒํ˜ธ ์ž‘์šฉํ•˜๊ณ , ๋ถ€์ž‘์šฉ์„ ์ˆ˜ํ–‰ํ•˜๊ณ , ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

์ž, ์ฃผ๋ชฉํ•˜์„ธ์š”. ์ด ์—ญํ• ์—์„œ ๋ฌด์—‡์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ๋ถ€์ž‘์šฉ์„ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ์€ ์–ธ์ œ๋“ ์ง€ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ์ „์ฒด Ansible์˜ ๋ณธ์งˆ์ž…๋‹ˆ๋‹ค. ์ฆ‰, ๋ถ€์ž‘์šฉ์„ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ถ€์ž‘์šฉ์ด ์žˆ์Šต๋‹ˆ๊นŒ? ์ดˆ๋“ฑํ•™๊ต. ๊ทธ๋Ÿฌ๋‚˜ "๊ฐ’์„ ์ „๋‹ฌํ•˜๊ณ  ๋ฐ˜ํ™˜ํ•˜๋Š”" ๋ฐฉ๋ฒ•์€ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ฒซ์งธ, ์—ญํ• ์— ๊ฐ’์„ ์ „๋‹ฌํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์—ญํ• ์˜ vars ์„น์…˜์—์„œ ํ”Œ๋ ˆ์ด์˜ ์ˆ˜๋ช… ํฌ๊ธฐ๋ฅผ ํฌํ•จํ•œ ์ „์—ญ ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์—ญํ•  ๋‚ด์—์„œ ์ˆ˜๋ช…์ด ๋‹คํ•œ ์ „์—ญ ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜๋Š” ํ”Œ๋ ˆ์ด๋ถ์˜ ์ˆ˜๋ช…์ด ๋‹คํ•˜๋”๋ผ๋„(set_fact/register). ๊ทธ๋Ÿฌ๋‚˜ "์ง€์—ญ ๋ณ€์ˆ˜"๋Š” ๊ฐ€์งˆ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. "๊ฐ’์„ ๊ฐ€์ ธ์˜ค๊ณ " "๋ฐ˜ํ™˜"ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๊ฐ€์žฅ ์ค‘์š”ํ•œ ์ ์€ ๋ถ€์ž‘์šฉ์„ ์ผ์œผํ‚ค์ง€ ์•Š๊ณ  Ansible์—์„œ ๋ฌด์–ธ๊ฐ€๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ „์—ญ ๋ณ€์ˆ˜๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์€ ํ•ญ์ƒ ํ•จ์ˆ˜์˜ ๋ถ€์ž‘์šฉ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด Rust์—์„œ ์ „์—ญ ๋ณ€์ˆ˜๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. unsafe. ๊ทธ๋ฆฌ๊ณ  Ansible์—์„œ๋Š” ์—ญํ• ์˜ ๊ฐ€์น˜์— ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š” ์œ ์ผํ•œ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ๋œ ๋‹จ์–ด์— ์ฃผ๋ชฉํ•˜์„ธ์š”: "์—ญํ• ์— ๊ฐ’์„ ์ „๋‹ฌ"ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ "์—ญํ• ์ด ์‚ฌ์šฉํ•˜๋Š” ๊ฐ’์„ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค". ์—ญํ•  ๊ฐ„์—๋Š” ๋ถ„๋ฆฌ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์ž‘์—…๊ณผ ์—ญํ•  ์‚ฌ์ด์—๋Š” ๋ถ„๋ฆฌ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

์ด๊ณ„ : ์—ญํ• ์€ ๊ธฐ๋Šฅ์ด ์•„๋‹ˆ๋‹ค.

์—ญํ• ์˜ ์–ด๋–ค ์ ์ด ์ข‹์€๊ฐ€์š”? ๋จผ์ €, ์—ญํ• ์—๋Š” ๊ธฐ๋ณธ๊ฐ’์ด ์žˆ์Šต๋‹ˆ๋‹ค./default/main.yaml), ๋‘˜์งธ, ์—ญํ• ์—๋Š” ํŒŒ์ผ์„ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•œ ์ถ”๊ฐ€ ๋””๋ ‰ํ„ฐ๋ฆฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ธฐ๋ณธ๊ฐ’์˜ ์ด์ ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? Ansible์˜ ๋‹ค์†Œ ์™œ๊ณก๋œ ๊ฐ€๋ณ€ ์šฐ์„ ์ˆœ์œ„ ํ…Œ์ด๋ธ”์ธ Maslow์˜ ํ”ผ๋ผ๋ฏธ๋“œ์—์„œ๋Š” ์—ญํ•  ๊ธฐ๋ณธ๊ฐ’์ด ๊ฐ€์žฅ ๋‚ฎ์€ ์šฐ์„ ์ˆœ์œ„(Ansible ๋ช…๋ น์ค„ ๋งค๊ฐœ๋ณ€์ˆ˜ ์ œ์™ธ)์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์ฆ‰, ๊ธฐ๋ณธ๊ฐ’์„ ์ œ๊ณตํ•ด์•ผ ํ•˜๊ณ  ๊ธฐ๋ณธ๊ฐ’์ด ์ธ๋ฒคํ† ๋ฆฌ ๋˜๋Š” ๊ทธ๋ฃน ๋ณ€์ˆ˜์˜ ๊ฐ’์„ ์žฌ์ •์˜ํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ๊ฑฑ์ •ํ•˜์ง€ ์•Š์œผ๋ ค๋ฉด ์—ญํ•  ๊ธฐ๋ณธ๊ฐ’์ด ์œ ์ผํ•˜๊ฒŒ ์ ํ•ฉํ•œ ์œ„์น˜์ž„์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. (์กฐ๊ธˆ ๊ฑฐ์ง“๋งํ•˜๊ณ  ์žˆ์–ด์š”. ๋” ์žˆ์–ด์š” |d(your_default_here), ๊ทธ๋Ÿฌ๋‚˜ ๊ณ ์ •๋œ ์žฅ์†Œ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๋ฉด ์—ญํ•  ๊ธฐ๋ณธ๊ฐ’๋งŒ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค).

์—ญํ• ์˜ ๋˜ ๋‹ค๋ฅธ ์žฅ์ ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ์™œ๋ƒํ•˜๋ฉด ๊ทธ๋“ค์€ ์ž์‹ ์˜ ์นดํƒˆ๋กœ๊ทธ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์ด๋Š” ์ƒ์ˆ˜(์˜ˆ: ์—ญํ• ์— ๋Œ€ํ•ด ๊ณ„์‚ฐ๋จ) ๋ฐ ๋™์ (ํŒจํ„ด ๋˜๋Š” ์•ˆํ‹ฐํŒจํ„ด์ด ์žˆ์Œ) ๋ณ€์ˆ˜์— ๋Œ€ํ•œ ๋””๋ ‰ํ† ๋ฆฌ์ž…๋‹ˆ๋‹ค. include_vars ํ•จ๊ป˜ {{ ansible_distribution }}-{{ ansible_distribution_major_version }}.yml.). ๋‹ค์Œ์€ ๋””๋ ‰ํ† ๋ฆฌ์ž…๋‹ˆ๋‹ค. files/, templates/. ๋˜ํ•œ, ์ž์‹ ๋งŒ์˜ ๋ชจ๋“ˆ๊ณผ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(library/). ๊ทธ๋Ÿฌ๋‚˜ ํ”Œ๋ ˆ์ด๋ถ์˜ ์ž‘์—…(์ด ๋ชจ๋“  ๊ฒƒ์„ ํฌํ•จํ•  ์ˆ˜๋„ ์žˆ์Œ)๊ณผ ๋น„๊ตํ•  ๋•Œ ์—ฌ๊ธฐ์„œ ์œ ์ผํ•œ ์ด์ ์€ ํŒŒ์ผ์ด ํ•˜๋‚˜์˜ ๋”๋ฏธ์— ๋คํ”„๋˜์ง€ ์•Š๊ณ  ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ณ„๋„ ๋”๋ฏธ์— ๋คํ”„๋œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํ•œ ๊ฐ€์ง€ ๋” ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๊ฐค๋Ÿญ์‹œ๋ฅผ ํ†ตํ•ด ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์—ญํ• ์„ ์ƒ์„ฑํ•ด ๋ณผ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ปฌ๋ ‰์…˜์˜ ์ถœํ˜„์œผ๋กœ ์—ญํ•  ๋ถ„๋ฐฐ๋Š” ๊ฑฐ์˜ ์žŠํ˜€์ง„ ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ์—ญํ• ์—๋Š” ๋‘ ๊ฐ€์ง€ ์ค‘์š”ํ•œ ๊ธฐ๋Šฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ๊ธฐ๋ณธ๊ฐ’(๊ณ ์œ ํ•œ ๊ธฐ๋Šฅ)์ด ์žˆ๊ณ  ์ฝ”๋“œ๋ฅผ ๊ตฌ์กฐํ™”ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค.

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

import_role์„ ์ž‘์—…์œผ๋กœ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ๋„ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, ์ด ๊ธ€์„ ์“ด๋‹ค๋ฉด ์™œ ์ด ์ผ์„ ํ•˜๊ณ  ์‹ถ์€์ง€ ์ž์‹ ์˜ ๋ฏธ์˜์‹์— ์„ค๋ช…ํ•  ์ค€๋น„๋ฅผ ํ•˜์„ธ์š”.

๊ธฐ๋ฏผํ•œ ๋…์ž๋Š” ์—ญํ• ์ด ์—ญํ• ์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๊ณ  ์—ญํ• ์ด galaxy.yml์„ ํ†ตํ•ด ์ข…์†์„ฑ์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์œผ๋ฉฐ ๋”์ฐํ•˜๊ณ  ๋”์ฐํ•œ ์ผ๋„ ์žˆ๋‹ค๊ณ  ๋งํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. include_role โ€” ์šฐ๋ฆฌ๋Š” ์ฒด์กฐ๊ฐ€ ์•„๋‹Œ ๊ธฐ๋ณธ์ ์ธ Ansible์˜ ์‹ค๋ ฅ์„ ํ–ฅ์ƒ์‹œํ‚ค๊ณ  ์žˆ์Œ์„ ์ƒ๊ธฐ์‹œ์ผœ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

ํ•ธ๋“ค๋Ÿฌ ๋ฐ ์ž‘์—…

๋˜ ๋‹ค๋ฅธ ๋ถ„๋ช…ํ•œ ์‚ฌ์‹ค์ธ ํ•ธ๋“ค๋Ÿฌ์— ๋Œ€ํ•ด ๋…ผ์˜ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•„๋Š” ๊ฒƒ์€ ๊ฑฐ์˜ ์˜ˆ์ˆ ์ž…๋‹ˆ๋‹ค. ํ•ธ๋“ค๋Ÿฌ์™€ ๋“œ๋ž˜๊ทธ์˜ ์ฐจ์ด์ ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

๊ธฐ๋ณธ ์‚ฌํ•ญ์„ ๊ธฐ์–ตํ•˜๊ณ  ์žˆ์œผ๋ฏ€๋กœ ์˜ˆ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

- hosts: group1
  tasks:
    - foo:
      notify: handler1
  handlers:
     - name: handler1
       bar:

์—ญํ• ์˜ ํ•ธ๋“ค๋Ÿฌ๋Š” rolename/handlers/main.yaml์— ์žˆ์Šต๋‹ˆ๋‹ค. ํ•ธ๋“ค๋Ÿฌ๋Š” ๋ชจ๋“  ํ”Œ๋ ˆ์ด ์ฐธ๊ฐ€์ž ์‚ฌ์ด๋ฅผ ๋’ค์ง‘๋‹ˆ๋‹ค. pre/post_tasks๋Š” ์—ญํ•  ํ•ธ๋“ค๋Ÿฌ๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๊ณ  ์—ญํ• ์€ ํ”Œ๋ ˆ์ด์—์„œ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํ•ธ๋“ค๋Ÿฌ์— ๋Œ€ํ•œ "๊ต์ฐจ ์—ญํ• " ํ˜ธ์ถœ์€ ์‚ฌ์†Œํ•œ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ๋ฐ˜๋ณตํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ํ›จ์”ฌ ๋” ๋งŽ์€ ๋ฌธ์ œ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค. (๋ชจ๋ฒ” ์‚ฌ๋ก€์˜ ๋˜ ๋‹ค๋ฅธ ์š”์†Œ๋Š” ํ•ธ๋“ค๋Ÿฌ ์ด๋ฆ„์„ ๋ฐ˜๋ณตํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.)

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

๊ตฌ์„ฑ ์ƒํ™ฉ์€ ํ•ด๊ฒฐ๋  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค(๋ณด๋‹ค ์ •ํ™•ํ•˜๊ฒŒ๋Š” ํŒŒ์ผ ํ”Œ๋ž˜๊ทธ ๋“ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ ํŠน๋ณ„ํ•œ ์žฌ์‹œ์ž‘ ํ”„๋กœํ† ์ฝœ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์ง€๋งŒ ์ด๋Š” ๋” ์ด์ƒ ์–ด๋–ค ํ˜•ํƒœ๋กœ๋“  '๊ธฐ๋ณธ ์•ค์„œ๋ธ”'์ด ์•„๋‹™๋‹ˆ๋‹ค). ํ•˜์ง€๋งŒ ๋˜ ๋‹ค๋ฅธ ์ผ๋ฐ˜์ ์ธ ์ด์•ผ๊ธฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์„ค์น˜ํ•˜๊ณ  ๊ธฐ๋กํ–ˆ์Šต๋‹ˆ๋‹ค. .service-file, ์ด์ œ ์šฐ๋ฆฌ๋Š” ๊ทธ๊ฒƒ์„ ์›ํ•ฉ๋‹ˆ๋‹ค daemon_reload ะธ state=started. ๊ทธ๋ฆฌ๊ณ  ์ด์— ๋Œ€ํ•œ ์ž์—ฐ์Šค๋Ÿฌ์šด ์žฅ์†Œ๋Š” ํ•ธ๋“ค๋Ÿฌ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํ•ธ๋“ค๋Ÿฌ๊ฐ€ ์•„๋‹ˆ๋ผ ์ž‘์—… ๋ชฉ๋ก์ด๋‚˜ ์—ญํ• ์˜ ๋์— ์ž‘์—…์œผ๋กœ ๋งŒ๋“ค๋ฉด ๋งค๋ฒˆ ๋ฉฑ๋“ฑ์ ์œผ๋กœ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ํ”Œ๋ ˆ์ด๋ถ์ด ์ค‘๊ฐ„์— ๊นจ์กŒ๋”๋ผ๋„ ๋ง์ด์ฃ . ์ด๊ฒƒ์€ ๋‹ค์‹œ ์‹œ์ž‘๋œ ๋ฌธ์ œ๋ฅผ ์ „ํ˜€ ํ•ด๊ฒฐํ•˜์ง€ ๋ชปํ•˜์ง€๋งŒ(๋ฉฑ๋“ฑ์„ฑ์ด ์†์‹ค๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค์‹œ ์‹œ์ž‘ ์†์„ฑ์œผ๋กœ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค), ํ™•์‹คํžˆ state=started๋ฅผ ์ˆ˜ํ–‰ํ•  ๊ฐ€์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ํ”Œ๋ ˆ์ด๋ถ์˜ ์ „๋ฐ˜์ ์ธ ์•ˆ์ •์„ฑ์ด ์ฆ๊ฐ€ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์—ฐ๊ฒฐ ์ˆ˜์™€ ๋™์  ์ƒํƒœ๊ฐ€ ๊ฐ์†Œํ•ฉ๋‹ˆ๋‹ค.

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

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

... ๋”ฐ๋ผ์„œ ํ•ธ๋“ค๋Ÿฌ๋Š” ๋ณด์ด๋Š” ๊ฒƒ๋ณด๋‹ค ํ›จ์”ฌ ๋œ ์œ ์šฉํ•˜๊ณ  ํ›จ์”ฌ ๋” ๋ฌธ์ œ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค. ํ•ธ๋“ค๋Ÿฌ ์—†์ด๋„(์žฅ์‹ ์—†์ด) ์•„๋ฆ„๋‹ต๊ฒŒ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ํ•ธ๋“ค๋Ÿฌ ์—†์ด ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์ด ๋” ์ข‹์Šต๋‹ˆ๋‹ค. ์•„๋ฆ„๋‹ต๊ฒŒ ํ’€๋ฆฌ์ง€ ์•Š๋Š”๋‹ค๋ฉด ๊ทธ๋“ค๊ณผ ํ•จ๊ป˜ํ•˜๋Š” ๊ฒƒ์ด ๋” ์ข‹์Šต๋‹ˆ๋‹ค.

๋ถ€์‹์„ฑ ๋…์ž๋Š” ์šฐ๋ฆฌ๊ฐ€ ๋…ผ์˜ํ•˜์ง€ ์•Š์•˜๋‹ค๋Š” ์ ์„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ง€์ ํ•ฉ๋‹ˆ๋‹ค. listenํ•ธ๋“ค๋Ÿฌ๋Š” ๋‹ค๋ฅธ ํ•ธ๋“ค๋Ÿฌ์— ๋Œ€ํ•ด ์•Œ๋ฆผ์„ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๊ณ , ํ•ธ๋“ค๋Ÿฌ๋Š” import_tasks(with_items๋กœ include_role์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Œ)๋ฅผ ํฌํ•จํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, Ansible์˜ ํ•ธ๋“ค๋Ÿฌ ์‹œ์Šคํ…œ์€ Turing-complete์ด๊ณ , include_role์˜ ํ•ธ๋“ค๋Ÿฌ๋Š” ํ”Œ๋ ˆ์ด์˜ ํ•ธ๋“ค๋Ÿฌ์™€ ํฅ๋ฏธ๋กœ์šด ๋ฐฉ์‹์œผ๋กœ ๊ต์ฐจํ•ฉ๋‹ˆ๋‹ค. ๋“ฑ๋“ฑ. .d. -์ด ๋ชจ๋“  ๊ฒƒ์ด ๋ถ„๋ช…ํžˆ "๊ธฐ๋ณธ"์ด ์•„๋‹™๋‹ˆ๋‹ค).

์‹ค์ œ๋กœ ๋ช…์‹ฌํ•ด์•ผ ํ•  ๊ธฐ๋Šฅ์ธ ํŠน์ • WTF๊ฐ€ ํ•˜๋‚˜ ์žˆ์ง€๋งŒ. ์ž‘์—…์ด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์‹คํ–‰๋˜๋Š” ๊ฒฝ์šฐ delegate_to ํ†ต์ง€๊ฐ€ ์žˆ์œผ๋ฉด ํ•ด๋‹น ํ•ธ๋“ค๋Ÿฌ๊ฐ€ ์—†์ด ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. delegate_to, ์ฆ‰. ํ”Œ๋ ˆ์ด๊ฐ€ ํ• ๋‹น๋œ ํ˜ธ์ŠคํŠธ์—์„œ. (๋ฌผ๋ก  ํ•ธ๋“ค๋Ÿฌ๊ฐ€ delegate_to ๊ฐ™์€).

์ด์™€ ๋ณ„๋„๋กœ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์—ญํ• ์— ๋Œ€ํ•ด ๋ช‡ ๋งˆ๋”” ๋ง์”€๋“œ๋ฆฌ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์ปฌ๋ ‰์…˜์ด ๋“ฑ์žฅํ•˜๊ธฐ ์ „์—๋Š” ๋ณดํŽธ์ ์ธ ์—ญํ• ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค๋Š” ์ƒ๊ฐ์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ansible-galaxy install ๊ทธ๋ฆฌ๊ณ  ๊ฐ”๋‹ค. ๋ชจ๋“  ์ƒํ™ฉ์—์„œ ๋ชจ๋“  ๋ณ€ํ˜•์˜ ๋ชจ๋“  OS์—์„œ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ œ ์ƒ๊ฐ์—๋Š” ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์งˆ๋Ÿ‰์ด ์žˆ๋Š” ๋ชจ๋“  ์—ญํ•  include_vars, 100500๊ฐœ์˜ ์ผ€์ด์Šค๋ฅผ ์ง€์›ํ•˜๋Š” ๊ฒƒ์€ ์ฝ”๋„ˆ ์ผ€์ด์Šค ๋ฒ„๊ทธ์˜ ์‹ฌ์—ฐ์— ์ฒ˜ํ•ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋Œ€๊ทœ๋ชจ ํ…Œ์ŠคํŠธ๋กœ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ์ง€๋งŒ ๋ชจ๋“  ํ…Œ์ŠคํŠธ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ž…๋ ฅ ๊ฐ’๊ณผ ์ „์ฒด ํ•จ์ˆ˜์˜ ๋ฐ์นด๋ฅดํŠธ ๊ณฑ์ด ์žˆ๊ฑฐ๋‚˜ "๊ฐœ๋ณ„ ์‹œ๋‚˜๋ฆฌ์˜ค๊ฐ€ ํฌํ•จ"๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚ด ์˜๊ฒฌ์€ ์—ญํ• ์ด ์„ ํ˜•(์ˆœํ™˜์  ๋ณต์žก์„ฑ 1)์ด๋ฉด ํ›จ์”ฌ ๋” ๋‚ซ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ ์€ ์ˆ˜์˜ if(๋ช…์‹œ์  ๋˜๋Š” ์„ ์–ธ์  - ํ˜•์‹) when ๋˜๋Š” ์–‘์‹ include_vars ๋ณ€์ˆ˜ ์„ธํŠธ์— ๋”ฐ๋ผ) ์—ญํ• ์ด ๋” ์ข‹์Šต๋‹ˆ๋‹ค. ๋•Œ๋กœ๋Š” ๊ฐ€์ง€๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•  ๋•Œ๋„ ์žˆ์ง€๋งŒ ๋ฐ˜๋ณตํ•ด์„œ ๋งํ•˜์ง€๋งŒ ๊ฐ€์ง€๊ฐ€ ์ ์„์ˆ˜๋ก ์ข‹์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์€ํ•˜๊ณ„์—์„œ๋Š” ์ข‹์€ ์—ญํ• ์ธ ๊ฒƒ ๊ฐ™์•„์š”. (์ž‘๋™ํ•ด์š”!) when ๋‹ค์„ฏ ๊ฐ€์ง€ ๊ณผ์ œ ์ค‘ '์ž์‹ ์˜' ์—ญํ• ๋ณด๋‹ค ๋œ ์„ ํ˜ธ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐค๋Ÿญ์‹œ์™€์˜ ์—ญํ• ์ด ๋” ์ข‹์•„์ง€๋Š” ์ˆœ๊ฐ„์€ ๋ญ”๊ฐ€๋ฅผ ์“ฐ๊ธฐ ์‹œ์ž‘ํ•  ๋•Œ๋‹ค. ์ƒํ™ฉ์ด ๋” ์•…ํ™”๋˜๋Š” ์ˆœ๊ฐ„์€ ๋ฌด์—‡์ธ๊ฐ€๊ฐ€ ๊นจ์ง€๋Š” ์ˆœ๊ฐ„, '์€ํ•˜์™€์˜ ์—ญํ• ' ๋•Œ๋ฌธ์ด๋ผ๋Š” ์˜์‹ฌ์ด ๋“ค ๋•Œ๋‹ค. ์—ด์–ด๋ณด๋ฉด XNUMX๊ฐœ์˜ ํฌํ•จ์‚ฌํ•ญ, XNUMX๊ฐœ์˜ ์ž‘์—… ์‹œํŠธ ๋ฐ ์Šคํƒ์ด ์žˆ์Šต๋‹ˆ๋‹ค. when'ov... ๊ทธ๋ฆฌ๊ณ  ์šฐ๋ฆฌ๋Š” ์ด๊ฒƒ์„ ์•Œ์•„๋‚ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. 5๊ฐœ์˜ ์ž‘์—… ๋Œ€์‹  ๊นจ๋œจ๋ฆด ๊ฒƒ์ด ์—†๋Š” ์„ ํ˜• ๋ชฉ๋ก์ž…๋‹ˆ๋‹ค.

๋‹ค์Œ ๋ถ€๋ถ„์—์„œ

  • ์ธ๋ฒคํ† ๋ฆฌ, ๊ทธ๋ฃน ๋ณ€์ˆ˜, Host_group_vars ํ”Œ๋Ÿฌ๊ทธ์ธ, Hostvars์— ๋Œ€ํ•ด ์กฐ๊ธˆ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. ๊ณ ๋ฅด๋””์šฐ์Šค ๋งค๋“ญ์„ ์ŠคํŒŒ๊ฒŒํ‹ฐ๋กœ ๋ฌถ๋Š” ๋ฐฉ๋ฒ•. ๋ฒ”์œ„ ๋ฐ ์šฐ์„ ์ˆœ์œ„ ๋ณ€์ˆ˜, Ansible ๋ฉ”๋ชจ๋ฆฌ ๋ชจ๋ธ. "๊ทธ๋Ÿผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์‚ฌ์šฉ์ž ์ด๋ฆ„์€ ์–ด๋””์— ์ €์žฅํ•˜๋‚˜์š”?"
  • jinja: {{ jinja }} โ€” nosql notype nosense ๋ถ€๋“œ๋Ÿฌ์šด ํ”Œ๋ผ์Šคํ‹ฑ. ๊ทธ๊ฒƒ์€ ์–ด๋””์—๋‚˜ ์žˆ๊ณ , ์‹ฌ์ง€์–ด ๋‹น์‹ ์ด ๊ธฐ๋Œ€ํ•˜์ง€ ์•Š๋Š” ๊ณณ์—๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์กฐ๊ธˆ !!unsafe ๊ทธ๋ฆฌ๊ณ  ๋ง›์žˆ๋Š” ์–Œ.

์ถœ์ฒ˜ : habr.com

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