[Terraform 튜토리얼 1-1] 여러 번 눌러도 괜찮아! 멱등성(Idempotence)이라는 개념

[Terraform 튜토리얼 1-1] 여러 번 눌러도 괜찮아! 멱등성(Idempotence)이라는 개념

인프라 자동화나 Terraform 같은 Infrastructure as Code(IaC)를 접하다 보면 Idempotence라는 단어를 종종 마주하게 되는데요. 처음 들으면 뭔가 굉장히 있어 보이는 용어지만, 사실 우리가 일상 속에서도 자주 겪는 개념입니다.


✅ Idempotence란?

같은 작업을 여러 번 수행해도, 결과가 변하지 않는 성질을 말합니다.

즉, 특정 명령이나 실행을 여러 번 반복해도 결과(시스템 상태)가 동일하게 유지된다면, 그 프로세스는 Idempotent(멱등적)하다고 부를 수 있습니다.


🚦 예시: 횡단보도의 보행 버튼

일본 같은 경우 횡단보도를 건널 때, 보행자 버튼이 있어 클릭 시 일정 시간 후 빨간불이 파란불로 바뀌게 됩니다.

  • 이 버튼을 한 번 누르면 일정 시간이 지난 후 신호가 바뀝니다.
  • 열 번 눌러도, 결과는 같습니다. 신호는 제시간에 바뀔 뿐, 더 빨라지거나 바뀌지 않죠.

이 버튼은 idempotent 하다고 할 수 있습니다.


💸 반례: 은행에 돈 입금하기

반대로, 은행 창구에 가서 만 원을 입금하는 상황을 봅시다.

  • 첫 번째 입금: 잔액이 +만 원
  • 두 번째 입금: 잔액이 +2만 원...

즉, 같은 행위를 반복할 때마다 결과가 누적되므로 비-idempotent 한 행동입니다.
(당연히 돈 입금이 idempotent 하면 안 되겠죠!)


🛠️ Terraform은 왜 Idempotent 할까?

Terraform에서 terraform apply를 실행하면, 코드에 정의된 목표 상태(desired state)에 따라 인프라를 구성합니다.

  • 처음 실행: 정의된 리소스를 생성
  • 두 번째 실행: 이미 존재하므로 아무 작업도 하지 않음
  • 세 번째 실행: 역시 상태가 같으면 변경사항 없음 (No changes)

즉, Terraform은 “이미 원하는 상태에 도달했다면 더 이상 손대지 않는다”는 철학을 따릅니다.

이는 마치 신호등 보행 버튼처럼, “원하는 상태가 정의되어 있고, 이미 도달했다면 그대로 유지”해주는 성질입니다.


💡 왜 중요한가?

멱등성(Idempotence)은 IaC 도구 사용에 있어 매우 중요한 특성입니다.

  • 예측 가능성: 같은 코드를 여러 번 실행해도 결과가 달라지지 않음
  • 자동화 신뢰성: CI/CD 파이프라인 등 반복 작업에 안심하고 쓸 수 있음
  • 불필요한 리소스 재생성 방지: 운영 환경을 안정적으로 유지

📌 정리하자면

Idempotence = 같은 입력 → 같은 결과, 반복해도 변하지 않음
Terraform은 이 멱등성 덕분에 인프라를 신뢰성 있게 자동화할 수 있습니다.

🔜 다음 글 예고

다음 글에서는 immutability(불변성)에 대해 다뤄보겠습니다.
IaC와 DevOps에서 멱등성과 불변성은 늘 짝꿍처럼 붙어 다니거든요!

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

Read more

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

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

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

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

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

Terraform을 쓰다 보면 종종 듣게 되는 말이 하나 있어요: Terraform은 "선언형(Declarative)" 도구다. 그런데 이게 도대체 무슨 뜻일까요? "명령형(Imperative)"이랑은 뭐가 다르고, 왜 Terraform은 선언형일까요? 🧠 선언형과 명령형, 개념부터 정리 구분 선언형 (Declarative) 명령형 (Imperative) 핵심 개념 무엇이 되어야 하는지만 선언 어떻게 할지를 하나하나 명령 예시 “난 스테이크 먹을래” “고기

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