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

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

개발자라면 한 번쯤 들어봤을 말,

"Don't Repeat Yourself", 줄여서 DRY 원칙.

이건 소프트웨어 개발에서 아주 중요한 원칙이에요.
중복을 줄이면 버그도 줄고, 유지 보수도 쉬워지고, 코드도 깔끔해지죠.

그런데…
Terraform 같은 IaC 세계에서도 DRY가 무조건 좋을까요?


🤔 DRY가 뭔데?

DRY 원칙의 핵심은 딱 하나:

"같은 걸 반복해서 쓰지 마."
  • 상수 값, 로직, 설정 등을 중앙에서 관리하자
  • 복붙은 금물! 하나만 바꿔도 전체가 반영돼야 한다

전통적인 애플리케이션 개발에선 이게 매우 효과적이에요.


💡 근데 Terraform에선 좀 다릅니다

Terraform에서도 처음엔 DRY를 적용하고 싶을 수 있어요.
저자도 처음엔 그랬고, 대부분의 개발자들도 그렇게 시작합니다.

하지만 이게 오히려 문제를 키우는 경우가 많습니다.

🧱 IaC에서 DRY를 적용하면 생기는 문제들

1. 의도 파악이 어려움

너무 많은 추상화와 재사용 모듈로 구성하면,
코드를 처음 보는 사람이 무슨 인프라가 만들어지는지 이해하기 어려워져요.

"이 EC2 인스턴스가 어떻게 만들어지는 거지?"
"이 변수는 어디서 왔고, 이 output은 어디로 가는 거야?"

2. 테스트가 어렵다

일반 코드에선 메모리에서 돌리는 단위 테스트가 가능하지만,
Terraform은 실제 클라우드와 상호작용해야 의미 있는 결과가 나옵니다.

즉, 코드를 실행해 봐야 알 수 있는데,
너무 DRY 하게 짜면 테스트가 힘들고 디버깅은 지옥이 돼요.

3. 디버깅 난이도 상승

Terraform은 클라우드 리소스 간의 의존성이 많아요.
문제가 생기면 “작은 단위부터 하나씩 쌓아보는 방식”으로 디버깅해야 하는데,
DRY 한 구조는 이런 접근을 복잡하게 만듭니다.


🪣 그래서 등장한 WET 원칙 (!?)

Terraform 커뮤니티에선 종종 WET (Write Everything Twice)이라는 우스갯소리도 나옵니다.
너무 추상화하지 말고, 명확하게, 직관적으로 코드 쓰자는 뜻이에요.

물론 진짜로 중복을 막 쓰라는 건 아니고, 핵심은 이겁니다:

“재사용은 하되, 명확함을 우선하라”
“기술적 우아함보다 실용성과 가독성”

🎯 실무에서의 균형

원칙 Terraform 적용 시
DRY 중복된 리소스 정의 줄이기에는 유용 ex. locals, variables, for_each
너무 DRY ❌ 과한 추상화, 여러 모듈 끼리 의존성 꼬임
적당한 WET ✅ 코드가 명확하고 한눈에 파악됨

📌 정리하자면

DRY는 훌륭한 원칙입니다.
하지만 Terraform처럼 외부 시스템에 강하게 의존하는 코드에선
DRY보다 예측 가능성, 가독성, 명확한 구조가 더 중요할 수 있습니다.

Terraform에선 때때로 “조금의 중복”이
오히려 더 좋은 설계일 수 있어요.


🔚 시리즈 마무리하며

이번 시리즈를 통해 Terraform과 IaC의 기본 개념들 —
멱등성, 불변성, 캡슐화, 응집도, 선언형 철학, DRY 원칙까지
하나씩 짚어봤습니다.

각 개념을 이해하고 실무에 적용하는 순간,
Terraform은 그저 코드 작성 도구가 아닌
여러분의 강력한 인프라 설계 플랫폼이 되리라 확신합니다!

Read more

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

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

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

By Chansong