AltSchool Of Engineering Tinyuka’24 10개월 2주차
Source: Dev.to
If you missed our previous session you can catch up here.
Terraform에 대한 포괄적인 심층 탐구
오늘날 클라우드 중심의 세상에서 엔지니어들은 수동 프로비저닝을 떠나 인프라의 모든 계층에서 자동화를 받아들이고 있습니다. 이 혁명의 중심에 Terraform이 있습니다. Terraform은 가장 강력한 Infrastructure‑as‑Code(IaC) 도구 중 하나로, 엔지니어가 코드를 사용해 인프라를 설계·구축·관리하도록 하여 환경을 일관성 있게, 반복 가능하게, 확장 가능하고 자동화된 상태로 유지합니다.
다루는 주제
- Terraform이란?
- CLI 작동 방식
- Terraform 상태 이해
- Terraform 핵심 개념 및 언어
- 실제 예제
- 아키텍처와 워크플로우에 대한 심층 탐구
DevOps, Cloud Engineering, SRE 분야에 진입하고 싶다면 Terraform은 반드시 마스터해야 할 스킬입니다.
1. Terraform은 정확히 무엇인가?
Terraform은 HashiCorp가 만든 오픈‑소스 IaC 도구입니다. HCL(HashiCorp Configuration Language)이라는 간단하고 선언적인 언어를 사용해 전체 인프라를 정의할 수 있습니다.
AWS, Azure, GCP 대시보드에서 버튼을 클릭하는 대신, 인프라를 설명하는 코드를 작성하고 Terraform이 대신 생성해 줍니다.
예시
resource "aws_instance" "web" {
ami = "ami-12345"
instance_type = "t2.micro"
}
다음 명령을 실행합니다:
terraform apply
Terraform이 코드를 읽고 → AWS와 통신하여 → 서버를 생성합니다.
주요 장점
- ✅ 인프라 일관성
- ✅ 빠른 배포
- ✅ 버전 관리된 인프라
- ✅ 자동화된 변경
- ✅ 멀티‑클라우드 지원
- ✅ 예측 가능한 워크플로
Terraform은 복잡한 아키텍처를 깔끔하고 사람이 읽기 쉬운 형태로 모델링합니다.
2. Terraform CLI (명령줄 인터페이스)
Terraform CLI는 엔지니어가 Terraform과 상호작용하는 방법입니다. 가장 필수적인 명령은 다음과 같습니다:
| Command | Description |
|---|---|
terraform init | 프로젝트를 초기화하고, 프로바이더를 다운로드하며 플러그인을 설정합니다. |
terraform plan | Terraform이 생성·수정·삭제할 내용(드라이런)을 보여줍니다. |
terraform apply | 확인 후 인프라를 실제로 구축합니다. |
terraform destroy | 모든 리소스를 제거합니다 – 테스트나 정리 시 유용합니다. |
terraform fmt | Terraform 코드를 자동으로 포맷합니다. |
terraform validate | 구성에 오류가 있는지 검사합니다. |
이 명령들은 일상적인 Terraform 사용의 핵심을 이룹니다.
3. Terraform State (가장 중요한 개념 중 하나)
Terraform은 상태 파일(terraform.tfstate)을 통해 인프라를 추적합니다. 이 파일은 Terraform이 만든 리소스에 대한 단일 진실 소스입니다.
상태가 중요한 이유
Terraform은 다음을 비교합니다:
- Desired state – HCL 코드
- Current state – 상태 파일
그리고 필요한 변경 사항을 결정합니다.
예시
- 코드에 “서버 1대 생성”이라고 적혀 있으면 → 상태에 이미 그 서버가 있으면 → 아무 작업도 하지 않음.
- 코드에 “서버 3대 생성”이라고 적혀 있으면 → 상태에 1대만 있으면 → Terraform이 2대를 추가합니다.
상태 저장 방식 종류
- Local State – 기본값, 로컬 머신에 저장됩니다.
- Remote State – S3, GCS, Azure Blob, Terraform Cloud 등에 저장됩니다(팀 사용 권장).
실제 예시
AWS 프로젝트에서 상태를 S3에 저장하면 다음을 가능하게 합니다:
- 여러 엔지니어 간 협업
- 상태 파일 자동 백업
- 안전한 변경 추적
- 충돌되는 인프라 변경 방지
상태 파일은 Terraform 자동화의 중추이며, 없으면 Terraform은 무엇을 업데이트해야 할지 알 수 없습니다.
4. Terraform 언어 및 핵심 용어
Terraform은 HCL이라는 깔끔하고 읽기 쉬운 선언형 언어를 사용합니다. 가장 중요한 구성 요소는 다음과 같습니다.
4.1 Providers
Providers는 Terraform이 클라우드 플랫폼과 상호작용하도록 합니다.
provider "aws" {
region = "us-east-1"
}
주요 providers: aws, google, azure, digitalocean, docker.
4.2 Resources
Resources는 Terraform이 실제로 생성하는 객체(서버, 버킷, 네트워크, 컨테이너, 방화벽)입니다.
resource "aws_s3_bucket" "logs" {
bucket = "my-log-bucket"
}
4.3 Variables
Variables는 구성을 재사용 가능하게 합니다.
variable "region" {
default = "us-east-1"
}
4.4 Outputs
Outputs는 배포 후 값을 표시합니다.
output "public_ip" {
value = aws_instance.web.public_ip
}
4.5 Modules
Modules는 VPC, 서브넷, 라우팅, 보안 그룹 등과 같은 패턴을 캡슐화할 수 있는 재사용 가능한 Terraform 패키지입니다.
5. Terraform 심층 탐구 (Terraform이 실제로 작동하는 방식)
Terraform은 변경을 적용할 때마다 네 단계 라이프사이클을 따릅니다.
5.1 Initialization
프로바이더를 다운로드하고 작업 공간을 준비합니다.
5.2 Dependency Graph
Terraform은 리소스 간 의존성을 자동으로 그래프로 구성합니다.
예시:
VPC, 서브넷, 그리고 서브넷 안의 EC2 인스턴스를 정의하면, Terraform은 VPC → 서브넷 → EC2 인스턴스 순으로 생성해야 함을 알고 있습니다.
5.3 Execution Plan
원하는 인프라(코드)와 현재 인프라(상태)를 비교하고 계획된 변경 사항을 보여줍니다.
5.4 Apply
필요에 따라 리소스를 생성·수정·삭제하고 모든 변경을 상태 파일에 기록합니다.
실제 예시
한 회사가 다음을 배포하고자 합니다:
- AWS EC2 인스턴스 3대
- RDS 데이터베이스 1개
- 로드 밸런서 1개
- S3 버킷 1개
전통적인 수동 설정은 몇 시간이 걸릴 수 있습니다. Terraform을 사용하면:
- 구성을 한 번 작성한다.
- Git에 커밋한다.
terraform apply를 실행한다.
모든 것이 몇 초 안에 프로비저닝됩니다. EC2 인스턴스를 3대에서 6대로 확장하려면 코드의 숫자를 바꾸고 다시 적용하면 됩니다.
Uber, Spotify, Coinbase, Airbnb, Stripe와 같은 대기업들은 이 수준의 자동화를 위해 Terraform을 광범위하게 활용하고 있습니다.


