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

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

Encapsulation, 캡슐화라고 하면 뭔가 개발자스럽고 어려워 보이죠?
객체지향 프로그래밍 할 때나 듣던 단어 같고요.

그런데 이 개념은, Terraform 같은 Infrastructure as Code(IaC)에서도 아주 중요합니다.
이번 글에서는 "캡슐화가 무엇이고", "왜 필요한지", 그리고 "Terraform에서는 어떻게 쓰이는지"를 쉽게 풀어보겠습니다.


✅ 캡슐화, 한 마디로 뭐야?

“필요한 것만 보이게 하고, 나머지는 숨기는 것”
→ 이게 캡슐화의 핵심이에요.

예를 들어, 커피 머신에는 버튼이 몇 개 있고, 우리가 할 일은 그냥 버튼 누르는 거죠.
기계 내부에서 물을 데우고 커피를 내리는 복잡한 과정은 몰라도 됩니다.

Terraform에서도 마찬가지예요.
내가 만든 어떤 구성(=모듈)을 다른 사람이 쓸 수 있도록 하되,
“무슨 값을 넣어야 하고, 어떤 값이 나오는지만” 알면 되도록 만드는 거죠.


🧱 Terraform에서는 어떻게 캡슐화할까?

Terraform에서 모듈(module)이 바로 캡슐화 단위입니다.

  • 모듈은 하나의 폴더에 .tf 파일들을 모아 둔 덩어리
  • 내부에 리소스를 어떻게 구성했는지는 숨기고,
  • 외부에는 input (입력 값)과 output (출력 값)만 공개
module "vpc" {
  source     = "./modules/vpc"
  cidr_block = "10.0.0.0/16"
}

output "vpc_id" {
  value = module.vpc.vpc_id
}

위처럼 cidr_block만 넘기면, 내부에서 알아서 VPC를 만들고 vpc_id만 돌려줍니다.
"어떻게 만들었는지"는 몰라도 되는 거죠.


💡 참고로 루트 모듈도 모듈이다

main.tf, variables.tf, outputs.tf 같은 루트 디렉토리에서 작성하는 구성도 사실상 하나의 모듈이에요.

  • 입력: variable로 받은 값
  • 출력: output으로 정의한 값
  • 내부: resource, data, locals

즉, Terraform을 쓰는 시점부터 이미 우리는 캡슐화를 하고 있는 셈이죠.


🔁 캡슐화가 중요한 이유?

  • 모듈을 재사용하기 쉽고
  • 협업할 때 역할 분담이 명확해지고
  • 내부 구현을 바꿔도 외부엔 영향이 없음

즉, "모듈이 어떤 역할을 하고, 어떤 값이 오고 가는지만 신경 쓰면 된다"는 게 핵심입니다.


📌 정리하자면

Terraform에서의 캡슐화는 리소스를 묶어서 하나의 모듈로 만들고,
입력과 출력만 외부에 공개해서 쉽게 쓰고 재사용할 수 있게 만드는 구조입니다.

잘 만든 모듈 하나면, 매번 수동 설정하거나 코드 복붙하는 번거로움을 줄일 수 있어요.


🔜 다음 글 예고

다음 글에서는 "모듈을 잘 만들었는지 어떻게 판단할까?"에 대한 이야기,
응집도(Cohesion) 개념을 다뤄보겠습니다.

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

Read more

Lumen - AI Agent를 위한 지속 가능한 두뇌

Lumen - AI Agent를 위한 지속 가능한 두뇌

왜 만들었는가 AI 에이전트는 모든 대화를 기억상실증 상태에서 시작합니다. Claude Code, Cursor, Codex, Mastra 하네스, LangChain 파이프라인 — 이 도구들은 세상을 알지만 당신의 세상은 전혀 모릅니다. 당신이 읽은 200편의 논문, 당신이 출시하는 코드베이스, 지난 분기에 내린 아키텍처 결정, 새벽 2시에 그 버그를 잡아냈을 때 마침내 통했던 트래젝토리. 모든 세션이 같은 컨텍스트를

By Sardor Madaminov

200 OK, 텅 빈 body — Starlette Race Condition 장애 분석기

발생일: 2026-04-23 / 해결일: 2026-04-27 영향 범위: report-dev.machine365.ai 전체 API 들어가며 API가 200 OK를 반환하는데 body가 비어있다. 프론트엔드에는 아무것도 안 뜨고, Swagger UI(/docs)도 빈 화면. 그런데 로컬에서 돌리면 멀쩡하다. 배경은 이랬다. 미터링(Metering) 기능을 만들면서 API 호출 로그를 수집할 미들웨어를 작성했다. Spring Boot 백엔드에 먼저 적용하고, Python

By Jeonggil