[Terraform 튜토리얼 1-5] 선언형 vs 명령형: Terraform은 왜 선언형인가?

[Terraform 튜토리얼 1-5] 선언형 vs 명령형: Terraform은 왜 선언형인가?

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에선 어떻게 적용되는지를 다뤄볼게요.

[Terraform 튜토리얼 1-6] 중복 없애다 망한 썰 – DRY 원칙, 정말 항상 맞을까?
개발자라면 한 번쯤 들어봤을 말, “Don’t Repeat Yourself”, 줄여서 DRY 원칙. 이건 소프트웨어 개발에서 아주 중요한 원칙이에요. 중복을 줄이면 버그도 줄고, 유지 보수도 쉬워지고, 코드도 깔끔해지죠. 그런데… Terraform 같은 IaC 세계에서도 DRY가 무조건 좋을까요? 🤔 DRY가 뭔데? DRY 원칙의 핵심은 딱 하나: ”같은 걸 반복해서 쓰지 마.” * 상수 값, 로직, 설정

Read more

[Terraform 튜토리얼 1-6] 중복 없애다 망한 썰 – DRY 원칙, 정말 항상 맞을까?

[Terraform 튜토리얼 1-6] 중복 없애다 망한 썰 – DRY 원칙, 정말 항상 맞을까?

개발자라면 한 번쯤 들어봤을 말, "Don't Repeat Yourself", 줄여서 DRY 원칙. 이건 소프트웨어 개발에서 아주 중요한 원칙이에요. 중복을 줄이면 버그도 줄고, 유지 보수도 쉬워지고, 코드도 깔끔해지죠. 그런데… Terraform 같은 IaC 세계에서도 DRY가 무조건 좋을까요? 🤔 DRY가 뭔데? DRY 원칙의 핵심은 딱 하나: "같은 걸 반복해서 쓰지 마." * 상수 값, 로직, 설정

By Chansong
[Terraform 튜토리얼 1-4] 모듈이 정리가 안 될 땐, 응집도(Cohesion)를 의심하라

[Terraform 튜토리얼 1-4] 모듈이 정리가 안 될 땐, 응집도(Cohesion)를 의심하라

인프라를 코드로 관리할 때, 좋은 모듈을 만드는 핵심 개념 중 하나가 바로 응집도(Cohesion)입니다. 이 단어가 좀 낯설게 느껴질 수 있지만, 사실 우리는 매일 응집도가 높은 시스템 속에서 살고 있어요. ✅ 응집도란? 하나의 모듈이 하나의 책임 또는 기능에만 집중하는 정도 응집도가 높은 모듈은 말 그대로 한 가지 일에만 집중합니다. 그래서

By Chansong
[Terraform 튜토리얼 1-3] 내부는 감추고, 필요한 것만 보여줘 – 캡슐화란?

[Terraform 튜토리얼 1-3] 내부는 감추고, 필요한 것만 보여줘 – 캡슐화란?

Encapsulation, 캡슐화라고 하면 뭔가 개발자스럽고 어려워 보이죠? 객체지향 프로그래밍 할 때나 듣던 단어 같고요. 그런데 이 개념은, Terraform 같은 Infrastructure as Code(IaC)에서도 아주 중요합니다. 이번 글에서는 "캡슐화가 무엇이고", "왜 필요한지", 그리고 "Terraform에서는 어떻게 쓰이는지"를 쉽게 풀어보겠습니다. ✅ 캡슐화, 한 마디로 뭐야? “필요한 것만 보이게 하고, 나머지는 숨기는 것”

By Chansong
[Terraform 튜토리얼 1-2] 누가 내 설정 바꿨지? 그래서 필요한 불변 인프라

[Terraform 튜토리얼 1-2] 누가 내 설정 바꿨지? 그래서 필요한 불변 인프라

Immutable Infrastructure(불변 인프라) — 최근 클라우드와 DevOps, IaC(코드형 인프라)에서 자주 등장하는 멋진 용어지만, 실제로 어떤 의미일까요? 그리고 Terraform과 같은 도구에서는 어떻게 활용될까요? 이번 글에서는 Immutability(불변성)이라는 개념이 인프라에서 왜 중요한지, 실무에서는 어떻게 적용되는지에 대해 다뤄보겠습니다. ✅ Immutability vs. Mutability Immutability(불변성)이란, 한 번 생성된 대상은 변경하지 않고,

By Chansong