์ ๊ทผ IAC (์ฝ๋๋ก์์ ์ธํ๋ผ)๋ ์ ์ฅ์์ ์ ์ฅ๋ ์ฝ๋๋ฟ๋ง ์๋๋ผ ์ด ์ฝ๋๋ฅผ ๋๋ฌ์ผ ์ฌ๋๊ณผ ํ๋ก์ธ์ค๋ก ๊ตฌ์ฑ๋ฉ๋๋ค. ์ํํธ์จ์ด ๊ฐ๋ฐ๋ถํฐ ์ธํ๋ผ ๊ด๋ฆฌ ๋ฐ ์ค๋ช ๊น์ง ์ ๊ทผ ๋ฐฉ์์ ์ฌ์ฌ์ฉํ ์ ์์ต๋๊น? ๊ธ์ ์ฝ์ผ์ค ๋ ์ด ์ ์ ์ผ๋์ ๋์๋ฉด ์ข์ ๊ฒ ๊ฐ์ต๋๋ค.
์ด๊ฑด ๋ด ๋
น์ทจ๋ก์ด์ผ
์ฌ๋ผ์ด๋ ๋ฐ ๋น๋์ค
Angielski ๋ฒ์ ๋ฌ์์์ด ๋ฒ์ - ํ
์คํธ ์คํ 2019-04-24
SpbLUG DevopsConf์ ๋น๋์ค(RU) 2019-05-28 DINS DevOps EVENING์ ๋น๋์ค(RU) 2019-06-20 ์ฌ๋ผ์ด๋
Bash ๊ธฐ๋ก์ผ๋ก์์ ์ธํ๋ผ
๋น์ ์ด ์๋ก์ด ํ๋ก์ ํธ์ ์ฐธ์ฌํ๋๋ฐ ๊ทธ๋ค์ด ๋น์ ์๊ฒ ์ด๋ ๊ฒ ๋งํ๋ค๊ณ ๊ฐ์ ํด ๋ณด์ธ์. ์ฝ๋๋ก์์ ์ธํ๋ผ". ์ค์ ๋ก๋ ๋ฐํ์ก์ต๋๋ค Bash ๊ธฐ๋ก์ผ๋ก์์ ์ธํ๋ผ ๋๋ ์๋ฅผ ๋ค์ด Bash ๊ธฐ๋ก์ผ๋ก ๋ฌธ์ํ. ์ด๊ฒ์ ๋งค์ฐ ์ค์ ์ ์ธ ์ํฉ์
๋๋ค. ์๋ฅผ ๋ค์ด Denis Lysenko๊ฐ ์ฐ์ค์์ ์ ์ฌํ ์ฌ๋ก๋ฅผ ์ค๋ช
ํ์ต๋๋ค.
์ฝ๊ฐ์ ์๋ง์ผ๋ก ์ฐ๋ฆฌ๋ ๋ค์๊ณผ ๊ฐ์ด ๋งํ ์ ์์ต๋๋ค. Bash ๊ธฐ๋ก์ผ๋ก์์ ์ธํ๋ผ ์ด๊ฒ์ ์ฝ๋์ ๊ฐ์ต๋๋ค:
- ์ฌํ์ฑ: bash ๊ธฐ๋ก์ ๊ฐ์ ธ์ ๊ฑฐ๊ธฐ์์ ๋ช ๋ น์ ์คํํ๋ฉด ์์ ๊ตฌ์ฑ์ ์ถ๋ ฅ์ผ๋ก ์ป์ ์ ์์ต๋๋ค.
- ๋ฒ์ ๊ด๋ฆฌ: ๋๊ฐ ๋ค์ด์๊ณ ๋ฌด์์ ํ๋์ง ์ ์ ์์ต๋๋ค. ์ด๊ฒ์ด ์ถ๊ตฌ์์ ์์ ๊ตฌ์ฑ์ผ๋ก ์ฐ๊ฒฐ๋๋ค๋ ๊ฒ์ ์ฌ์ค์ด ์๋๋๋ค.
- ์ญ์ฌ: ๋๊ฐ ๋ฌด์์ ํ๋์ง์ ๋ํ ์ด์ผ๊ธฐ. ์๋ฒ๋ฅผ ์์ผ๋ฉด ์ฌ์ฉํ ์ ์์ต๋๋ค.
๋ฌด์์ํด์ผ ํ๋๊ฐ?
์ฝ๋๋ก์์ ์ธํ๋ผ
์ด๋ฐ ์ด์ํ ๊ฒฝ์ฐ์๋ Bash ๊ธฐ๋ก์ผ๋ก์์ ์ธํ๋ผ ๊ท๋ก ์ก์๋น๊ธธ ์ ์์ด์ ์ฝ๋๋ก์์ ์ธํ๋ผ, ๊ทธ๋ฌ๋ ์ค๋๋ LAMP ์๋ฒ๋ณด๋ค ๋ ๋ณต์กํ ์์ ์ ์ํํ๋ ค๋ฉด ์ด ์ฝ๋๋ฅผ ์ด๋ป๊ฒ๋ ์์ , ๋ณ๊ฒฝ, ๊ฐ์ ํด์ผ ํ๋ค๋ ๊ฒฐ๋ก ์ ๋๋ฌํ๊ฒ ๋ฉ๋๋ค. ๋ค์์ผ๋ก ์ฐ๋ฆฌ๋ ์ฌ์ด์ ์ ์ฌ์ ์ ๊ณ ๋ คํ๊ณ ์ถ์ต๋๋ค. ์ฝ๋๋ก์์ ์ธํ๋ผ ์ํํธ์จ์ด ๊ฐ๋ฐ.
๋ง๋ฅธ
์คํ ๋ฆฌ์ง ์์คํ
๊ฐ๋ฐ ํ๋ก์ ํธ์ ํ์ ์์
์ด ์์์ต๋๋ค.
- SSH๋ฅผ ํตํด ์ฌ๊ธฐ์ ๋ก๊ทธ์ธํ๊ณ ๋ช ๋ น์ ์คํํ์ญ์์ค.
- ๊ฑฐ๊ธฐ์ ํ์ผ์ ๋ณต์ฌํ์ธ์.
- ์ฌ๊ธฐ์์ ๊ตฌ์ฑ์ ์์ ํ์ธ์.
- ๊ฑฐ๊ธฐ์ ์๋น์ค ์์ํด
- ...
- ์ด์ต!
์ค๋ช
๋ ๋
ผ๋ฆฌ์ ๊ฒฝ์ฐ, ํนํ ํ๋ก์ ํธ๊ฐ ๋ง ์์๋๋ ์ด๊ธฐ ๋จ๊ณ์์๋ bash๋ง์ผ๋ก๋ ์ถฉ๋ถํฉ๋๋ค. ์ด๊ฒ
DRY(Do not Repeat Yourself)์ ๊ฐ์ ๊ดํ์ด ์๋ค๋ ๊ฒ์ด ๋ฐํ์ก์ต๋๋ค. ์์ด๋์ด๋ ๊ธฐ์กด ์ฝ๋๋ฅผ ์ฌ์ฌ์ฉํ๋ ๊ฒ์ ๋๋ค. ๊ฐ๋จํด ๋ณด์ด์ง๋ง ์ฐ๋ฆฌ๋ ์ด ๋ฌธ์ ๋ฅผ ๋ฐ๋ก ํด๊ฒฐํ์ง๋ ์์์ต๋๋ค. ์ฐ๋ฆฌ์ ๊ฒฝ์ฐ ๊ตฌ์ฑ์ ์คํฌ๋ฆฝํธ์์ ๋ถ๋ฆฌํ๋ ๊ฒ์ ์ง๋ถํ ์์ด๋์ด์์ต๋๋ค. ์ ๊ฒ๋ค. ์ค์น๊ฐ ๋ณ๋๋ก ๋ฐฐํฌ๋๋ ๋ฐฉ๋ฒ์ ๋ํ ๋น์ฆ๋์ค ๋ ผ๋ฆฌ, ๋ณ๋๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.
CFM์ฉ ์๋ฆฌ๋
์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ ํ๋ก์ ํธ๊ฐ ์ฑ์ฅํ๊ณ
๋จ์ผ ์ฑ ์ ์์น
๊ฐ ํด๋์ค๋ ํ๋์ ์์ ๋ง ์ํํฉ๋๋ค.
์ฝ๋๋ฅผ ์์ด์ ํ๋์ ์ ์ฑํ ์คํ๊ฒํฐ ๊ดด๋ฌผ์ ๋ง๋ค ํ์๊ฐ ์์ต๋๋ค. ์ธํ๋ผ๋ ๋จ์ํ ๋ฒฝ๋๋ก ๊ตฌ์ฑ๋์ด์ผ ํฉ๋๋ค. Ansible ํ๋ ์ด๋ถ์ ์์ ์กฐ๊ฐ์ผ๋ก ๋๋๊ณ Ansible ์ญํ ์ ์ฝ์ผ๋ฉด ์ ์ง ๊ด๋ฆฌ๊ฐ ๋ ์ฌ์์ง๋๋ค.
๊ฐ๋ฐฉํ ํ์ ์์น
๊ฐ๋ฐฉ/ํ์ ์์น.
- ํ์ฅ ๊ฐ๋ฅ: ์๋ก์ด ์ํฐํฐ ์ ํ์ ์์ฑํ์ฌ ์ํฐํฐ์ ๋์์ ํ์ฅํ ์ ์์์ ์๋ฏธํฉ๋๋ค.
- ๋ณ๊ฒฝ ํ์: ์ํฐํฐ์ ๋์์ ํ์ฅํ ๊ฒฐ๊ณผ ํด๋น ์ํฐํฐ๋ฅผ ์ฌ์ฉํ๋ ์ฝ๋๋ฅผ ๋ณ๊ฒฝํด์๋ ์ ๋ฉ๋๋ค.
์ฒ์์๋ ํ ์คํธ ์ธํ๋ผ๋ฅผ ๊ฐ์ ๋จธ์ ์ ๋ฐฐํฌํ์ง๋ง ๋ฐฐํฌ์ ๋น์ฆ๋์ค ๋ก์ง์ด ๊ตฌํ๊ณผ ๋ถ๋ฆฌ๋์ด ์์๊ธฐ ๋๋ฌธ์ ๋ฌธ์ ์์ด ๋ฒ ์ด๋ฉํ๋ก ๋กค์์์ ์ถ๊ฐํ์ต๋๋ค.
๋ฆฌ์ค์ฝํ ๋์ฒด ์์น
๋ฐ๋ฐ๋ผ ๋ฆฌ์ค์ฝํ์ ๋์ฒด ์๋ฆฌ. ํ๋ก๊ทธ๋จ์ ๊ฐ์ฒด๋ ํ๋ก๊ทธ๋จ์ ์ฌ๋ฐ๋ฅธ ์คํ์ ๋ณ๊ฒฝํ์ง ์๊ณ ๋ ํด๋น ํ์ ์ ํ์ ์ธ์คํด์ค๋ก ๋์ฒด ๊ฐ๋ฅํด์ผ ํฉ๋๋ค.
์ข ๋ ๋๊ฒ ๋ณด๋ฉด ๊ฑฐ๊ธฐ์ ์ ์ฉํ ์ ์๋ ํน์ ํ๋ก์ ํธ์ ํน์ง์ ์๋๋ค. ๋จ๋จํ, ์ด๋ ์ผ๋ฐ์ ์ผ๋ก CFM์ ๊ดํ ๊ฒ์ ๋๋ค. ์๋ฅผ ๋ค์ด ๋ค๋ฅธ ํ๋ก์ ํธ์์๋ ๋ค์ํ Java, ์ ํ๋ฆฌ์ผ์ด์ ์๋ฒ, ๋ฐ์ดํฐ๋ฒ ์ด์ค, OS ๋ฑ ์์ ๋ฐ์คํ Java ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐฐํฌํด์ผ ํฉ๋๋ค. ์ด ์๋ฅผ ์ฌ์ฉํ์ฌ ์ถ๊ฐ ์์น์ ๊ณ ๋ คํ๊ฒ ์ต๋๋ค. ๋จ๋จํ
์ฐ๋ฆฌ์ ๊ฒฝ์ฐ ์ธํ๋ผ ํ ๋ด์์๋ imbjava ๋๋ oraclejava ์ญํ ์ ์ค์นํ ๊ฒฝ์ฐ Java ๋ฐ์ด๋๋ฆฌ ์คํ ํ์ผ์ ๊ฐ๊ฒ ๋๋ค๋ ํฉ์๊ฐ ์์ต๋๋ค. ์ด๊ฒ์ด ํ์ํ ์ด์ ๋ ์ ์คํธ๋ฆผ ์ญํ ์ ์ด ๋์์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋ฉฐ java๋ฅผ ๊ธฐ๋ํฉ๋๋ค. ๋์์ ์ด๋ฅผ ํตํด ์ ํ๋ฆฌ์ผ์ด์ ๋ฐฐํฌ ๋ก์ง์ ๋ณ๊ฒฝํ์ง ์๊ณ ๋ ํ๋์ Java ๊ตฌํ/๋ฒ์ ์ ๋ค๋ฅธ Java ๊ตฌํ/๋ฒ์ ์ผ๋ก ๊ต์ฒดํ ์ ์์ต๋๋ค.
์ฌ๊ธฐ์ ๋ฌธ์ ๋ ์ด๋ฅผ Ansible์์ ๊ตฌํํ๋ ๊ฒ์ด ๋ถ๊ฐ๋ฅํ๋ฉฐ ๊ทธ ๊ฒฐ๊ณผ ํ ๋ด์ ์ผ๋ถ ํฉ์๊ฐ ๋ํ๋๋ค๋ ์ฌ์ค์ ์์ต๋๋ค.
์ธํฐํ์ด์ค ๋ถ๋ฆฌ ์์น
์ธํฐํ์ด์ค ๋ถ๋ฆฌ ์์น: โ์ฌ๋ฌ ๊ฐ์ ํด๋ผ์ด์ธํธ๋ณ ์ธํฐํ์ด์ค๊ฐ ํ๋์ ๋ฒ์ฉ ์ธํฐํ์ด์ค๋ณด๋ค ๋ซ์ต๋๋ค.
์ฒ์์๋ ์ ํ๋ฆฌ์ผ์ด์ ๋ฐฐํฌ์ ๋ชจ๋ ๊ฐ๋ณ์ฑ์ ํ๋์ Ansible ํ๋ ์ด๋ถ์ ๋ฃ์ผ๋ ค๊ณ ํ์ง๋ง ์ง์ํ๊ธฐ๊ฐ ์ด๋ ค์ ๊ณ ์ธ๋ถ ์ธํฐํ์ด์ค๊ฐ ์ง์ ๋ ๊ฒฝ์ฐ(ํด๋ผ์ด์ธํธ๊ฐ ํฌํธ 443์ ๊ธฐ๋ํจ) ์ ๊ทผ ๋ฐฉ์์ ์ฌ์ฉํ๋ฉด ๊ฐ๋ณ์ ์ผ๋ก ์ธํ๋ผ๋ฅผ ์กฐ๋ฆฝํ ์ ์์ต๋๋ค. ํน์ ๊ตฌํ์ ์ํ ๋ธ๋ฆญ์ ๋๋ค.
์ข ์์ฑ ๋ฐ์ ์์น
์์กด์ฑ ์ญ์ ์ ์๋ฆฌ. ๋์ ์์ค์ ๋ชจ๋์ ๋ฎ์ ์์ค์ ๋ชจ๋์ ์์กดํด์๋ ์ ๋ฉ๋๋ค. ๋ ๊ฐ์ง ์ ํ์ ๋ชจ๋ ๋ชจ๋ ์ถ์ํ์ ์์กดํด์ผ ํฉ๋๋ค. ์ถ์ํ๋ ์ธ๋ถ์ฌํญ์ ์์กดํด์๋ ์ ๋ฉ๋๋ค. ์ธ๋ถ ์ฌํญ์ ์ถ์ํ์ ๋ฐ๋ผ ๋ฌ๋ผ์ ธ์ผ ํฉ๋๋ค.
์ฌ๊ธฐ์ ์์ ๋ ์ํฐํจํด์ ๊ธฐ๋ฐ์ผ๋ก ํฉ๋๋ค.
- ๊ณ ๊ฐ ์ค ํ ๋ช ์ ํ๋ผ์ด๋น ํด๋ผ์ฐ๋๋ฅผ ๋ณด์ ํ๊ณ ์์์ต๋๋ค.
- ์ฐ๋ฆฌ๋ ํด๋ผ์ฐ๋ ๋ด๋ถ์ ๊ฐ์ ๋จธ์ ์ ์ฃผ๋ฌธํ์ต๋๋ค.
- ๊ทธ๋ฌ๋ ํด๋ผ์ฐ๋์ ํน์ฑ์ผ๋ก ์ธํด ์ ํ๋ฆฌ์ผ์ด์ ๋ฐฐํฌ๋ VM์ด โโ์ด๋ ํ์ดํผ๋ฐ์ด์ ์ ์๋์ง์ ๋ฐ๋ผ ๊ฒฐ์ ๋์์ต๋๋ค.
์ ๊ฒ๋ค. ๋์ ์์ค์ ์ ํ๋ฆฌ์ผ์ด์ ๋ฐฐํฌ ๋ ผ๋ฆฌ๋ ํ์ ์์ค์ ํ์ดํผ๋ฐ์ด์ ์ ๋ํ ์ข ์์ฑ๊ณผ ํจ๊ป ํ๋ฅด๋ฏ๋ก ์ด ๋ ผ๋ฆฌ๋ฅผ ์ฌ์ฌ์ฉํ ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค. ๊ทธ๋ฌ์ง ๋ง.
์ํธ ์์ฉ
์ฝ๋ํ ์ธํ๋ผ๋ ์ฝ๋์ ๊ดํ ๊ฒ๋ฟ๋ง ์๋๋ผ ์ฝ๋์ ์ฌ๋ ๊ฐ์ ๊ด๊ณ, ์ธํ๋ผ ๊ฐ๋ฐ์ ๊ฐ์ ์ํธ ์์ฉ์ ๊ดํ ๊ฒ์ ๋๋ค.
๋ฒ์ค ํฉํฐ
ํ๋ก์ ํธ์ Vasya๊ฐ ์๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค. Vasya๋ ์ธํ๋ผ์ ๋ํ ๋ชจ๋ ๊ฒ์ ์๊ณ ์์ต๋๋ค. Vasya๊ฐ ๊ฐ์๊ธฐ ์ฌ๋ผ์ง๋ฉด ์ด๋ป๊ฒ ๋ ๊น์? ๋ฒ์ค์ ์น์ผ ์๋ ์๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ ๋งค์ฐ ์ค์ ์ ์ธ ์ํฉ์ ๋๋ค. ๋๋ก๋ ๊ทธ๋ฐ ์ผ์ด ๋ฐ์ํฉ๋๋ค. ์ด๋ฐ ์ผ์ด ๋ฐ์ํ๊ณ ์ฝ๋, ๊ตฌ์กฐ, ์๋ ๋ฐฉ์, ๋ชจ์ ๋ฐ ๋น๋ฐ๋ฒํธ์ ๋ํ ์ง์์ด ํ์ ๋ฐฐํฌ๋์ง ์์ผ๋ฉด ์ฌ๋ฌ ๊ฐ์ง ๋ถ์พํ ์ํฉ์ด ๋ฐ์ํ ์ ์์ต๋๋ค. ์ด๋ฌํ ์ํ์ ์ต์ํํ๊ณ ํ ๋ด์์ ์ง์์ ๋ฐฐํฌํ๋ ค๋ฉด ๋ค์ํ ์ ๊ทผ ๋ฐฉ์์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
ํ์ด ๋ฐ๋ธ์ต์ฑ
๊ทธ๋ ์ง ์์์
๋ ๋ค๋ฅธ ํน๋ณํ ๊ฒฝ์ฐ๋ ์ฌ๊ณ ์ ํ์ ๋๋ค. ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ฉด ๋น์ง์์ ๊ด๋ จ์๋ค์ด ๋ชจ์ฌ ํ ๋ช ์ ๋ฆฌ๋๊ฐ ์๋ช ๋์ด ์์ ์ ํ๋ฉด์ ๊ณต์ ํ๊ณ ์๊ฐ์ ํ๋ฆ์ ์ ๋ฌํฉ๋๋ค. ๋ค๋ฅธ ์ฐธ๊ฐ์๋ค์ ๋ฆฌ๋์ ์๊ฐ์ ๋ฐ๋ฅด๊ณ , ์ฝ์์์ ํธ๋ฆญ์ ๊ฐ์ํ๊ณ , ๋ก๊ทธ์์ ํ ์ค๋ ๋์น์ง ์์๋์ง ํ์ธํ๊ณ , ์์คํ ์ ๋ํ ์๋ก์ด ๊ฒ์ ๋ฐฐ์๋๋ค. ์ด ์ ๊ทผ ๋ฐฉ์์ ๋๊ฐ ํจ๊ณผ๊ฐ ์์์ต๋๋ค.
์ฝ๋ ๊ฒํ
์ฃผ๊ด์ ์ผ๋ก๋ ์ฝ๋ ๊ฒํ ๋ฅผ ์ฌ์ฉํ์ฌ ์ธํ๋ผ์ ์๋ ๋ฐฉ์์ ๋ํ ์ง์์ ์ ํํ๋ ๊ฒ์ด ๋ ํจ๊ณผ์ ์ด์์ต๋๋ค.
- ์ธํ๋ผ๋ ์ ์ฅ์์ ์ฝ๋๋ก ์ค๋ช ๋ฉ๋๋ค.
- ๋ณ๊ฒฝ ์ฌํญ์ ๋ณ๋์ ๋ถ๊ธฐ์์ ๋ฐ์ํฉ๋๋ค.
- ๋ณํฉ ์์ฒญ ์ค์ ์ธํ๋ผ์ ๋ณ๊ฒฝ ์ฌํญ ๋ธํ๋ฅผ ๋ณผ ์ ์์ต๋๋ค.
์ฌ๊ธฐ์ ํ์ด๋ผ์ดํธ๋ ์ผ์ ์ ๋ฐ๋ผ ๋ฆฌ๋ทฐ์ด๋ฅผ ํ ๋ช ์ฉ ์ ์ ํ๋ค๋ ๊ฒ์ ๋๋ค. ์ด๋ ์ ๋ ํ๋ฅ ๋ก ์๋ก์ด ๊ธฐ๋ฐ ์์ค๋ก ์ฌ๋ผ๊ฐ ์ ์์ต๋๋ค.
์ฝ๋ ์คํ์ผ
์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ ๋ฆฌ๋ทฐ ์ค์ ๋ง๋คํผ์ด ๋ํ๋๊ธฐ ์์ํ์ต๋๋ค. ๋ฆฌ๋ทฐ์ด๋ค์ ์์ ๋ง์ ์คํ์ผ์ ๊ฐ์ง๊ณ ์์๊ณ ๋ฆฌ๋ทฐ์ด๋ค์ ์ํ์ ๋ฐ๋ผ ๊ณต๋ฐฑ 2๊ฐ ๋๋ 4๊ฐ, camelCase ๋๋ snake_case ๋ฑ ๋ค์ํ ์คํ์ผ๋ก ์์์ต๋๋ค. ์ด๋ฅผ ๋ฐ๋ก ๊ตฌํํ๋ ๊ฒ์ ๋ถ๊ฐ๋ฅํ์ต๋๋ค.
- ์ฒซ ๋ฒ์งธ ์์ด๋์ด๋ linter ์ฌ์ฉ์ ๊ถ์ฅํ๋ ๊ฒ์ด์์ต๋๋ค. ๊ฒฐ๊ตญ ๋ชจ๋ ์ฌ๋์ ์์ง๋์ด์ด๊ณ ๋ชจ๋ ๋๋ํฉ๋๋ค. ํ์ง๋ง ๋ค๋ฅธ ํธ์ง๊ธฐ, OS๋ ํธ๋ฆฌํ์ง ์์ต๋๋ค.
- ์ด๋ ๋ฌธ์ ๊ฐ ์๋ ๊ฐ ์ปค๋ฐ์ ๋ํด Slack์ ์์ฑํ๊ณ linter ์ถ๋ ฅ์ ์ฒจ๋ถํ๋ ๋ด์ผ๋ก ๋ฐ์ ํ์ต๋๋ค. ๊ทธ๋ฌ๋ ๋๋ถ๋ถ์ ๊ฒฝ์ฐ ํด์ผ ํ ๋ ์ค์ํ ์ผ์ด ์์๊ณ ์ฝ๋๋ ์์ ๋์ง ์์ ์ฑ๋ก ๋จ์ ์์์ต๋๋ค.
๊ทธ๋ฆฐ ๋น๋ ๋ง์คํฐ
์๊ฐ์ด ํ๋ฅด๊ณ ํน์ ํ ์คํธ๋ฅผ ํต๊ณผํ์ง ๋ชปํ ์ปค๋ฐ์ ๋ง์คํฐ์ ํ์ฉ๋ ์ ์๋ค๋ ๊ฒฐ๋ก ์ ๋๋ฌํ์ต๋๋ค. ์ง์! ์ฐ๋ฆฌ๋ ์ค๋ซ๋์ ์ํํธ์จ์ด ๊ฐ๋ฐ์ ํ์ฉ๋์ด ์จ Green Build Master๋ฅผ ๊ฐ๋ฐํ์ต๋๋ค.
- ๋ณ๋์ ์ง์ ์์ ๊ฐ๋ฐ์ด ์งํ ์ค์ ๋๋ค.
- ์ด ์ค๋ ๋์์ ํ ์คํธ๊ฐ ์คํ ์ค์ ๋๋ค.
- ํ ์คํธ๊ฐ ์คํจํ๋ฉด ์ฝ๋๊ฐ ๋ง์คํฐ์ ํฌํจ๋์ง ์์ต๋๋ค.
์ด ๊ฒฐ์ ์ ๋ด๋ฆฌ๋ ๊ฒ์ ๋งค์ฐ ๊ณ ํต์ค๋ฌ์ ์ต๋๋ค. ์๋ํ๋ฉด... ๋ง์ ๋ ผ๋์ ๋ถ๋ฌ์ผ์ผ์ผฐ์ง๋ง ๊ทธ๋งํ ๊ฐ์น๊ฐ ์์์ต๋๋ค. ๋ฆฌ๋ทฐ์์๋ ์คํ์ผ ์ฐจ์ด ์์ด ํฉ๋ณ ์์ฒญ์ด ๋ค์ด์ค๊ธฐ ์์ํ๊ณ , ์๊ฐ์ด ์ง๋๋ฉด์ ๋ฌธ์ ๊ฐ ๋๋ ๋ถ๋ถ๋ ์ค์ด๋ค๊ธฐ ์์ํ์ต๋๋ค.
IaC ํ ์คํธ
์คํ์ผ ํ์ธ ์ธ์๋ ์ธํ๋ผ๊ฐ ์ค์ ๋ก ๋ฐฐํฌ๋ ์ ์๋์ง ํ์ธํ๋ ๋ฑ์ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋๋ ์ธํ๋ผ ๋ณ๊ฒฝ์ผ๋ก ์ธํด ๋น์ฉ ์์ค์ด ๋ฐ์ํ์ง ์๋์ง ํ์ธํ์ธ์. ์ ์ด๊ฒ์ด ํ์ํ ์ ์์ต๋๊น? ์ง๋ฌธ์ ๋ณต์กํ๊ณ ์ฒ ํ์ ์ ๋๋ค. ๊ฒฝ๊ณ ์กฐ๊ฑด์ ํ์ธํ์ง ์์ Powershell์ ์๋ ์ค์ผ์ผ๋ฌ๊ฐ ์์๋ค๋ ์ด์ผ๊ธฐ๋ก ๋๋ตํ๋ ๊ฒ์ด ์ข์ต๋๋ค => ํ์ํ ๊ฒ๋ณด๋ค ๋ ๋ง์ VM์ด ์์ฑ๋์์ต๋๋ค => ํด๋ผ์ด์ธํธ๊ฐ ๊ณํ๋ณด๋ค ๋ ๋ง์ ๋น์ฉ์ ์ง์ถํ์ต๋๋ค. ์ด๋ ๊ทธ๋ค์ง ์ ์พํ ์ผ์ ์๋์ง๋ง ์ด๊ธฐ ๋จ๊ณ์์ ์ด ์ค๋ฅ๋ฅผ ํฌ์ฐฉํ๋ ๊ฒ์ด ๊ฐ๋ฅํฉ๋๋ค.
์ ๋ณต์กํ ์ธํ๋ผ๋ฅผ ๋์ฑ ๋ณต์กํ๊ฒ ๋ง๋๋๊ฐ? ์ฝ๋์ ๋ง์ฐฌ๊ฐ์ง๋ก ์ธํ๋ผ ํ ์คํธ๋ ๋จ์ํ๊ฐ ์๋๋ผ ์ธํ๋ผ๊ฐ ์ด๋ป๊ฒ ์๋ํด์ผ ํ๋์ง๋ฅผ ์๋ ๊ฒ์ ๋๋ค.
IaC ํ ์คํธ ํผ๋ผ๋ฏธ๋
IaC ํ ์คํธ: ์ ์ ๋ถ์
ํ๋ฒ์ ์ ์ฒด ์ธํ๋ผ๋ฅผ ๊ตฌ์ถํ๊ณ ์ ๋๋ก ์๋ํ๋์ง ํ์ธํด๋ณด๋ฉด ์๊ฐ์ด ๋ง์ด ๊ฑธ๋ฆฌ๊ณ ์๊ฐ์ด ๋ง์ด ๊ฑธ๋ฆฐ๋ค๋ ๊ฒ์ ์ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ฏ๋ก ๊ธฐ์ด๋ ๋น ๋ฅด๊ฒ ์๋ํ๋ ๊ฒ์ด์ด์ผ ํ๋ฉฐ, ๊ทธ๊ฒ์ด ๋ง๊ณ , ์์์ ์ธ ๋ถ๋ถ์ ๋ง์ด ํฌ๊ดํฉ๋๋ค.
๋ฐฐ์ฌ๋ ๊น๋ค๋กญ๋ค
๊ฐ๋จํ ์๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค. ํ์ฌ ๋๋ ํฐ๋ฆฌ์ ๋ชจ๋ ํ์ผ์ ์ ํํ๊ณ ๋ค๋ฅธ ์์น์ ๋ณต์ฌํฉ๋๋ค. ๊ฐ์ฅ ๋จผ์ ๋ ์ค๋ฅด๋ ๊ฒ์:
for i in * ; do
cp $i /some/path/$i.bak
done
ํ์ผ ์ด๋ฆ์ ๊ณต๋ฐฑ์ด ์์ผ๋ฉด ์ด๋ป๊ฒ ๋๋์? ๊ธ์์, ์ฐ๋ฆฌ๋ ๋๋ํฉ๋๋ค. ๋ฐ์ดํ๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ์๊ณ ์์ต๋๋ค.
for i in * ; do cp "$i" "/some/path/$i.bak" ; done
์ํ์ จ์ด์? ์๋์! ๋๋ ํ ๋ฆฌ์ ์๋ฌด๊ฒ๋ ์์ผ๋ฉด ์ด๋ป๊ฒ ๋ ๊น์? ๊ธ๋ก๋น์ด ์๋ํ์ง ์์ต๋๋ค.
find . -type f -exec mv -v {} dst/{}.bak ;
์ด์ ์ ๋๋์? ์๋์... ํ์ผ ์ด๋ฆ์ ๋ฌด์์ด ํฌํจ๋ ์ ์๋์ง ์์ด๋ฒ๋ ธ์ต๋๋ค. n
.
touch x
mv x "$(printf "foonbar")"
find . -type f -print0 | xargs -0 mv -t /path/to/target-dir
์ ์ ๋ถ์ ๋๊ตฌ
์ด์ ๋จ๊ณ์ ๋ฌธ์ ๋ ์ธ์ฉ๋ฌธ์ ์์ด๋ฒ๋ ธ์ ๋ ๋ฐ๊ฒฌ๋ ์ ์์ต๋๋ค. ์ด์ ๋ํ ์์ฐ์ ์ธ ํด๊ฒฐ์ฑ
์ด ๋ง์ด ์์ต๋๋ค.
์ง์ํ๋ ์ธ์ด
์๋จ
์ธ๊ฒ ๋๋ฆฌ๋ค
๋ฃจ๋น
ํ์ด์ฌ
๋จน์ ์์๋
IaC ํ ์คํธ: ๋จ์ ํ ์คํธ
์ด์ ์์์ ๋ณด์๋ฏ์ด ๋ฆฐํฐ๋ ์ ๋ฅํ์ง ์์ผ๋ฉฐ ๋ชจ๋ ๋ฌธ์ ์์ญ์ ์ง์ ํ ์ ์์ต๋๋ค. ๋ํ ์ํํธ์จ์ด ๊ฐ๋ฐ์ ํ
์คํธ์ ์ ์ฌํ๊ฒ ๋จ์ ํ
์คํธ๋ฅผ ๋ ์ฌ๋ฆด ์ ์์ต๋๋ค. ๋น์ฅ ์๊ฐ๋๋ ๊ฒ์
๋งจ ์ฒ์์ ์ฐ๋ฆฌ๋ ์ด์ผ๊ธฐ๋ฅผ ๋๋ด์ต๋๋ค. ๋จ๋จํ ๊ทธ๋ฆฌ๊ณ ์ฐ๋ฆฌ์ ์ธํ๋ผ๋ ์์ ๋ฒฝ๋๋ก ๊ตฌ์ฑ๋์ด์ผ ํฉ๋๋ค. ๊ทธ๋ค์ ์๊ฐ์ด ์์ต๋๋ค.
- ์ธํ๋ผ๋ Ansible ์ญํ ๊ณผ ๊ฐ์ ์์ ๋ธ๋ก์ผ๋ก ๋๋ฉ๋๋ค.
- Docker ๋๋ VM๊ณผ ๊ฐ์ ์ผ์ข ์ ํ๊ฒฝ์ด ๋ฐฐํฌ๋ฉ๋๋ค.
- ์ด ํ ์คํธ ํ๊ฒฝ์ Ansible ์ญํ ์ ์ ์ฉํฉ๋๋ค.
- ๋ชจ๋ ๊ฒ์ด ์์๋๋ก ์๋ํ๋์ง ํ์ธํฉ๋๋ค(ํ ์คํธ๋ฅผ ์คํํฉ๋๋ค).
- ์ฐ๋ฆฌ๋ ๊ด์ฐฎ์์ง ์๋์ง๋ฅผ ๊ฒฐ์ ํฉ๋๋ค.
IaC ํ ์คํธ: ๋จ์ ํ ์คํธ ๋๊ตฌ
์ง๋ฌธ, CFM ํ ์คํธ๋ ๋ฌด์์ ๋๊น? ๊ฐ๋จํ ์คํฌ๋ฆฝํธ๋ฅผ ์คํํ๊ฑฐ๋ ์ด๋ฅผ ์ํด ๊ธฐ์ฑ ์๋ฃจ์ ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
CFM
์๋จ
์ฑ
์๊ฐ์๋
์๋ฆฌ์ฌ
์๋ฆฌ์ฌ
์ผ์
testinfra์ ์, ์ฌ์ฉ์ ํ์ธ test1
, test2
์กด์ฌํ๋ฉฐ ๊ทธ๋ฃน์ ์ํด ์์ต๋๋ค. sshusers
:
def test_default_users(host):
users = ['test1', 'test2' ]
for login in users:
assert host.user(login).exists
assert 'sshusers' in host.user(login).groups
๋ฌด์์ ์ ํํ ๊น์? ์ง๋ฌธ์ ๋ณต์กํ๊ณ ๋ชจํธํฉ๋๋ค. ๋ค์์ 2018-2019๋ github ํ๋ก์ ํธ ๋ณ๊ฒฝ ์ฌํญ์ ์์ ๋๋ค.
IaC ํ ์คํธ ํ๋ ์์ํฌ
์ง๋ฌธ์ด ์๊น๋๋ค. ์ด ๋ชจ๋ ๊ฒ์ ์ด๋ป๊ฒ ํ๋๋ก ๋ชจ์์ ์ถ์ํ ์ ์์๊น์? ํ ์ ์๋ค
CFM
์๋จ
์ฑ
์๊ฐ์๋
์๋ฆฌ์ฌ
ํ
๋ผ ํผ
2018~2019๋ github ํ๋ก์ ํธ ๋ณ๊ฒฝ ์:
๋ถ์ ๋ ํ ์คํธํค์น
์ฒ์์ ์ฐ๋ฆฌ๋
- VM์ ๋ณ๋ ฌ๋ก ์์ฑํฉ๋๋ค.
- Ansible ์ญํ ์ ์ ์ฉํฉ๋๋ค.
- ๊ฒ์ฌ๋ฅผ ์คํํฉ๋๋ค.
25~35๊ฐ ์ญํ ์ ๊ฒฝ์ฐ 40~70๋ถ ๋์ ์๋ํ๋๋ฐ ์ด๋ ๊ธด ์๊ฐ์ด์์ต๋๋ค.
๋ค์ ๋จ๊ณ๋ jenkins/docker/ansible/molecule๋ก์ ์ ํ์ด์์ต๋๋ค. ์ด๋ ์ ์ผ๋ก ๋ชจ๋ ๊ฒ์ด ๋์ผํฉ๋๋ค
- ๋ฆฐํธ ํ๋ ์ด๋ถ.
- ์ญํ ์ ์ ๋ ฌํ์ญ์์ค.
- ์ปจํ ์ด๋ ์คํ
- Ansible ์ญํ ์ ์ ์ฉํฉ๋๋ค.
- ํ ์คํธ์ธํ๋ผ๋ฅผ ์คํํ์ธ์.
- ๋ฉฑ๋ฑ์ฑ์ ํ์ธํ์ธ์.
40๊ฐ ์ญํ ์ ๋ํ Linting๊ณผ 15๊ฐ ์ญํ ์ ๋ํ ํ ์คํธ์๋ ์ฝ XNUMX๋ถ์ด ์์๋๊ธฐ ์์ํ์ต๋๋ค.
๋ฌด์์ ์ ํํ ์ง๋ ์ฌ์ฉ๋ ์คํ, ํ์ ์ ๋ฌธ์ฑ ๋ฑ๊ณผ ๊ฐ์ ์ฌ๋ฌ ์์์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋๋ค. ์ฌ๊ธฐ์ ๋ชจ๋๊ฐ ๋จ์ ํ ์คํธ ์ง๋ฌธ์ ๋ง๋ฌด๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ์ค์ค๋ก ๊ฒฐ์ ํฉ๋๋ค.
IaC ํ ์คํธ: ํตํฉ ํ ์คํธ
์ธํ๋ผ ํ ์คํธ ํผ๋ผ๋ฏธ๋์ ๋ค์ ๋จ๊ณ๋ ํตํฉ ํ ์คํธ์ ๋๋ค. ๋จ์ ํ ์คํธ์ ์ ์ฌํฉ๋๋ค.
- ์ธํ๋ผ๋ Ansible ์ญํ ๊ณผ ๊ฐ์ ์์ ๋ธ๋ก์ผ๋ก ๋๋ฉ๋๋ค.
- Docker ๋๋ VM๊ณผ ๊ฐ์ ์ผ์ข ์ ํ๊ฒฝ์ด ๋ฐฐํฌ๋ฉ๋๋ค.
- ์ด ํ ์คํธ ํ๊ฒฝ์ ์ ์ฉ ์ธํธ Ansible ์ญํ .
- ๋ชจ๋ ๊ฒ์ด ์์๋๋ก ์๋ํ๋์ง ํ์ธํฉ๋๋ค(ํ ์คํธ๋ฅผ ์คํํฉ๋๋ค).
- ์ฐ๋ฆฌ๋ ๊ด์ฐฎ์์ง ์๋์ง๋ฅผ ๊ฒฐ์ ํฉ๋๋ค.
๋๋ต์ ์ผ๋ก ๋งํ๋ฉด ๋จ์ ํ ์คํธ์์์ ๊ฐ์ด ์์คํ ์ ๊ฐ๋ณ ์์์ ์ฑ๋ฅ์ ํ์ธํ๋ ๊ฒ์ด ์๋๋ผ ์๋ฒ๊ฐ ์ ์ฒด์ ์ผ๋ก ์ด๋ป๊ฒ ๊ตฌ์ฑ๋์ด ์๋์ง ํ์ธํฉ๋๋ค.
IaC ํ ์คํธ: ์ข ๋จ ๊ฐ ํ ์คํธ
ํผ๋ผ๋ฏธ๋ ๊ผญ๋๊ธฐ์๋ End to End ํ ์คํธ๊ฐ ์์ต๋๋ค. ์ ๊ฒ๋ค. ์ฐ๋ฆฌ๋ ๋ณ๋์ ์๋ฒ, ๋ณ๋์ ์คํฌ๋ฆฝํธ ๋๋ ์ธํ๋ผ์ ๋ณ๋ ๋ธ๋ฆญ์ ์ฑ๋ฅ์ ํ์ธํ์ง ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ๋ง์ ์๋ฒ๊ฐ ํจ๊ป ์ฐ๊ฒฐ๋์ด ์๊ณ ์ธํ๋ผ๊ฐ ์์๋๋ก ์๋ํ๋์ง ํ์ธํฉ๋๋ค. ์ํ๊น๊ฒ๋ ๊ธฐ์ฑํ ๋ฐ์คํ ์๋ฃจ์ ์ ๋ณธ ์ ์ด ์์ต๋๋ค. ์๋ง๋... ์ธํ๋ผ๋ ๊ณ ์ ํ ๊ฒฝ์ฐ๊ฐ ๋ง์ผ๋ฉฐ ํ ์คํธ์ฉ ํ๋ ์์ํฌ๋ฅผ ํ ํ๋ฆฟํํ๊ณ ์์ฑํ๊ธฐ๊ฐ ์ด๋ ต์ต๋๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก ๋ชจ๋ ์ฌ๋์ ์์ ๋ง์ ์๋ฃจ์ ์ ๋ง๋ญ๋๋ค. ์๊ตฌ๋ ์๋๋ฐ ๋ต์ด ์์ต๋๋ค. ๊ทธ๋ฌ๋ฏ๋ก ๋ชจ๋ ๊ฒ์ด ์ฐ๋ฆฌ๋ณด๋ค ์ค๋ ์ ์ ๋ฐ๋ช ๋์๋ค๋ ์ฌ์ค์ ๋ค๋ฅธ ์ฌ๋๋ค์๊ฒ ๊ฑด์ ํ ์๊ฐ์ผ๋ก ๊ฐ์ํ๊ฑฐ๋ ์ฝ๋ฅผ ๋น๋น๊ธฐ ์ํด ๋ฌด์์ด ์๋์ง ์๋ ค ๋๋ฆฌ๊ฒ ์ต๋๋ค.
ํ๋ถํ ์ญ์ฌ๋ฅผ ์ง๋ ํ๋ก์ ํธ. ์ด๋ ๋๊ท๋ชจ ์กฐ์ง์์ ์ฌ์ฉ๋๋ฉฐ ์๋ง๋ ์ฌ๋ฌ๋ถ ๊ฐ์๋ ๊ฐ์ ์ ์ผ๋ก ์ด ๋ฐฉ๋ฒ์ ์ฌ์ฉํ์ ๊ฒ์ ๋๋ค. ์ด ์์ฉ ํ๋ก๊ทธ๋จ์ ๋ง์ ๋ฐ์ดํฐ๋ฒ ์ด์ค, ํตํฉ ๋ฑ์ ์ง์ํฉ๋๋ค. ์ธํ๋ผ๊ฐ ์ด๋ค ๋ชจ์ต์ผ์ง ์๋ ๊ฒ์ ๋ง์ docker-compose ํ์ผ์ ์๊ณ , ์ด๋ค ํ๊ฒฝ์์ ์ด๋ค ํ ์คํธ๋ฅผ ์คํํ ์ง ์๋ ๊ฒ์ด Jenkins์ ๋๋ค.
์ด ๊ณํ์ ํ๋ ์์ํฌ ๋ด์์ ๊ฝค ์ค๋ซ๋์ ์๋ํ์ต๋๋ค.
์ฐ๊ตฌ ์์ด๋์ด๋ ๋ ๋์๊ฐ ์คํ์ํํธ์์ ์ธํ๋ผ๋ฅผ ์ปจํ ์ด๋์ ๋ฐฐํฌํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์ง์์ ๋ด์ ์ ์๋ APB(Ansible Playbook Bundle)์ ๊ฐ์ ๊ฒ์ ๋ฐ๊ฒฌํ์ต๋๋ค. ์ ๊ฒ๋ค. ์ธํ๋ผ ๋ฐฐํฌ ๋ฐฉ๋ฒ์ ๋ํ ๋ฐ๋ณต ๊ฐ๋ฅํ๊ณ ํ ์คํธ ๊ฐ๋ฅํ ์ง์ ์ง์ ์ด ์์ต๋๋ค.
์ด๊ธฐ์ข ์ธํ๋ผ๋ฅผ ๋ง๋๊ธฐ ์ ๊น์ง๋ ์ด ๋ชจ๋ ๊ฒ์ด ๊ด์ฐฎ๊ฒ ๋ค๋ ธ์ต๋๋ค. ํ ์คํธ์๋ Windows๊ฐ ํ์ํ์ต๋๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก ๋ฌด์์, ์ด๋์, ์ด๋ป๊ฒ ๋ฐฐํฌํ๊ณ ํ ์คํธํ ์ง์ ๋ํ ์ง์์ด ์ ํจ์ค์ ์์ต๋๋ค.
๊ฒฐ๋ก
์ฝ๋๋ก์์ ์ธํ๋ผ
- ์ ์ฅ์์ ์ฝ๋.
- ์ธ๊ฐ์ ์ํธ ์์ฉ.
- ์ธํ๋ผ ํ ์คํธ.
๋ชจ๋๋ฐญ
์์ด ๋ฒ์ ๊ฐ์ธ ๋ธ๋ก๊ทธ์ ๊ต์ฐจ ๊ฒ์๋ฌผ - ํ
์คํธ ์คํ 2019-04-24
SpbLUG DevopsConf์ ๋น๋์ค(RU) 2019-05-28 DINS DevOps EVENING์ ๋น๋์ค(RU) 2019-06-20 300,000์ค์ด ๋๋ ์ธํ๋ผ ์ฝ๋ ์์ฑ์ ํตํด ์ป์ ๊ตํ &ํ ์คํธ ๋ฒ์ ์ฝ๋ํ ์ธํ๋ผ๋ฅผ ์ง์์ ์ธ ์ ๋ฌ ํ์ดํ๋ผ์ธ์ ํตํฉ ์ฝ๋ํ ์ธํ๋ผ ํ ์คํธ Ansible ์ญํ ์ ํจ๊ณผ์ ์ธ ๊ฐ๋ฐ ๋ฐ ์ ์ง ๊ด๋ฆฌ Ansible์ ๋ฐฐ์ฌ๊ฐ ์๋๋๋ค!
์ถ์ฒ : habr.com