Terraform - State(개념과 동작)

김재근·2025년 4월 21일

IaC

목록 보기
5/7
post-thumbnail

Terraform State란?

Terraform State는 "현재 인프라의 실체를 기억하는 파일"이다.
Terraform은 이 파일을 기준으로 작성한 코드와 실제 존재하는 인프라를 비교하고 동기화한다.
코드만 보고 움직이는 것이 아니라, 항상 State를 통해 인프라를 보고 판단한다.


왜 State가 필요한가?

만약 Terraform이 State 없이 매번 클라우드 API를 호출해 전체 인프라를 조회한다면

  • 속도 저하
  • API 호출 비용 증가
  • 리소스 간 의존성 추적 불가

이런 문제가 생긴다.
→ Terraform은 최소한의 정보를 State에 기억해두고, 필요한 변경만 빠르게 계산한다.


State 파일에 들어 있는 내용

State 파일(terraform.tfstate)은 기본적으로 JSON 형식이다.

  • 만들어진 리소스들의 ID (EC2 인스턴스 ID 등)
  • 각 리소스의 속성 값들 (IP, 타입, 태그 등)
  • 리소스 간 종속성(Dependency) 관계
  • 사용 중인 Provider 정보 (AWS, Azure, GCP 등)
  • 마지막 작업 시점의 Metadata

State 파일 예시

{
  "resources": [
    {
      "type": "aws_instance",
      "name": "example",
      "instances": [
        {
          "attributes": {
            "id": "i-0abcd1234efgh5678", # 실제 생성된 인스턴스의 ID
            "instance_type": "t2.micro",
            "ami": "ami-12345678",
            "tags": {
              "Name": "example-instance"
            }
          }
        }
      ]
    }
  ]
}

Terraform은 이 생성된 리소스의 ID를 기억하고, Plan/Apply 시 이 리소스를 추적한다.


Terraform은 어떻게 인프라 동기화를 확인할까?

Terraform은 Plan을 실행할 때 State, 코드, 클라우드 실상을 동시에 비교한다.

Plan 시 내부 흐름

  • State 파일 로드: terraform.tfstate를 메모리에 로드
  • 코드(.tf 파일) 파싱: 원하는 상태(Desired State)를 모델링
  • Provider API 호출: 현재 클라우드 리소스 상태 조회
  • Diff Engine 실행: State+코드 vs 실제 상태를 field-by-field 비교
  • Execution Plan 생성: 변경사항을 정리하고 의존성 순서를 최적화

Diff Engine 작동 방식

  • 값이 다르면 → 수정(~)
  • 없는 리소스면 → 생성(+)
  • 코드에 없고, State/클라우드에만 있으면 → 삭제(-)

이렇게 속성 단위로 세밀하게 비교하여 변경 계획을 만든다.

State에는 t2.micro, 실제 AWS에는 t3.micro로 변경 → Plan에 수정(~) 표시

※ Apply시 코드 기반으로 수정되니 주의

Drift 감지 원리

Drift란 "코드 수정 없이, 인프라가 수작업 등으로 변경된 경우"를 의미한다.

Terraform은 Provider API(AWS, GCP 등)를 호출해서 실시간 상태를 가져오고 State와 비교해 Drift를 감지한다.

※ 일부 Provider는 필드를 완벽히 반환하지 않으므로, 정확한 감지를 위해 terraform refresh를 병행하는 것이 안전하다.

Execution Plan 최적화 (Graph 기반)

Terraform은 리소스 Dependency를 분석해서
DAG(Directed Acyclic Graph) 형태로 적용 순서를 최적화한다.

VPC → Subnet → EC2 인스턴스 이런 순서로 리소스를 안전하게 생성하거나 수정한다.


Terraform 동기화 과정 요약

단계 상세 동작
1 State 파일을 읽어 기억된 상태 로딩
2 코드(.tf)를 파싱해 원하는 상태 생성
3 Provider API 호출로 현재 클라우드 상태 조회
4 Diff Engine으로 field-by-field 비교
5 변경사항을 기반으로 Plan 출력
6 의존성 그래프를 따라 적용 순서 최적화

Terraform은 Code, State, 그리고 인프라 상태를 교차검증하여, 가장 안전하고 최소한의 변경만 계획하고 적용한다.

profile
FullStack + DevOps 개발자입니다.

0개의 댓글