| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
Tags
- 0.75px border
- ES5
- &연산
- Props
- Websocket
- TypeScript
- 문서번호
- 10px
- 1px border
- TS
- 0.25px border
- 컴포넌튼
- literal
- 타입스크립트
- 0.5px border
- es6
- 전역변수
- 으
- entity
- github
- jwt
- 클론코딩
- 데이터베이스 #try #이중
- Strict
- angular
- ZOOM
- font-size
- npm
- 서버리스 #
- 당근마켓
Archives
- Today
- Total
복잡한뇌구조마냥
[Infra] Terraform 본문
1. Terraform이란?
Terraform은 Infrastructure as Code(IaC) 도구로,
서버·네트워크·스토리지 같은 인프라를 코드로 정의하고 관리할 수 있게 해준다.
기존에는 AWS 콘솔에서 클릭으로 만들던 리소스들을
Terraform에서는 .tf 파일에 선언적으로 작성한다.
인프라를 “설정”이 아니라 “코드”로 관리한다는 점이 Terraform의 핵심이다.
2. 왜 Terraform을 사용하는가?
2.1 콘솔 기반 인프라의 한계
- 클릭 기반 설정 → 재현 불가
- 누가 언제 뭘 바꿨는지 추적 어려움
- 환경(dev/prod) 간 설정 불일치 발생
2.2 Terraform 도입 효과
- 인프라 구성의 버전 관리
- 동일한 환경 재현 가능
- 코드 리뷰 및 변경 이력 관리 가능
👉 애플리케이션처럼 인프라도 관리할 수 있다.
3. Terraform 핵심 개념 정리
3.1 Provider
Terraform이 어떤 플랫폼(AWS 등)을 사용할지 지정한다.
provider "aws" {
region = "ap-northeast-2"
}
3.2 Resource
실제로 생성되는 인프라 리소스 단위
resource "aws_s3_bucket" "bucket" {
bucket = "my-example-bucket"
}
- 콘솔에서 생성하는 리소스 = Terraform의 resource
3.3 State
Terraform이 관리하는 현재 인프라 상태 정보
- 생성된 리소스의 ID, 속성 등이 저장됨
- Terraform은 state를 기준으로 변경 사항(diff) 을 계산
State를 잃으면 Terraform은 인프라를 다시 생성하려고 할 수 있다.
4. Terraform 기본 사용 흐름
Terraform 사용은 아래 3단계 흐름이 핵심이다.
4.1 terraform init
terraform init
- Provider 다운로드
- State 초기화
- Terraform 프로젝트 시작 단계
👉 가장 먼저 한 번만 실행
4.2 terraform plan
terraform plan
- 현재 상태 vs 코드 비교
- 어떤 리소스가 생성/수정/삭제될지 미리 보여줌
실제 인프라에 아직 아무 영향도 없음
4.3 terraform apply
terraform apply
- plan 결과를 실제 인프라에 반영
- 확인(prompt) 후 실행
👉 이 시점에 실제 리소스가 생성됨
4.4 terraform destroy
terraform destroy
- Terraform이 만든 리소스를 정리(삭제) 하는 명령어
- apply의 반대 개념
- 학습/테스트 환경에서 비용 방지용으로 특히 중요
언제 쓰나?
- 테스트로 만든 리소스들을 한 번에 정리하고 싶을 때
- “실수로 만든 리소스”를 빠르게 원복하고 싶을 때
- 비용이 발생하는 리소스(EC2, NAT Gateway 등)를 제거할 때
주의할 점
- destroy는 진짜로 삭제한다 (복구 안 되는 경우 많음)
- 특히 아래 리소스는 삭제 전에 반드시 확인
- S3 버킷(데이터 포함 여부)
- RDS/DB(스냅샷 여부)
- EBS, 로그, 백업 리소스
5. 최소 예제로 보는 Terraform 사용법
5.1 디렉토리 구조
terraform/
├─ provider.tf
├─ main.tf
└─ variables.tf
5.2 변수 정의 (variables.tf)
variable "region" {
type = string
default = "ap-northeast-2"
}
5.3 Provider 설정 (provider.tf)
provider "aws" {
region = var.region
}
5.4 Resource 정의 (main.tf)
resource "aws_s3_bucket" "example" {
bucket = "terraform-example-bucket"
}
5.5 실행 흐름
terraform init
terraform plan
terraform apply
6. Terraform 변수 분리 전략
Terraform에서는 환경별 설정 분리가 중요하다.
- 공통 구조 → .tf
- 환경별 값 → variables, .tfvars
variable "instance_type" {
type = string
}
instance_type = var.instance_type
👉 환경 차이는 값만 바꿔서 재사용 가능
7. Terraform의 장점과 한계
장점
- 인프라 구성의 재현성
- 변경 이력 관리
- 자동화된 인프라 생성
한계
- State 관리 중요
- 러닝 커브 존재
- 실시간 변경에는 부적합
8. Terraform을 사용할 때 주의할 점
- terraform apply는 항상 plan 먼저 확인
- State 파일은 Git에 커밋 ❌
- 민감 정보는 변수/Secret으로 분리
9. 정리
Terraform은 단순한 인프라 자동화 도구가 아니라,
인프라를 코드로 관리하는 기준을 만들어주는 도구다.
“한 번 만들고 끝”이 아니라
계속 관리해야 하는 인프라라면 Terraform이 적합하다.
LIST
'BE > Infra' 카테고리의 다른 글
| [Infra] 무중단 배포 ( Blue-Green, Rolling, Canary ) (0) | 2025.12.13 |
|---|---|
| [AWS] Lambda + CloudFront 이미지 최적화 ( 리사이징, 캐싱 ) (0) | 2025.12.09 |
| [Infra] Prometheus + Grafana 서버 모니터링 (Docker 기반) (0) | 2025.12.03 |
| [AWS] 배포 정리(EC2 + ECR + RDS + Nginx) (0) | 2025.10.16 |
| Json-server, heroku, env (서버 배포) (0) | 2022.09.04 |