์ด ์ข ํฉ ํ ๋ผํผ ๊ฐ์ด๋๋ฅผ ํตํด ์ฝ๋ํ ์ธํ๋ผ๋ฅผ ๋ง์คํฐํ์ธ์. ํด๋ผ์ฐ๋ ๋ฐ ์จํ๋ ๋ฏธ์ค ์ธํ๋ผ๋ฅผ ์ ์ธ๊ณ์ ์ผ๋ก ๊ด๋ฆฌํ๊ธฐ ์ํ ํต์ฌ ๊ฐ๋ , ๋ชจ๋ฒ ์ฌ๋ก, ๊ณ ๊ธ ์ํฌํ๋ก์ฐ๋ฅผ ์ตํ์ธ์.
์ฝ๋ํ ์ธํ๋ผ: ๊ธ๋ก๋ฒ ํ์ ์ํ ์ข ํฉ ํ ๋ผํผ ๊ฐ์ด๋
์ค๋๋ ๋น ๋ฅด๊ฒ ๋ณํํ๋ ๋์งํธ ํ๊ฒฝ์์ ์กฐ์ง์ด ๊ฐ์น๋ฅผ ์ ๊ณตํ๋ ์๋๋ ํต์ฌ์ ์ธ ๊ฒฝ์ ์ฐ์์ ๋๋ค. ์ ํต์ ์ผ๋ก IT ์ธํ๋ผ ๊ด๋ฆฌ(์๋ฒ ํ๋ก๋น์ ๋, ๋คํธ์ํฌ ๊ตฌ์ฑ, ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ค์ )๋ ์๋์ ์ด๊ณ ์๊ฐ์ด ๋ง์ด ์์๋๋ฉฐ ์ค๋ฅ ๋ฐ์ ๊ฐ๋ฅ์ฑ์ด ๋์ ํ๋ก์ธ์ค์์ต๋๋ค. ์ด๋ฌํ ์๋์ ์ ๊ทผ ๋ฐฉ์์ ๋ณ๋ชฉ ํ์์ ์ผ๊ธฐํ๊ณ ํ๊ฒฝ ๊ฐ ๋ถ์ผ์น๋ฅผ ์ด๋ํ์ผ๋ฉฐ ํ์ฅ์ ์ค๋ํ ๊ณผ์ ๋ก ๋ง๋ค์์ต๋๋ค. ์ด ํ๋์ ์ธ ๋ฌธ์ ์ ๋ํ ํด๊ฒฐ์ฑ ์ ์ฌ๊ณ ์ ํจ๋ฌ๋ค์์ ์ ํํ๋ ๊ฒ์ ๋๋ค. ์ฆ, ์ธํ๋ผ๋ฅผ ์ ํ๋ฆฌ์ผ์ด์ ์ฝ๋์ ๋์ผํ ์๊ฒฉํจ๊ณผ ๊ท์จ๋ก ๋ค๋ฃจ๋ ๊ฒ์ ๋๋ค. ์ด๊ฒ์ด ์ฝ๋ํ ์ธํ๋ผ(IaC)์ ํต์ฌ ์๋ฆฌ์ ๋๋ค.
์ด๋ฌํ ํจ๋ฌ๋ค์์ ์ฃผ๋ํ๊ธฐ ์ํด ๋ฑ์ฅํ ๊ฐ๋ ฅํ ๋๊ตฌ ์ค HashiCorp์ ํ ๋ผํผ(Terraform)์ ๊ธ๋ก๋ฒ ๋ฆฌ๋๋ก ๋๊ฐ์ ๋ํ๋ ๋๋ค. ํ ๋ผํผ์ ํตํด ํ์ ๋ชจ๋ ํด๋ผ์ฐ๋ ๋๋ ์๋น์ค ์ ๋ฐ์ ๊ฑธ์ณ ์ธํ๋ผ๋ฅผ ์์ ํ๊ณ ํจ์จ์ ์ผ๋ก ์ ์, ํ๋ก๋น์ ๋ ๋ฐ ๊ด๋ฆฌํ ์ ์์ต๋๋ค. ์ด ๊ฐ์ด๋๋ ํ ๋ผํผ์ ์ดํดํ๊ณ ๊ตฌํํ๋ ค๋ ์ ์ธ๊ณ ๊ฐ๋ฐ์, ์ด์ ์์ง๋์ด ๋ฐ IT ๋ฆฌ๋๋ฅผ ์ํด ์ค๊ณ๋์์ต๋๋ค. ์ฐ๋ฆฌ๋ ํต์ฌ ๊ฐ๋ ์ ํ๊ตฌํ๊ณ , ์ค์ฉ์ ์ธ ์์ ๋ฅผ ์ดํด๋ณด๊ณ , ํ์ ์ ์ธ ๊ตญ์ ํ ํ๊ฒฝ์์ ํ ๋ผํผ์ ์ฑ๊ณต์ ์ผ๋ก ํ์ฉํ๋ ๋ฐ ํ์ํ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ์์ธํ ์ค๋ช ํ ๊ฒ์ ๋๋ค.
์ฝ๋ํ ์ธํ๋ผ(IaC)๋ ๋ฌด์์ธ๊ฐ์?
์ฝ๋ํ ์ธํ๋ผ(Infrastructure as Code)๋ ๋ฌผ๋ฆฌ์ ํ๋์จ์ด ๊ตฌ์ฑ์ด๋ ๋ํํ ๊ตฌ์ฑ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ๋ ๋์ , ๊ธฐ๊ณ๊ฐ ์ฝ์ ์ ์๋ ์ ์ ํ์ผ์ ํตํด IT ์ธํ๋ผ๋ฅผ ๊ด๋ฆฌํ๊ณ ํ๋ก๋น์ ๋ํ๋ ๋ฐฉ์์ ๋๋ค. ํด๋ผ์ฐ๋ ๊ณต๊ธ์์ ์น ์ฝ์์์ ์๋์ผ๋ก ํด๋ฆญํ์ฌ ๊ฐ์ ๋จธ์ ์ ๋ง๋๋ ๋์ , ํด๋น ๋จธ์ ์ ์ํ๋ ์ํ๋ฅผ ์ ์ํ๋ ์ฝ๋๋ฅผ ์์ฑํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ ์ด ์ฝ๋๋ ํ ๋ผํผ(Terraform)๊ณผ ๊ฐ์ IaC ๋๊ตฌ์ ์ํด ์ค์ ์ธํ๋ผ๊ฐ ์ ์์ ์ผ์นํ๋๋ก ํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
IaC ์ ๊ทผ ๋ฐฉ์์ ์ฑํํ๋ฉด ๋ค์๊ณผ ๊ฐ์ ํ์ ์ ์ธ ์ด์ ์ ์ป์ ์ ์์ต๋๋ค:
- ์๋ ๋ฐ ๋ฏผ์ฒฉ์ฑ: ์ธํ๋ผ ํ๋ก๋น์ ๋์ ์๋ํํ๋ฉด ๊ฐ๋ฐ, ํ ์คํธ ๋๋ ํ๋ก๋์ ์ฉ ์ ํ๊ฒฝ์ ๋ฐฐํฌํ๋ ๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ด dramatically ๋จ์ถ๋ฉ๋๋ค. ํ๋ ๋ฉฐ์น ๋๋ ๋ช ์ฃผ๊ฐ ๊ฑธ๋ฆฌ๋ ์์ ์ด ์ด์ ๋ ๋ช ๋ถ ๋ง์ ์๋ฃ๋ ์ ์์ต๋๋ค.
- ์ผ๊ด์ฑ ๋ฐ ๋ฉฑ๋ฑ์ฑ: ์๋ ํ๋ก์ธ์ค๋ ์ฌ๋์ ์ค๋ฅ์ ์ทจ์ฝํ์ฌ, ๋์ผํด์ผ ํ ํ๊ฒฝ์ด ์์ํ ๋ฌ๋ผ์ง๋ ๊ตฌ์ฑ ๋ถ์ผ์น(configuration drift)๋ฅผ ์ด๋ํฉ๋๋ค. IaC๋ ๋ชจ๋ ๋ฐฐํฌ๊ฐ ์ผ๊ด๋๊ณ ๋ฐ๋ณต ๊ฐ๋ฅํ๋๋ก ๋ณด์ฅํฉ๋๋ค. ์์ ์ ์ฌ๋ฌ ๋ฒ ์คํํด๋ ๋์ผํ ๊ฒฐ๊ณผ๊ฐ ๋์ค๋ ๊ฒฝ์ฐ '๋ฉฑ๋ฑ์ '์ด๋ผ๊ณ ํ๋ฉฐ, ์ด๋ ์ค๋ณต ๋ฆฌ์์ค ๋๋ ์๋ชป๋ ๊ตฌ์ฑ์ ๋ฐฉ์งํฉ๋๋ค.
- ๋ฒ์ ์ ์ด ๋ฐ ํ์ : Git๊ณผ ๊ฐ์ ๋ฒ์ ์ ์ด ์์คํ ์ ์ธํ๋ผ ์ ์๋ฅผ ์ ์ฅํจ์ผ๋ก์จ ๋ชจ๋ ๋ณ๊ฒฝ ์ฌํญ์ ๋ํ ์๋ฒฝํ ๊ฐ์ฌ ์ถ์ ์ ์ป์ ์ ์์ต๋๋ค. ํ์ ํ ๋ฆฌํ์คํธ ๋ฐ ์ฝ๋ ๊ฒํ ์ ๊ฐ์ ์ต์ํ ์ํฌํ๋ก์ฐ๋ฅผ ์ฌ์ฉํ์ฌ ์ธํ๋ผ์ ๋ํด ํ์ ํ์ฌ ํ์ง๊ณผ ์ฑ ์์ฑ์ ํฅ์์ํฌ ์ ์์ต๋๋ค.
- ๋น์ฉ ์ต์ ํ: IaC๋ฅผ ์ฌ์ฉํ๋ฉด ํ์์ ๋ฐ๋ผ ์์ ํ๊ฒฝ์ ์ฝ๊ฒ ์์ฑํ๊ณ ์ญ์ ํ ์ ์์ต๋๋ค. ๋ช ์๊ฐ ๋์ ์ ์ฒด ๊ท๋ชจ์ ํ ์คํธ ํ๊ฒฝ์ ๊ตฌ์ถํ ๋ค์ ํด์ฒดํ์ฌ ์ฌ์ฉํ ๋งํผ๋ง ๋น์ฉ์ ์ง๋ถํ ์ ์์ผ๋ฏ๋ก, ์ด๋ค ์กฐ์ง์๊ฒ๋ ์๋นํ ๋น์ฉ ์ ๊ฐ ์กฐ์น์ ๋๋ค.
- ์ํ ๊ฐ์: ๋ฐฐํฌ๋ฅผ ์๋ํํ๋ฉด ์ฌ๋์ ์ค๋ฅ ์ํ์ด ์ค์ด๋ญ๋๋ค. ๋ํ ํ๋ก๋์ ํ๊ฒฝ์ ์ ์ฉํ๊ธฐ ์ ์ ์ธํ๋ผ ๋ณ๊ฒฝ ์ฌํญ์ ๊ฒํ ํ๊ณ ํ ์คํธํ ์ ์๋ ๊ธฐ๋ฅ์ ์ค๋จ ๋ฐ์ ๊ฐ๋ฅ์ฑ์ ํฌ๊ฒ ๋ฎ์ถฅ๋๋ค.
IaC ๋๊ตฌ๋ ์ผ๋ฐ์ ์ผ๋ก ๋ ๊ฐ์ง ์ ๊ทผ ๋ฐฉ์ ์ค ํ๋๋ฅผ ๋ฐ๋ฆ ๋๋ค: ๋ช ๋ นํ(imperative) ๋๋ ์ ์ธํ(declarative). ๋ช ๋ นํ ์ ๊ทผ ๋ฐฉ์("์ด๋ป๊ฒ")์ ์ํ๋ ์ํ์ ๋๋ฌํ๊ธฐ ์ํ ์ ํํ ๋จ๊ณ๋ฅผ ์ง์ ํ๋ ์คํฌ๋ฆฝํธ๋ฅผ ์์ฑํ๋ ๊ฒ์ ํฌํจํฉ๋๋ค. ํ ๋ผํผ์ด ์ฌ์ฉํ๋ ์ ์ธํ ์ ๊ทผ ๋ฐฉ์("๋ฌด์์")์ ์ธํ๋ผ์ ์ํ๋ ์ต์ข ์ํ๋ฅผ ์ ์ํ๋ ๊ฒ์ ํฌํจํ๋ฉฐ, ๋๊ตฌ ์์ฒด๋ ์ด๋ฅผ ๋ฌ์ฑํ๋ ๊ฐ์ฅ ํจ์จ์ ์ธ ๋ฐฉ๋ฒ์ ํ์ ํฉ๋๋ค.
ํ ๋ผํผ์ ์ ํํ๋ ์ด์ ?
์ฌ๋ฌ IaC ๋๊ตฌ๊ฐ ์์ง๋ง, ํ ๋ผํผ์ ๋ค์ํ๊ณ ๊ธ๋ก๋ฒํ ์กฐ์ง์ ํนํ ์ ํฉํ๊ฒ ๋ง๋๋ ๋ช ๊ฐ์ง ํต์ฌ์ ์ธ ์ด์ ๋ก ์ธํด ์์ฒญ๋ ์ธ๊ธฐ๋ฅผ ์ป์์ต๋๋ค.
ํ๋ก๋ฐ์ด๋ ๋ ๋ฆฝ์ ์ธ ์ํคํ ์ฒ
ํ ๋ผํผ์ ๋จ์ผ ํด๋ผ์ฐ๋ ๊ณต๊ธ์์ ๋ฌถ์ฌ ์์ง ์์ต๋๋ค. "ํ๋ก๋ฐ์ด๋(provider)"์ ํจ๊ป ํ๋ฌ๊ทธ์ธ ๊ธฐ๋ฐ ์ํคํ ์ฒ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐฉ๋ํ ํ๋ซํผ๊ณผ ์ํธ ์์ฉํฉ๋๋ค. ์ฌ๊ธฐ์๋ Amazon Web Services(AWS), Microsoft Azure, Google Cloud Platform(GCP)๊ณผ ๊ฐ์ ์ฃผ์ ํผ๋ธ๋ฆญ ํด๋ผ์ฐ๋๋ ๋ฌผ๋ก VMware vSphere์ ๊ฐ์ ์จํ๋ ๋ฏธ์ค ์๋ฃจ์ , ์ฌ์ง์ด Cloudflare, Datadog ๋๋ GitHub์ ๊ฐ์ ์๋น์คํ ํ๋ซํผ(PaaS) ๋ฐ ์๋น์คํ ์ํํธ์จ์ด(SaaS) ๊ณต๊ธ์๋ ํฌํจ๋ฉ๋๋ค. ์ด๋ฌํ ์ ์ฐ์ฑ์ ๋ฉํฐํด๋ผ์ฐ๋ ๋๋ ํ์ด๋ธ๋ฆฌ๋ ํด๋ผ์ฐ๋ ์ ๋ต์ ๊ฐ์ง ์กฐ์ง์๊ฒ ๋งค์ฐ ์ค์ํ๋ฉฐ, ๋จ์ผ ๋๊ตฌ์ ์ํฌํ๋ก์ฐ๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ฒด ์ธํ๋ผ ๊ณต๊ฐ์ ๊ด๋ฆฌํ ์ ์๋๋ก ํฉ๋๋ค.
HCL์ ์ฌ์ฉํ ์ ์ธํ ๊ตฌ์ฑ
ํ ๋ผํผ์ ์์ฒด ๋๋ฉ์ธ ํนํ ์ธ์ด์ธ HCL(HashiCorp Configuration Language)์ ์ฌ์ฉํฉ๋๋ค. HCL์ ์ฌ๋์ด ์ฝ๊ธฐ ์ฝ๊ณ ์์ฑํ๊ธฐ ์ฝ๋๋ก ์ค๊ณ๋์์ผ๋ฉฐ, ๋ณต์กํ ์ธํ๋ผ์ ํ์ํ ํํ๋ ฅ๊ณผ ํจ๊ป ์๋งํ ํ์ต ๊ณก์ ์ ์ ๊ณตํฉ๋๋ค. ๊ทธ ์ ์ธ์ ํน์ฑ์ ์ด๋ค ์ธํ๋ผ๋ฅผ ์ํ๋์ง ์ค๋ช ํ๊ณ , ํ ๋ผํผ์ ์ด๋ฅผ ์์ฑ, ์ ๋ฐ์ดํธ ๋๋ ์ญ์ ํ๋ ๋ฐฉ๋ฒ์ ๋ํ ๋ ผ๋ฆฌ๋ฅผ ์ฒ๋ฆฌํ๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
์ํ ๊ด๋ฆฌ ๋ฐ ๊ณํ
์ด๊ฒ์ ํ
๋ผํผ์ ๊ฐ์ฅ ๊ฐ๋ ฅํ ๊ธฐ๋ฅ ์ค ํ๋์
๋๋ค. ํ
๋ผํผ์ ๊ตฌ์ฑ๊ณผ ๊ด๋ฆฌํ๋ ์ค์ ๋ฆฌ์์ค ๊ฐ์ ๋งคํ ์ญํ ์ ํ๋ ์ํ ํ์ผ(์ผ๋ฐ์ ์ผ๋ก terraform.tfstate)์ ์์ฑํฉ๋๋ค. ๋ณ๊ฒฝ ์ฌํญ์ ์ ์ฉํ๊ธฐ ์ ์ ํ
๋ผํผ์ plan ๋ช
๋ น์ ์คํํฉ๋๋ค. ์ด๋ ์ํ๋ ์ํ(์ฝ๋)์ ํ์ฌ ์ํ(์ํ ํ์ผ)๋ฅผ ๋น๊ตํ์ฌ ์คํ ๊ณํ์ ์์ฑํฉ๋๋ค. ์ด ๊ณํ์ ํ
๋ผํผ์ด ์ ํํ ๋ฌด์์ ํ ์ง(์ด๋ค ๋ฆฌ์์ค๊ฐ ์์ฑ, ์
๋ฐ์ดํธ ๋๋ ํ๊ดด๋ ์ง) ๋ณด์ฌ์ค๋๋ค. ์ด "์ ์ฉ ์ ๋ฏธ๋ฆฌ ๋ณด๊ธฐ" ์ํฌํ๋ก์ฐ๋ ์ค์๋ก ์ธํ ๋ณ๊ฒฝ์ ๋ฐฉ์งํ๊ณ ๋ฐฐํฌ์ ๋ํ ์์ ํ ํ์ ์ ์ ๊ณตํ๋ ์ค์ํ ์์ ๋ง์ ์ ๊ณตํฉ๋๋ค.
ํ๊ธฐ์ฐฌ ์คํ ์์ค ์ํ๊ณ
ํ ๋ผํผ์ ํฌ๊ณ ํ๋ฐํ ๊ธ๋ก๋ฒ ์ปค๋ฎค๋ํฐ๋ฅผ ๊ฐ์ง ์คํ ์์ค ํ๋ก์ ํธ์ ๋๋ค. ์ด๋ก ์ธํด ์์ฒ ๊ฐ์ ํ๋ก๋ฐ์ด๋์ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ๋ชจ๋๋ก ๊ฐ๋ ์ฐฌ ๊ณต๊ฐ ํ ๋ผํผ ๋ ์ง์คํธ๋ฆฌ๊ฐ ํ์ํ์ต๋๋ค. ๋ชจ๋์ ์ธํ๋ผ์ ๋น๋ฉ ๋ธ๋ก์ผ๋ก ์ฌ์ฉํ ์ ์๋ ๋ฏธ๋ฆฌ ํจํค์งํ๋ ํ ๋ผํผ ๊ตฌ์ฑ ์ธํธ์ ๋๋ค. ํ์ค ๊ฐ์ ํ๋ผ์ด๋น ํด๋ผ์ฐ๋(VPC)๋ฅผ ์ค์ ํ๊ธฐ ์ํด ์ฒ์๋ถํฐ ์ฝ๋๋ฅผ ์์ฑํ๋ ๋์ , ์ ๊ฒ์ฆ๋๊ณ ์ปค๋ฎค๋ํฐ์์ ์ง์ํ๋ ๋ชจ๋์ ์ฌ์ฉํ์ฌ ์๊ฐ์ ์ ์ฝํ๊ณ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ์ ์ฉํ ์ ์์ต๋๋ค.
ํ ๋ผํผ ์์ํ๊ธฐ: ๋จ๊ณ๋ณ ๊ฐ์ด๋
์ด์ ์ด๋ก ์์ ์ค์ต์ผ๋ก ๋์ด๊ฐ ๋ด ์๋ค. ์ด ์น์ ์์๋ ํ ๋ผํผ ์ค์น ๋ฐ ์ฒซ ๋ฒ์งธ ํด๋ผ์ฐ๋ ์ธํ๋ผ๋ฅผ ์์ฑํ๋ ๊ณผ์ ์ ์๋ดํฉ๋๋ค.
์ฌ์ ์ค๋น ์ฌํญ
์์ํ๊ธฐ ์ ์ ๋ค์์ด ํ์ํฉ๋๋ค:
- ๋ช ๋ น์ค ์ธํฐํ์ด์ค(macOS/Linux์ ํฐ๋ฏธ๋, Windows์ PowerShell ๋๋ WSL).
- ํด๋ผ์ฐ๋ ๊ณต๊ธ์ ๊ณ์ . ์์์์๋ AWS๋ฅผ ์ฌ์ฉํ์ง๋ง, ์๋ฆฌ๋ ๋ชจ๋ ๊ณต๊ธ์์ ์ ์ฉ๋ฉ๋๋ค.
- ์๊ฒฉ ์ฆ๋ช ์ด ๊ตฌ์ฑ๋ ํด๋ผ์ฐ๋ ๊ณต๊ธ์์ ๋ช ๋ น์ค ๋๊ตฌ(์: AWS CLI). ํ ๋ผํผ์ ์ด ์๊ฒฉ ์ฆ๋ช ์ ์ฌ์ฉํ์ฌ ์ธ์ฆํฉ๋๋ค.
์ค์น
ํ
๋ผํผ์ ๋จ์ผ ๋ฐ์ด๋๋ฆฌ ํ์ผ๋ก ๋ฐฐํฌ๋ฉ๋๋ค. ๊ฐ์ฅ ์ฌ์ด ์ค์น ๋ฐฉ๋ฒ์ ๊ณต์ ํ
๋ผํผ ๋ค์ด๋ก๋ ํ์ด์ง๋ฅผ ๋ฐฉ๋ฌธํ์ฌ ์ด์ ์ฒด์ ์ ๋ํ ์ง์นจ์ ๋ฐ๋ฅด๋ ๊ฒ์
๋๋ค. ์ค์น๊ฐ ์๋ฃ๋๋ฉด ์ ํฐ๋ฏธ๋ ์ธ์
์ ์ด๊ณ terraform --version์ ์คํํ์ฌ ํ์ธํ ์ ์์ต๋๋ค.
์ฒซ ๋ฒ์งธ ํ ๋ผํผ ๊ตฌ์ฑ: AWS S3 ๋ฒํท
๊ฐ๋จํ์ง๋ง ์ค์ฉ์ ์ธ ์์ ์ธ AWS S3 ๋ฒํท(์ผ๋ฐ์ ์ธ ํด๋ผ์ฐ๋ ์คํ ๋ฆฌ์ง ๋ฆฌ์์ค)์ ์์ฑํ๋ ๊ฒ์ผ๋ก ์์ํ๊ฒ ์ต๋๋ค. ํ๋ก์ ํธ์ฉ ์ ๋๋ ํ ๋ฆฌ๋ฅผ ์์ฑํ๊ณ ๊ทธ ์์ main.tf๋ผ๋ ํ์ผ์ ๋ง๋์ธ์.
๋ค์ ์ฝ๋๋ฅผ main.tf ํ์ผ์ ์ถ๊ฐํ์ธ์. "my-unique-terraform-guide-bucket-12345"๋ S3 ๋ฒํท์ ๋ํ ์ ์ญ์ ์ผ๋ก ๊ณ ์ ํ ์ด๋ฆ์ผ๋ก ๋ฐ๊ฟ์ผ ํฉ๋๋ค.
ํ์ผ: main.tf
terraform { required_providers { aws = { source = "hashicorp/aws" version = "~> 5.0" } } } provider "aws" { region = "us-east-1" } resource "aws_s3_bucket" "example_bucket" { bucket = "my-unique-terraform-guide-bucket-12345" tags = { Name = "My Terraform Guide Bucket" Environment = "Dev" ManagedBy = "Terraform" } }
์ด ์ฝ๋๊ฐ ๋ฌด์์ ํ๋์ง ์์ธํ ์ดํด๋ณด๊ฒ ์ต๋๋ค:
terraform๋ธ๋ก์ ํ์ ํ๋ก๋ฐ์ด๋๋ฅผ ํฌํจํ์ฌ ํต์ฌ ํ ๋ผํผ ์ค์ ์ ์ ์ํ๋ ๊ณณ์ ๋๋ค. ์ฌ๊ธฐ์๋ HashiCorp์ `aws` ํ๋ก๋ฐ์ด๋๊ฐ ํ์ํ๊ณ ๋ฒ์ 5.x์ ํธํ๋จ์ ์ง์ ํฉ๋๋ค.provider๋ธ๋ก์ ์ง์ ๋ ํ๋ก๋ฐ์ด๋(์ด ๊ฒฝ์ฐ `aws`)๋ฅผ ๊ตฌ์ฑํฉ๋๋ค. ํ ๋ผํผ์๊ฒ `us-east-1` AWS ๋ฆฌ์ ์ ๋ฆฌ์์ค๋ฅผ ์์ฑํ๋๋ก ์ง์ํฉ๋๋ค.resource๋ธ๋ก์ด ๊ฐ์ฅ ์ค์ํฉ๋๋ค. ์ธํ๋ผ ์กฐ๊ฐ์ ์ ์ธํฉ๋๋ค. ๊ตฌ๋ฌธ์ `resource "_ " " "`์ ๋๋ค. ์ฌ๊ธฐ์ `aws_s3_bucket`์ ๋ฆฌ์์ค ์ ํ์ด๊ณ , `example_bucket`์ ํ ๋ผํผ ์ฝ๋ ๋ด์์ ์ด ๋ฆฌ์์ค๋ฅผ ์ฐธ์กฐํ๋ ๋ฐ ์ฌ์ฉํ๋ ๋ก์ปฌ ์ด๋ฆ์ ๋๋ค. ๋ธ๋ก ๋ด๋ถ์์ `bucket` ์ด๋ฆ ๋ฐ ์ค๋ช ์ ์ธ `tags`์ ๊ฐ์ ๋ฆฌ์์ค์ ๋ํ ์ธ์๋ฅผ ์ ์ํฉ๋๋ค.
ํต์ฌ ํ ๋ผํผ ์ํฌํ๋ก์ฐ
์ด์ ๊ตฌ์ฑ ํ์ผ์ด ์์ผ๋, ํฐ๋ฏธ๋์์ ํ๋ก์ ํธ ๋๋ ํ ๋ฆฌ๋ก ์ด๋ํ์ฌ ๋ค์ ๋จ๊ณ๋ฅผ ๋ฐ๋ฅด์ธ์.
1. terraform init
์ด ๋ช ๋ น์ ์์ ๋๋ ํ ๋ฆฌ๋ฅผ ์ด๊ธฐํํฉ๋๋ค. ๊ตฌ์ฑ ํ์ผ์ ์ฝ๊ณ ํ์ํ ํ๋ก๋ฐ์ด๋ ํ๋ฌ๊ทธ์ธ(์ด ๊ฒฝ์ฐ `aws` ํ๋ก๋ฐ์ด๋)์ ๋ค์ด๋ก๋ํ๋ฉฐ ์ํ ๊ด๋ฆฌ๋ฅผ ์ํ ๋ฐฑ์๋๋ฅผ ์ค์ ํฉ๋๋ค. ์ด ๋ช ๋ น์ ํ๋ก์ ํธ๋น ํ ๋ฒ๋ง ์คํํ๊ฑฐ๋ ์ ํ๋ก๋ฐ์ด๋๋ฅผ ์ถ๊ฐํ ๋๋ง๋ค ์คํํ๋ฉด ๋ฉ๋๋ค.
$ terraform init
2. terraform plan
์ด ๋ช ๋ น์ ์คํ ๊ณํ์ ์์ฑํฉ๋๋ค. ํ ๋ผํผ์ ์ฝ๋์ ์ ์๋ ์ํ๋ฅผ ๋ฌ์ฑํ๋ ๋ฐ ํ์ํ ์์ ์ ๊ฒฐ์ ํฉ๋๋ค. ์ถ๊ฐ, ๋ณ๊ฒฝ ๋๋ ํ๊ดด๋ ๋ด์ฉ์ ์์ฝํ์ฌ ๋ณด์ฌ์ค๋๋ค. ์ฒซ ์คํ์ด๋ฏ๋ก, ์ ๋ฆฌ์์ค ํ๋๋ฅผ ์์ฑํ ๊ฒ์ ์ ์ํ ๊ฒ์ ๋๋ค.
$ terraform plan
์ถ๋ ฅ์ ์ฃผ์ ๊น๊ฒ ๊ฒํ ํ์ธ์. ์ด๊ฒ์ด ๋ฐ๋ก ์์ ์ ๊ฒ์ ๋๋ค.
3. terraform apply
์ด ๋ช ๋ น์ ๊ณํ์ ์ค๋ช ๋ ๋ณ๊ฒฝ ์ฌํญ์ ์ ์ฉํฉ๋๋ค. ๋ค์ ๊ณํ์ ๋ณด์ฌ์ฃผ๊ณ ์งํํ๊ธฐ ์ ์ ํ์ธ์ ์์ฒญํฉ๋๋ค. `yes`๋ฅผ ์ ๋ ฅํ๊ณ Enter๋ฅผ ๋๋ฅด์ธ์.
$ terraform apply
์ด์ ํ ๋ผํผ์ AWS API์ ํต์ ํ์ฌ S3 ๋ฒํท์ ์์ฑํฉ๋๋ค. ์๋ฃ๋๋ฉด AWS ์ฝ์์ ๋ก๊ทธ์ธํ์ฌ ์๋ก ์์ฑ๋ ๋ฆฌ์์ค๋ฅผ ํ์ธํ ์ ์์ต๋๋ค!
4. terraform destroy
๋ฆฌ์์ค๋ฅผ ์ฌ์ฉํ ํ์๋ ์ฝ๊ฒ ์ ๋ฆฌํ ์ ์์ต๋๋ค. ์ด ๋ช ๋ น์ ํ๊ดด๋ ๋ชจ๋ ๊ฒ์ ๋ณด์ฌ์ฃผ๋ฉฐ, `apply`์ ๋ง์ฐฌ๊ฐ์ง๋ก ํ์ธ์ ์์ฒญํฉ๋๋ค.
$ terraform destroy
์ด ๊ฐ๋จํ `init -> plan -> apply` ๋ฃจํ๋ ๋ชจ๋ ํ ๋ผํผ ํ๋ก์ ํธ์ ์ฌ์ฉํ ๊ธฐ๋ณธ ์ํฌํ๋ก์ฐ์ ๋๋ค.
๊ธ๋ก๋ฒ ํ์ ์ํ ํ ๋ผํผ ๋ชจ๋ฒ ์ฌ๋ก
๋ ธํธ๋ถ์ ๋จ์ผ ํ์ผ์์ ๋ถ์ฐ๋ ํ์ ์ํ ํ๋ก๋์ ์ธํ๋ผ ๊ด๋ฆฌ๋ก ์ ํํ๋ ค๋ฉด ๋ณด๋ค ๊ตฌ์กฐํ๋ ์ ๊ทผ ๋ฐฉ์์ด ํ์ํฉ๋๋ค. ํ์ฅ์ฑ, ๋ณด์ ๋ฐ ํ์ ์ ์ํด ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ์ค์ํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
๋ชจ๋์ ์ฌ์ฉํ ํ๋ก์ ํธ ๊ตฌ์กฐํ
์ธํ๋ผ๊ฐ ์ปค์ง์๋ก ๋ชจ๋ ๊ฒ์ ๋จ์ผ main.tf ํ์ผ์ ๋ฃ๋ ๊ฒ์ ๊ด๋ฆฌํ๊ธฐ ์ด๋ ค์์ง๋๋ค. ํด๊ฒฐ์ฑ
์ ๋ชจ๋์ ์ฌ์ฉํ๋ ๊ฒ์
๋๋ค. ํ
๋ผํผ ๋ชจ๋์ ๊ทธ๋ฃน์ผ๋ก ๊ด๋ฆฌ๋๋ ์์ฒด ํฌํจ๋ ๊ตฌ์ฑ ํจํค์ง์
๋๋ค. ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ํจ์์ฒ๋ผ ์๊ฐํ ์ ์์ต๋๋ค. ์ฆ, ์
๋ ฅ์ ๋ฐ์ ๋ฆฌ์์ค๋ฅผ ์์ฑํ๊ณ ์ถ๋ ฅ์ ์ ๊ณตํฉ๋๋ค.
์ธํ๋ผ๋ฅผ ๋ ผ๋ฆฌ์ ๊ตฌ์ฑ ์์(์: ๋คํธ์ํน ๋ชจ๋, ์น ์๋ฒ ๋ชจ๋, ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ชจ๋)๋ก ๋ถํ ํจ์ผ๋ก์จ ๋ค์์ ์ป์ ์ ์์ต๋๋ค:
- ์ฌ์ฌ์ฉ์ฑ: ๋์ผํ ๋ชจ๋์ ์ฌ์ฉํ์ฌ ๋ค์ํ ํ๊ฒฝ(๊ฐ๋ฐ, ์คํ ์ด์ง, ํ๋ก๋์ )์ ์ผ๊ด๋ ์ธํ๋ผ๋ฅผ ๋ฐฐํฌํ ์ ์์ต๋๋ค.
- ์ ์ง๋ณด์์ฑ: ๋ณ๊ฒฝ ์ฌํญ์ด ํน์ ๋ชจ๋๋ก ๊ฒฉ๋ฆฌ๋์ด ์ฝ๋๋ฒ ์ด์ค๋ฅผ ์ดํดํ๊ณ ๊ด๋ฆฌํ๊ธฐ๊ฐ ๋ ์ฌ์์ง๋๋ค.
- ์กฐ์งํ: ๋ชจ๋์ ์ฌ์ฉํ์ฌ ์ ๊ตฌ์กฐํ๋ ํ๋ก์ ํธ๋ ์๋ก์ด ํ์์ด ํ์ํ๊ธฐ ํจ์ฌ ์ฝ์ต๋๋ค.
์ผ๋ฐ์ ์ธ ํ๋ก์ ํธ ๊ตฌ์กฐ๋ ๋ค์๊ณผ ๊ฐ์ ์ ์์ต๋๋ค:
/environments /staging main.tf variables.tf outputs.tf /production main.tf variables.tf outputs.tf /modules /vpc main.tf variables.tf outputs.tf /web-server main.tf variables.tf outputs.tf
์ํ ๋ง์คํฐํ๊ธฐ: ์๊ฒฉ ๋ฐฑ์๋ ๋ฐ ์ ๊ธ
๊ธฐ๋ณธ์ ์ผ๋ก ํ ๋ผํผ์ ์ํ ํ์ผ(`terraform.tfstate`)์ ๋ก์ปฌ ํ๋ก์ ํธ ๋๋ ํ ๋ฆฌ์ ์ ์ฅํฉ๋๋ค. ์ด๋ ๋จ๋ ์์ ์๋ ๊ด์ฐฎ์ง๋ง, ํ์๊ฒ๋ ํฐ ๋ฌธ์ ์ ๋๋ค:
- ํ ํ์์ด ๋ณ๊ฒฝ ์ฌํญ์ ์ ์ฉํ๋ฉด ๋ค๋ฅธ ํ์์ ์ํ ํ์ผ์ด ์ค๋๋ฉ๋๋ค.
- ๋ ์ฌ๋์ด ๋์์ `terraform apply`๋ฅผ ์คํํ๋ ๊ฒ์ ๋ํ ๋ณดํธ ์ฅ์น๊ฐ ์์ด, ์ํ ํ์ผ๊ณผ ์ธํ๋ผ๋ฅผ ์์์ํฌ ์ ์์ต๋๋ค.
- ์ํ ํ์ผ์ ๋ก์ปฌ์ ์ ์ฅํ๋ ๊ฒ์ ๋ฏผ๊ฐํ ์ ๋ณด๋ฅผ ํฌํจํ ์ ์์ผ๋ฏ๋ก ๋ณด์ ์ํ์ ๋๋ค.
ํด๊ฒฐ์ฑ ์ ์๊ฒฉ ๋ฐฑ์๋๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๋๋ค. ์ด๋ ํ ๋ผํผ์๊ฒ ์ํ ํ์ผ์ ๊ณต์ ๋ ์๊ฒฉ ์์น์ ์ ์ฅํ๋๋ก ์ง์ํฉ๋๋ค. ์ธ๊ธฐ ์๋ ๋ฐฑ์๋๋ก๋ AWS S3, Azure Blob Storage, Google Cloud Storage๊ฐ ์์ต๋๋ค. ๊ฒฌ๊ณ ํ ์๊ฒฉ ๋ฐฑ์๋ ๊ตฌ์ฑ์๋ ๋ ๋ช ์ด์์ ์ฌ๋์ด ๋์์ ์ ์ฉ ์์ ์ ์คํํ๋ ๊ฒ์ ๋ฐฉ์งํ๋ ์ํ ์ ๊ธ๋ ํฌํจ๋ฉ๋๋ค.
๋ค์์ AWS S3๋ฅผ ์ ์ฅ์๋ก, DynamoDB๋ฅผ ์ ๊ธ์ฉ์ผ๋ก ์ฌ์ฉํ๋ ์๊ฒฉ ๋ฐฑ์๋ ๊ตฌ์ฑ ์์์
๋๋ค. ์ด๋ main.tf ํ์ผ์ terraform ๋ธ๋ก ์์ ๋ค์ด๊ฐ๋๋ค:
terraform { backend "s3" { bucket = "my-terraform-state-storage-bucket" key = "global/s3/terraform.tfstate" region = "us-east-1" dynamodb_table = "my-terraform-state-lock-table" encrypt = true } }
์ฐธ๊ณ : S3 ๋ฒํท๊ณผ DynamoDB ํ ์ด๋ธ์ ๋ฏธ๋ฆฌ ์์ฑํด์ผ ํฉ๋๋ค.
๊ตฌ์ฑ ๋ณด์: ์ํฌ๋ฆฟ ๊ด๋ฆฌ
์ ๋, ์ ๋ ๋น๋ฐ๋ฒํธ, API ํค, ์ธ์ฆ์์ ๊ฐ์ ๋ฏผ๊ฐํ ๋ฐ์ดํฐ๋ฅผ ํ ๋ผํผ ํ์ผ์ ์ง์ ํ๋์ฝ๋ฉํ์ง ๋ง์ญ์์ค. ์ด ํ์ผ๋ค์ ๋ฒ์ ์ ์ด ์์คํ ์ ์ฒดํฌ์ธ๋๋๋ก ์๋๋์์ผ๋ฉฐ, ์ด๋ ์ ์ฅ์์ ์ ๊ทผํ ์ ์๋ ๋ชจ๋ ์ฌ๋์๊ฒ ์ํฌ๋ฆฟ์ ๋ ธ์ถ์ํฌ ๊ฒ์ ๋๋ค.
๋์ ๋ฐํ์์ ์ํฌ๋ฆฟ์ ์ฃผ์ ํ๋ ์์ ํ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ์ธ์:
- HashiCorp Vault: ํ ๋ผํผ๊ณผ ๊ธด๋ฐํ๊ฒ ํตํฉ๋๋ ์ํฌ๋ฆฟ ๊ด๋ฆฌ๋ฅผ ์ํ ์ ์ฉ ๋๊ตฌ์ ๋๋ค.
- ํด๋ผ์ฐ๋ ๋ค์ดํฐ๋ธ ์ํฌ๋ฆฟ ๋งค๋์ : AWS Secrets Manager, Azure Key Vault ๋๋ Google Secret Manager์ ๊ฐ์ ์๋น์ค๋ฅผ ์ฌ์ฉํ์ธ์. ํ ๋ผํผ ์ฝ๋์ ์ด๋ฌํ ์๋น์ค์์ ์ํฌ๋ฆฟ์ ์ฝ์ ๊ถํ์ ๋ถ์ฌํ ์ ์์ต๋๋ค.
- ํ๊ฒฝ ๋ณ์: ๋ ๊ฐ๋จํ ๋ฐฉ๋ฒ์ผ๋ก ์ํฌ๋ฆฟ์ ํ๊ฒฝ ๋ณ์๋ก ์ ๋ฌํ ์ ์์ต๋๋ค. ๋๋ถ๋ถ์ ํ ๋ผํผ ํ๋ก๋ฐ์ด๋๋ ํ์ค ํ๊ฒฝ ๋ณ์(์: `TF_VAR_api_key`)์์ ์๊ฒฉ ์ฆ๋ช ์ ์๋์ผ๋ก ์ฐพ์ต๋๋ค.
๋์ ๊ตฌ์ฑ: ์ ๋ ฅ ๋ณ์ ๋ฐ ์ถ๋ ฅ ๊ฐ
๊ตฌ์ฑ์ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ๊ณ ์ ์ฐํ๊ฒ ๋ง๋ค๋ ค๋ฉด ๊ฐ์ ํ๋์ฝ๋ฉํ์ง ๋ง์ธ์. ์
๋ ฅ ๋ณ์๋ฅผ ์ฌ์ฉํ์ฌ ์ฝ๋๋ฅผ ๋งค๊ฐ๋ณ์ํํ์ธ์. variables.tf ํ์ผ์ ์ ์ํฉ๋๋ค:
ํ์ผ: variables.tf
variable "environment_name" { description = "The name of the environment (e.g., staging, production)." type = string } variable "instance_count" { description = "The number of web server instances to deploy." type = number default = 1 }
๊ทธ๋ฐ ๋ค์ ๋ค๋ฅธ ํ์ผ์์ `var.variable_name`์ ์ฌ์ฉํ์ฌ ์ด ๋ณ์๋ค์ ์ฐธ์กฐํ ์ ์์ต๋๋ค.
๋ง์ฐฌ๊ฐ์ง๋ก ์ถ๋ ฅ ๊ฐ์ ์ฌ์ฉํ์ฌ ์์ฑํ ๋ฆฌ์์ค์ ๋ํ ์ ์ฉํ ์ ๋ณด๋ฅผ ๋
ธ์ถํฉ๋๋ค. ์ด๋ ๋ชจ๋์ ํนํ ์ค์ํฉ๋๋ค. outputs.tf ํ์ผ์ ์ ์ํฉ๋๋ค:
ํ์ผ: outputs.tf
output "web_server_public_ip" { description = "The public IP address of the primary web server." value = aws_instance.web.public_ip }
์ด๋ฌํ ์ถ๋ ฅ์ ๋ช ๋ น์ค์์ ์ฝ๊ฒ ์ฟผ๋ฆฌํ๊ฑฐ๋ ๋ค๋ฅธ ํ ๋ผํผ ๊ตฌ์ฑ์ ์ ๋ ฅ์ผ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค.
๋ฒ์ ์ ์ด๋ฅผ ํตํ ํ์ ๋ฐ ๊ฑฐ๋ฒ๋์ค
์ธํ๋ผ ์ฝ๋๋ ์ค์ํ ์์ฐ์ด๋ฉฐ ๊ทธ๋ ๊ฒ ๋ค๋ฃจ์ด์ ธ์ผ ํฉ๋๋ค. ๋ชจ๋ ํ ๋ผํผ ์ฝ๋๋ Git๊ณผ ๊ฐ์ ๋ฒ์ ์ ์ด ์์คํ ์ ์ ์ฅ๋์ด์ผ ํฉ๋๋ค. ์ด๋ ๋ค์์ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค:
- ์ฝ๋ ๊ฒํ : ํ ๋ฆฌํ์คํธ(๋๋ ๋ณํฉ ๋ฆฌํ์คํธ)๋ฅผ ์ฌ์ฉํ์ฌ ๋๋ฃ๊ฐ ์ธํ๋ผ ๋ณ๊ฒฝ ์ฌํญ์ ์ ์ฉํ๊ธฐ ์ ์ ๊ฒํ ํ๋๋ก ํฉ๋๋ค. ์ด๋ ์ค๋ฅ๋ฅผ ๋ฐ๊ฒฌํ๊ณ , ํ์ค์ ์ ์ฉํ๊ณ , ์ง์์ ๊ณต์ ํ๋ ๊ฐ๋ ฅํ ๋ฐฉ๋ฒ์ ๋๋ค.
- ๊ฐ์ฌ ์ถ์ : `git blame` ๋ฐ `git log`๋ ๋๊ฐ, ์ธ์ , ์ ๋ฌด์์ ๋ณ๊ฒฝํ๋์ง์ ๋ํ ์ ์ฒด ๊ธฐ๋ก์ ์ ๊ณตํฉ๋๋ค.
- ๋ธ๋์นญ ์ ๋ต: ๋ธ๋์น๋ฅผ ์ฌ์ฉํ์ฌ ํ๋ก๋์ ์ธํ๋ผ์ ์ํฅ์ ์ฃผ์ง ์๊ณ ์๋ก์ด ๊ธฐ๋ฅ ๋๋ ๋ฒ๊ทธ ์์ ์์ ์ ๋ ๋ฆฝ์ ์ผ๋ก ์ํํฉ๋๋ค.
๋ก์ปฌ ์ํ ํ์ผ, ํฌ๋์ ๋ก๊ทธ ๋๋ ํ๋ก๋ฐ์ด๋ ํ๋ฌ๊ทธ์ธ๊ณผ ๊ฐ์ ๋ฏผ๊ฐํ ํ์ผ์ ์ปค๋ฐ์ ๋ฐฉ์งํ๊ธฐ ์ํด ํญ์ ํ๋ก์ ํธ์ .gitignore ํ์ผ์ ํฌํจํ์ธ์.
๊ณ ๊ธ ํ ๋ผํผ ๊ฐ๋
๊ธฐ๋ณธ ์ฌํญ์ ์ต์ํด์ง๋ฉด ์ํฌํ๋ก์ฐ๋ฅผ ํฅ์์ํค๊ธฐ ์ํ ๊ณ ๊ธ ๊ธฐ๋ฅ์ ํ์ํ ์ ์์ต๋๋ค.
์ํฌ์คํ์ด์ค๋ฅผ ์ฌ์ฉํ ํ๊ฒฝ ๊ด๋ฆฌ
ํ
๋ผํผ ์ํฌ์คํ์ด์ค๋ฅผ ์ฌ์ฉํ๋ฉด ๋์ผํ ๊ตฌ์ฑ์ ๋ํด ์ฌ๋ฌ ๊ฐ์ ๊ฐ๋ณ ์ํ ํ์ผ์ ๊ด๋ฆฌํ ์ ์์ต๋๋ค. ์ด๋ ์ฝ๋๋ฅผ ๋ณต์ ํ์ง ์๊ณ ๋ `dev`, `staging`, `production`๊ณผ ๊ฐ์ ๋ค์ํ ํ๊ฒฝ์ ๊ด๋ฆฌํ๋ ์ผ๋ฐ์ ์ธ ๋ฐฉ๋ฒ์
๋๋ค. `terraform workspace select
ํ๋ก๋น์ ๋๋ฅผ ์ฌ์ฉํ ๊ธฐ๋ฅ ํ์ฅ (์ฃผ์ ์ฌํญ)
ํ๋ก๋น์ ๋๋ ๋ฆฌ์์ค ์์ฑ ๋๋ ํ๊ดด์ ์ผ๋ถ๋ก ๋ก์ปฌ ๋๋ ์๊ฒฉ ๋จธ์ ์์ ์คํฌ๋ฆฝํธ๋ฅผ ์คํํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด, ๊ฐ์ ๋จธ์ ์ด ์์ฑ๋ ํ ๊ตฌ์ฑ ์คํฌ๋ฆฝํธ๋ฅผ ์คํํ๊ธฐ ์ํด `remote-exec` ํ๋ก๋น์ ๋๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๊ณต์ ํ ๋ผํผ ๋ฌธ์๋ ํ๋ก๋น์ ๋๋ฅผ ์ตํ์ ์๋จ์ผ๋ก ์ฌ์ฉํ ๊ฒ์ ๊ถ์ฅํฉ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก Ansible, Chef ๋๋ Puppet๊ณผ ๊ฐ์ ์ ์ฉ ๊ตฌ์ฑ ๊ด๋ฆฌ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ Packer์ ๊ฐ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ์ฉ์ ์ง์ ๋จธ์ ์ด๋ฏธ์ง๋ฅผ ๋น๋ํ๋ ๊ฒ์ด ๋ ์ข์ต๋๋ค.
ํ ๋ผํผ ํด๋ผ์ฐ๋ ๋ฐ ํ ๋ผํผ ์ํฐํ๋ผ์ด์ฆ
๋๊ท๋ชจ ์กฐ์ง์ ์ํด HashiCorp๋ ํ ๋ผํผ ํด๋ผ์ฐ๋(๊ด๋ฆฌํ ์๋น์ค)์ ํ ๋ผํผ ์ํฐํ๋ผ์ด์ฆ(์์ฒด ํธ์คํ ๋ฒ์ )๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ด ํ๋ซํผ๋ค์ ์คํ ์์ค ๋ฒ์ ์ ๊ธฐ๋ฐ์ผ๋ก ํ ํ์ , ๊ฑฐ๋ฒ๋์ค ๋ฐ ์ ์ฑ ์ํ์ ์ํ ์ค์ ์ง์ค์ ํ๊ฒฝ์ ์ ๊ณตํฉ๋๋ค. ๋ํ ๋น๊ณต๊ฐ ๋ชจ๋ ๋ ์ง์คํธ๋ฆฌ, ์ผํฐ๋ฌ์ ์ฌ์ฉํ ์ฝ๋ํ ์ ์ฑ , ๋ฒ์ ์ ์ด ์์คํ ๊ณผ์ ๊ธด๋ฐํ ํตํฉ๊ณผ ๊ฐ์ ๊ธฐ๋ฅ์ ์ ๊ณตํ์ฌ ์ธํ๋ผ๋ฅผ ์ํ ์์ ํ CI/CD ํ์ดํ๋ผ์ธ์ ๊ตฌ์ถํฉ๋๋ค.
๊ฒฐ๋ก : ์ธํ๋ผ์ ๋ฏธ๋๋ฅผ ํฌ์ฉํ๋ฉฐ
์ฝ๋ํ ์ธํ๋ผ๋ ๋ ์ด์ ์๋ฆฌํธ ๊ธฐ์ ๊ธฐ์ ์ ์ํ ํ์ ๊ดํ์ด ์๋๋๋ค. ํ๋ ๋ฐ๋ธ์ต์ค์ ๊ธฐ์ด ์์์ด์ ํด๋ผ์ฐ๋์์ ์๋, ์์ ์ฑ ๋ฐ ๊ท๋ชจ๋ฅผ ๊ฐ์ง๊ณ ์ด์ํ๋ ค๋ ๋ชจ๋ ์กฐ์ง์๊ฒ ํ์์ ์ธ ์์์ ๋๋ค. ํ ๋ผํผ์ ์ด ํจ๋ฌ๋ค์์ ํจ๊ณผ์ ์ผ๋ก ๊ตฌํํ ์ ์๋ ๊ฐ๋ ฅํ๊ณ ์ ์ฐํ๋ฉฐ ํ๋ซํผ์ ๊ตฌ์ ๋ฐ์ง ์๋ ๋๊ตฌ๋ฅผ ์ ๊ณตํฉ๋๋ค.
์ฝ๋๋ก ์ธํ๋ผ๋ฅผ ์ ์ํจ์ผ๋ก์จ ์๋ํ, ์ผ๊ด์ฑ ๋ฐ ํ์ ์ ์ธ๊ณ๋ฅผ ์ด ์ ์์ต๋๋ค. ๊ฐ์ ์ฌ๋ฌด์ค์ ์๋ ์ ์ธ๊ณ์ ํฉ์ด์ ธ ์๋ ํ์ด ์ํํ๊ฒ ํ๋ ฅํ ์ ์๋๋ก ์ญ๋์ ๊ฐํํฉ๋๋ค. ์ํ์ ์ค์ด๊ณ ๋น์ฉ์ ์ต์ ํํ๋ฉฐ ๊ถ๊ทน์ ์ผ๋ก ๊ณ ๊ฐ์๊ฒ ๊ฐ์น๋ฅผ ์ ๊ณตํ๋ ๋ฅ๋ ฅ์ ๊ฐ์ํํฉ๋๋ค.
IaC๋ก์ ์ฌ์ ์ dauntingํ๊ฒ ๋๊ปด์ง ์ ์์ง๋ง, ํต์ฌ์ ์๊ฒ ์์ํ๋ ๊ฒ์ ๋๋ค. ์ธํ๋ผ์ ๊ฐ๋จํ๊ณ ์ค์ํ์ง ์์ ๊ตฌ์ฑ ์์๋ฅผ ์ ํํ๊ณ , ํ ๋ผํผ์ผ๋ก ์ ์ํ๋ฉฐ, `plan` ๋ฐ `apply` ์ํฌํ๋ก์ฐ๋ฅผ ์ฐ์ตํ์ธ์. ์์ ๊ฐ์ ์ป์ผ๋ฉด์ ์ ์ฐจ ํ ๋ผํผ ์ฌ์ฉ์ ํ์ฅํ๊ณ , ์ฌ๊ธฐ์ ์ค๋ช ๋ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ์ฑํํ๋ฉฐ, ์ด๋ฅผ ํ์ ํต์ฌ ํ๋ก์ธ์ค์ ํตํฉํ์ธ์. ์ค๋ ํ ๋ผํผ์ ๋ฐฐ์ฐ๊ณ ๊ตฌํํ๋ ๋ฐ ํฌ์ํ๋ ๊ฒ์ ๋ด์ผ ์กฐ์ง์ ๋ฏผ์ฒฉ์ฑ๊ณผ ํ๋ณต๋ ฅ์ ์๋นํ ์ด๋์ ๊ฐ์ ธ๋ค์ค ๊ฒ์ ๋๋ค.