Infrastructure as Code (IaC)
Infrastructure as Code (IaC)๋ ์๋ ํ๋ก์ธ์ค(manual processes) ๋์ ์ ์ฝ๋๋ก ์ธํ๋ผ๋ฅผ ๊ด๋ฆฌํ๊ณ ํ๋ก๋น์ ๋(provisioning)ํ๋ ๊ฒ์ ๋๋ค.
IaC๋ Configuration files(์ค์ ํ์ผ)์ ์์ ํ๊ณ ๋ฐฐํฌํจ์ผ๋ก์จ ์ธํ๋ผ๋ฅผ ๊ด๋ฆฌ ํ ์ ์์ต๋๋ค. ๋ํ ์ค์ ํ์ผ์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ์ธ์ ๋ ๊ฐ์ ํ๊ฒฝ์ ๋ณด์ฅํ ์ ์์ต๋๋ค.
IaC์ ํน์ง
๋น์ฉ ์ ๊ฐ : ์ธํ๋ผ๋ฅผ ํ๋ก๋น์ ๋ํ๋ ๊ฒ์ ์๊ฐ๊ณผ ๋น์ฉ์ด ๋ง์ด ๋๋ ์๋ ํ๋ก์ธ์ค์์ผ๋ IaC๋ฅผ ํตํด ์๊ฐ๊ณผ ๋น์ฉ์ ์ ์ฝ ํ ์ ์์ต๋๋ค.
๋น ๋ฅธ ์คํ : ์ค์ ํ์ผ์ ํตํด ๋์ผํ ์ธํ๋ผ๋ฅผ ํ์์ ์๊ด ์์ด ๋น ๋ฅด๊ณ ํจ์จ์ ์ผ๋ก ๊ตฌ์ถ ํ ์ ์์ต๋๋ค.
์๋ฌ ๊ฐ์ : ์ธํ๋ผ๋ฅผ ์๋์ผ๋ก ๊ตฌ์ฑํ๋ฉฐ ๋ฐ์ํ๋ ํด๋จผ์๋ฌ๋ฅผ ๊ฐ์์ํฌ์ ์์ต๋๋ค.
์ฌ์ฌ์ฉ์ฑ ํฅ์ : ์ฝ๋๋ก ์ธํ๋ผ๋ฅผ ๊ด๋ฆฌํ๊ธฐ ๋๋ฌธ์ ์ฝ๋๋ฅผ ์ฌ์ฌ์ฉ ํ ์ ์์ต๋๋ค.
๋ฒ์ ๊ด๋ฆฌ : IaC๋ ์ค์ ํ์ผ์ ์ฝ๋์ฒ๋ผ ๊ด๋ฆฌํ๊ธฐ ๋๋ฌธ์ ๋ฒ์ ๊ด๋ฆฌ(Version control)๊ฐ ๊ฐ๋ฅํฉ๋๋ค.
์ธํ๋ผ ์ผ๊ด์ฑ(consistency) ํฅ์ : ๋์ผํ ์ค์ ํ์ผ์ ๋์ผํ ๋ฒ์ ์ ๋์ผํ ์ธํ๋ผ๋ฅผ ๊ตฌ์ฑํฉ๋๋ค.
Mutable Infrastructure์ Immutable Infrastructure
Mutable infrastructure๋ ์๋ ํ๋ก๋น์ ๋(originally provisioned) ๋ ์ดํ๋ก ์์ ๋๊ฑฐ๋ ์ ๋ฐ์ดํธ ํ ์ ์๋ ์ธํ๋ผ ์คํธ๋ญ์ณ์ ๋๋ค.
์ด๋ ์ธํ๋ผ ์คํธ๋ญ์ณ์ ์ ์ฐ์ฑ์ ์ ๊ณตํ ์๋ ์์ง๋ง IaC์ ํฐ ์ด์ ์ธ ์ธํ๋ผ ์ผ๊ด์ฑ๊ณผ ๋ฒ์ ๊ด๋ฆฌ๋ฅผ ํตํด ์ป์ ์ ์๋ ์ด์ ์ ์ฝํ์ํต๋๋ค.
๊ฐ์ ๋ฒ์ ์ผ๋ก ๋ฐฐํฌ๋ ์ธํ๋ผ๋ผ๋ ์กฐ๊ธ์ ์์ ์ด ๊ฐํด์ง๋ฉด ๋ค๋ฅธ ์ธํ๋ผ๊ฐ ๋๊ฒ ๋ฉ๋๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ๋๋ถ๋ถ์ IaC๋ Immutable Infrastructure๋ก ๊ตฌํ๋ฉ๋๋ค.
Immutable Infrastructure๋ ์๋ ํ๋ก๋น์ ๋(originally provisioned)๋ ์ดํ๋ก ์์ ํ ์ ์๋ ์ธํ๋ผ ์คํธ๋ญ์ณ์ ๋๋ค.
๋ง์ฝ์ Immutable Infrastructure๋ฅผ ๋ณ๊ฒฝํด์ผ ํ๋ค๋ฉด ์๋ก์ด ์ธํ๋ผ(new infrastructure)๋ก ๊ต์ฒดํด์ผ ํฉ๋๋ค.
ํด๋ผ์ฐ๋์์๋ ์๋ก์ด ์ธํ๋ผ๋ ๋น ๋ฅด๊ฒ ๊ฐ๋ ํ ์ ์๊ธฐ ๋๋ฌธ์ immutable infrastructure๋ ํจ์ฌ ๋ ์คํ๊ฐ๋ฅํ๊ณ ํ์ค์ (much more feasible and practical)์ ๋๋ค.
Immutable Infrastructure๋ ์ธํ๋ผ๋ฅผ ๋ฒ์ ์ผ๋ก ๊ด๋ฆฌ ํ ์ ์๊ฒ ํด์ค๋๋ค. ์ด๋ ์ธํ๋ผ๋ฅผ ์์ ์๊ฒ ๋กค๋ฐฑํ ์ ์๊ฒ ํด์ค๋๋ค.
Declarative approach(์ ์ธํ ์ ๊ทผ) IaC์ Imperative approach(๋ช ๋ นํ ์ ๊ทผ) IaC
Declarative approach IaC์ ํ์ํ ๋ฆฌ์์ค์ ์ํ๋ ์์คํ ์ ์ํ๋ฅผ ์ ์(defines the desired state of the system)ํ๋ฉด IaC tool์ด ์ด๋ฅผ ๊ตฌ์ฑํฉ๋๋ค.
Impreative approach IaC๋ ์ํ๋ ์์คํ ์ ์ํ๋ฅผ ๋ฌ์ฑํ๊ธฐ ์ํ ๋ช ๋ น๋ค์ ์ ์(defines the specific commands needed to achieve the desired configuration)ํ๋ฉด IaC tool์ด ์ด๋ฅผ ๊ตฌ์ฑํฉ๋๋ค.
์ด๋ ์ฌ๋ฐ๋ฅธ ์์(correct order)๋ก ์คํ๋์ด์ผ ํ๊ธฐ ๋๋ฌธ์ Declarative IaC์ ๋นํด ๋ง์ ์ ๋ฌธ์ฑ์ด ํ์ํฉ๋๋ค.
IaC tool์ ์ข ์ข 2๊ฐ์ง ์ ๊ทผ ๋ฐฉ์ ๋ชจ๋์์ ์๋ ๋ ์ ์์ผ๋, 1๊ฐ์ง ๋ฐฉ์๋ง์ ์ฌ์ฉํ ๊ฒ์ ์ถ์ฒํฉ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก Declarative approach Iac๊ฐ ์ ํธ๋ฉ๋๋ค.
Configuration orchestration ์ Configuration management
- Configuration orchestration์ ์๋ฒ ์ธ์คํด์ค์ ๊ธฐํ ์ธํ๋ผ๋ฅผ ๊ตฌ์ถํ๊ณ ์๋ํ ํ๋๋ก ์ค๊ณ ๋์์ต๋๋ค. ์ข ๋ฅ๋ก๋ Terraform, AWS Cloud Formation ๋ฑ์ด ์์ต๋๋ค.
- Configuration management๋ ๊ธฐ์กด ์๋ฒ์ ์ธ์คํด์ค์ ์ํํธ์จ์ด๋ฅผ ์ค์นํ๊ณ ๊ด๋ฆฌํ๋๋ก ์ค๊ณ๋์์ต๋๋ค. ์ข ๋ฅ๋ก๋ Ansible, Puppet, Chef ๋ฑ์ด ์์ต๋๋ค.