[Terraform #1] 핵심 개념 & 기본 실행 흐름

이서진·2026년 9월 11일

[Infrastructure]

목록 보기
6/9
post-thumbnail

1. Terraform이란?

인프라를 코드로 작성하고 관리할 수 있게 해주는 도구이다.

AWS, GCP, Azure 같은 클라우드 인프라를 콘솔에서 직접 클릭하는 대신, .tf 파일에 코드로 정의해서 생성·변경·삭제할 수 있다.

가장 큰 특징: 선언형(Declarative) 방식

"어떤 순서로 만들지"가 아니라 "최종적으로 어떤 상태여야 하는지"만 정의하면, 나머지는 Terraform이 알아서 처리한다.

1-1. IaC 와 Terraform 의 차이

IaC(Infrastructure as Code): 인프라를 코드로 관리한다는 개념
Terraform: IaC의 개념을 실제로 구현한 도구 중 하나


2. Terraform을 사용하는 이유

기존 방식

콘솔에서 직접 인프라 생성/변경
        ↓
설정이 사람의 작업에 의존
        ↓
동일 환경 재현이 어렵고, 변경 이력 추적이 어려움

Terraform 방식

인프라를 코드(.tf 파일)로 정의
        ↓
코드를 Git으로 버전 관리
        ↓
동일한 인프라를 반복적으로 구성 가능

콘솔 작업은 사람 손에 의존하는 만큼, 같은 환경을 다시 만들거나 변경 이력을 챙기기 어려움.

반면 코드로 관리하면 변경 내역을 커밋 단위로 추적할 수 있고, 같은 코드로 동일한 구성을 반복해서 만들 수 있다.


3. Terraform의 핵심 개념

3-1. Provider

한 줄 설명: Terraform이 어떤 플랫폼과 통신할지 지정하는 설정

  • 정의: AWS, GCP, Azure 등 각 플랫폼의 API를 사용할 수 있게 해주는 플러그인
  • 역할: 리소스를 어디에 만들지 결정
  • 관계: 아래에서 정의할 resource가 어느 플랫폼의 리소스인지는 provider가 결정함
provider "aws" {
  region = "ap-northeast-2"
}
  • provider의 이름을 aws 로 지정
  • 리전: 서울(ap-northeast-2)로 지정

3-2. Resource

한 줄 설명: 실제로 생성하고 관리할 인프라 대상

  • 정의: 서버, 네트워크, 데이터베이스 같은 실질적인 구성 요소
  • 역할: Terraform이 만들고 관리하는 대상 그 자체
resource "aws_instance" "web" {
  ami           = "ami-0c9c942bd7bf113a2"
  instance_type = "t2.micro"
}
  • aws_instance라는 리소스 타입으로 EC2 하나를 정의
  • 코드 안에서 web이라는 이름으로 참조

3-3. State

한 줄 설명: Terraform이 관리하는 리소스와 실제 인프라를 연결하고, 변경 사항을 추적하는 데 쓰는 상태 정보

  • 역할: 기본적으로 terraform.tfstate 파일에 저장되는 상태 정보
  • 역할: Terraform이 관리하는 리소스와 실제 인프라 사이의 매핑 정보를 저장
  • 관계: state와 실제 인프라 상태를 바탕으로 현재 상태를 파악하고, 코드가 원하는 상태와 비교해 변경 사항을 계산함
  • State는 Terraform이 인프라를 계속 관리하기 위한 기준점
  • 다수가 함께 사용하는 환경의 경우
    State 관리를 특히 신경 써야 함.

3-4. Variable

한 줄 설명: 코드에서 사용하는 값을 분리해 재사용할 수 있게 해주는 요소

variable "instance_type" {
  default = "t2.micro"
}

instance_type이라는 값을 변수로 분리해두면, 환경이나 상황에 따라 값만 바꿔서 같은 코드를 재사용할 수 있다.


4. Terraform의 기본 동작 흐름

Terraform 코드 작성
        ↓
terraform init
        ↓
terraform plan
        ↓
terraform apply
        ↓
인프라 생성/변경
  1. terraform init: provider 등 필요한 구성 요소를 다운로드하고 작업 디렉터리를 초기화하는 단계
  2. terraform plan: 코드와 현재 상태를 비교해 어떤 변경이 필요한지 미리 확인하는 단계. 실제 인프라에는 변경을 적용하지 않는다.
  3. terraform apply: plan에서 계산한 변경 사항을 실제 인프라에 반영하는 단계

plan 단계가 중간에 있는 이유
1. 실제로 바꾸기 전에 어떤 작업이 수행될지 확인하기 위함
2.현재 작업할 코드의 dependency를 고려하며 작업하기 위함


5. 헷갈리기 쉬운 개념

5-1. Terraform과 주변 개념의 관계

개념역할
IaC인프라를 코드로 관리한다는 개념 자체
Terraform그 개념(IaC)을 실제로 구현한 도구
AWS실제로 서버·네트워크 등 인프라를 제공하는 클라우드 플랫폼

5-2. Terraform 명령어의 차이

개념역할
terraform plan변경 사항을 미리 확인함 (실제 적용 X)
terraform apply계산된 변경 사항을 실제로 적용함

6. 정리

  • Terraform은 인프라를 코드로 정의하고 관리하는 IaC 도구이다.
  • 콘솔로 직접 관리하던 방식 대비, 코드 기반의 반복 가능하고 추적 가능한 인프라 관리가 가능하다.
  • 핵심 구성 요소는 Provider, Resource, State, Variable이다.
  • 기본 실행 흐름은 init → plan → apply 순서로 진행된다.

"코드로 원하는 인프라 상태를 선언하면, Terraform이 현재 상태와 비교해 필요한 변경 사항을 계산하고 실제 인프라에 반영한다"

0개의 댓글