[Terraform 튜토리얼 1-3] 내부는 감추고, 필요한 것만 보여줘 – 캡슐화란?
![[Terraform 튜토리얼 1-3] 내부는 감추고, 필요한 것만 보여줘 – 캡슐화란?](/content/images/size/w1200/2025/05/ChatGPT-Image-2025----5----5---------05_54_09.png)
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) 개념을 다뤄보겠습니다.
