이번 강은 인프라를 코드로 정의하는 IaC(Infrastructure as Code)를 다룬다.
5강에서 CLI로 명령을 내렸다면, IaC는 한 걸음 더 나아가 인프라 전체를 코드 파일로 선언한다. 클릭이나 단발 명령 대신, 원하는 상태를 코드로 적어 두고 한 번에 만든다.
이 강의 목표는 다음과 같다.
- IaC가 왜 필요한지 이해한다.
- Terraform과 Ansible의 역할 차이를 안다.
- 코드로 인프라를 반복·재현하는 흐름을 잡는다.
1. 왜 IaC인가
콘솔 클릭으로 만든 인프라는 재현이 어렵다. 누가 언제 무엇을 바꿨는지 남지 않는다.
- 반복·재현: 같은 코드로 개발·운영 환경을 똑같이 찍어낸다.
- 버전관리: Git으로 변경 이력을 남기고 리뷰한다.
- 협업: 코드 리뷰로 인프라 변경을 검토·승인한다.
2. Terraform — 무엇을 만들지 선언
Terraform은 원하는 리소스를 선언(.tf 파일)하면 그 상태로 맞춰 준다.
- "VM 2대, VPC 1개, LB 1개가 있어야 한다"고 적고
apply한다. - 이미 있으면 그대로 두고, 없으면 만들고, 지워야 하면 지운다(선언형).
- Zadara는 EC2 호환이라 AWS 프로바이더를 활용한다.
3. Ansible — 서버 안을 구성
Ansible은 만들어진 서버 내부를 구성·배포한다.
- 패키지 설치, 설정 파일 배포, 서비스 시작 등을 playbook에 적는다.
- Terraform이 "그릇(인프라)"을 만들면, Ansible이 그 안을 "채운다".
| 도구 | 역할 |
|---|---|
| Terraform | 인프라 자원 생성·관리 (VM·VPC·LB) |
| Ansible | 서버 내부 구성·앱 배포 |
| Git | 코드 버전관리·리뷰 |
4. 흐름
- Terraform 코드로 VPC·서브넷·VM·LB를 선언한다.
terraform apply로 Zadara에 한 번에 프로비저닝한다.- Ansible playbook으로 각 VM에 앱과 설정을 배포한다.
- 코드를 Git에 올려 이력을 남기고 팀과 공유한다.
예제
예제) 개발·스테이징·운영 세 환경을 똑같은 구조로 유지해야 한다. 손으로 만들면 환경마다 미묘하게 달라진다. 어떻게 통일하나?
해설) 인프라를 Terraform 코드 하나로 정의하고, 변수(환경 이름·규모)만 바꿔 세 번 apply한다. 세 환경이 같은 코드에서 나오므로 구조가 동일하게 유지된다. 서버 내부 설정도 같은 Ansible playbook으로 배포하면 "개발에선 됐는데 운영에선 안 되는" 차이가 사라진다. 변경은 코드로 리뷰·기록되어 추적된다.
정리
- IaC는 인프라를 코드로 선언해 반복·재현·리뷰를 가능하게 한다.
- Terraform은 인프라 자원을, Ansible은 서버 내부 구성을 맡는다.
- Zadara는 AWS 호환이라 기존 Terraform·Ansible 자산을 재사용한다.
- 코드를 Git으로 버전관리해 변경을 추적한다.
다음 강에서는 이렇게 만든 인프라의 비용과 상태를 관리하는 법을 다룬다.
댓글 0
댓글은 운영자만 작성할 수 있어요.