[Terraform 튜토리얼 1-5] 선언형 vs 명령형: Terraform은 왜 선언형인가?
![[Terraform 튜토리얼 1-5] 선언형 vs 명령형: Terraform은 왜 선언형인가?](/content/images/size/w1200/2025/05/ChatGPT-Image-2025----5----5---------05_59_58.png)
Terraform을 쓰다 보면 종종 듣게 되는 말이 하나 있어요:
Terraform은 "선언형(Declarative)" 도구다.
그런데 이게 도대체 무슨 뜻일까요?
"명령형(Imperative)"이랑은 뭐가 다르고, 왜 Terraform은 선언형일까요?
🧠 선언형과 명령형, 개념부터 정리
구분 | 선언형 (Declarative) | 명령형 (Imperative) |
---|---|---|
핵심 개념 | 무엇이 되어야 하는지만 선언 | 어떻게 할지를 하나하나 명령 |
예시 | “난 스테이크 먹을래” | “고기 꺼내서, 굽고, 소금 뿌리고, 접시에 담아” |
Terraform 예시 | resource "aws_instance" {...} |
aws ec2 run-instances --image-id ... |
🍽️ 식당 비유로 이해해 봅시다
- 선언형 방식은 마치 레스토랑에 가서 메뉴를 고르는 것과 같아요.
- “스테이크 주세요!”
- 요리, 플레이팅, 순서 고민은 셰프가 알아서 합니다.
- 결과물(스테이크)이 어떻게든 나오긴 나와요.
- 반대로, 명령형 방식은 직접 요리하는 것과 같아요.
- 냉장고에서 재료 꺼내고, 순서대로 조리하고, 불 조절도 하고, 접시에 담기까지 전부 직접 해야 해요.
- 순서 하나라도 틀리면? 생고기 플레이팅도 가능하죠.
🧱 인프라에선 어떻게 다를까?
- 명령형 도구
- 예: Ansible, Bash Script
- 순서를 정해줘야 해요 (서브넷 먼저, 그다음 EC2, 그리고 나서 보안 그룹 설정 등)
- 실행할 때마다 똑같은 결과가 나올 거란 보장이 없음 (예: 중복 생성 가능)
- 선언형 도구 (Terraform)
- 어떤 인프라 리소스가 “있어야 하는지”만 기술
- Terraform이 계획(plan) 세우고, 필요한 작업만 적용(apply)
- 이미 만들어졌다면 그대로 둠 = 멱등성(idempotence)도 보장
🍝 선언형의 장점
- 코드가 깔끔함: 복잡한 순서, 조건문 필요 없음
- 결과 예측 가능: 상태(state) 기반으로 차이만 반영
- 협업에 강함: 누구나 코드만 봐도 최종 목표를 이해할 수 있음
- 롤백/드리프트 관리 쉬움: 코드가 곧 진실(source of truth)
🧭 그래서 Terraform은 선언형이다
Terraform에서 우리는 이렇게 말해요:
resource "aws_instance" "web" {
ami = "ami-123456"
instance_type = "t2.micro"
}
이게 무슨 뜻이냐면:
“나는 이 환경에t2.micro
EC2가 하나 존재하길 원해.”
그리고 Terraform은 알아서 “없는걸 만들고”, “이미 있으면 건드리지 않아요.”
📌 정리하자면
명령형은 “내가 시킨 대로만 하는 요리사”
선언형은 “내가 주문한 걸 알아서 만들어주는 레스토랑”
Terraform은 후자예요.
원하는 인프라의 상태만 정의하면,
Terraform이 그 차이를 계산하고 필요한 작업만 수행해 줍니다.
이게 바로 Terraform이 선언형 도구라는 뜻이에요.
🔜 다음 글 예고
다음 튜토리얼에서는 개발자라면 다들 알고 있어야 할 소프트웨어 원칙,
바로 DRY (Don't Repeat Yourself) 원칙이 Terraform에선 어떻게 적용되는지를 다뤄볼게요.
