Terraform의 State File: 무엇이며 왜 중요한가

발행: (2026년 5월 4일 AM 11:57 GMT+9)
6 분 소요
원문: Dev.to

Source: Dev.to

State File en Terraform: Qué es y por qué importa의 표지 이미지

실제 문제

Terraform을 사용하기 시작하면, 많은 사람들이 같은 질문을 합니다: Terraform은 어떻게 클라우드에 이미 존재하는 리소스를 알고 있을까요? 답은 state file에 있습니다. 이 파일은 잘 이해되지 않을 때 불필요한 골칫거리를 자주 일으킵니다.

State File이란?

State file은 Terraform이 인프라에 대한 유일한 진실의 원천으로 유지하는 JSON 파일입니다. 이는 코드(main.tf, variables.tf 등)에서 정의된 리소스와 클라우드 제공자(AWS, Azure, GCP)에서 실제로 존재하는 리소스 간의 매핑을 포함합니다.

이 파일이 없으면 Terraform은 어떤 리소스를 이미 생성했는지, 어떤 리소스를 업데이트해야 하는지, 혹은 어떤 리소스를 삭제해야 하는지를 알 수 없습니다. 본질적으로 이것은 Terraform의 메모리 역할을 합니다.

State file example

실제 작동 방식

terraform apply 를 실행하면 다음과 같은 일이 발생합니다:

  1. Terraform가 코드(.tf 파일)를 읽습니다.
  2. 선언된 상태와 현재 상태를 비교하기 위해 state 파일을 조회합니다.
  3. 필요한 변경 사항을 계산합니다(플랜).
  4. 그 변경 사항을 인프라에 적용합니다.
  5. 새로운 데이터로 state 파일을 업데이트합니다.

state 파일이 없었다면, Terraform는 매번 클라우드 제공자에게 조회하여 어떤 리소스가 존재하는지 확인해야 하므로 느리고 비효율적이었을 것입니다.

간단한 실용 예제

EC2 인스턴스를 정의한다고 가정해 보세요:

resource "aws_instance" "web" {
  ami           = "ami-0c55b159cbfafe1f0"
  instance_type = "t2.micro"
  tags = {
    Name = "production-server"
  }
}

terraform apply를 실행하면 상태 파일에 다음과 같은 내용이 포함됩니다:

{
  "resources": [
    {
      "type": "aws_instance",
      "name": "web",
      "instances": [
        {
          "id": "i-1234567890abcdef0",
          "tags": { "Name": "production-server" },
          "private_ip": "10.0.0.50"
        }
      ]
    }
  ]
}

이 매핑은 매우 중요합니다: Name 태그를 변경하면 Terraform은 저장된 ID를 기반으로 정확히 어떤 EC2 리소스를 업데이트해야 하는지 알 수 있습니다.

State file mapping

기본 위치

  • 로컬: 상태 파일은 기본적으로 작업 디렉터리에 terraform.tfstate 로 생성됩니다 (Git에 저장하지 마세요).
  • 원격: 팀에서는 모든 사람이 동일한 상태에 접근하도록 remote state (S3, Terraform Cloud, Consul)를 사용하는 것이 필수적입니다.

실제 혜택

  • 협업: 여러 사용자가 충돌 없이 동일한 원격 state를 작업할 수 있습니다.
  • 복구: 변경 이력을 확인하고 필요 시 롤백할 수 있습니다.
  • 성능: Terraform이 클라우드 공급자를 지속적으로 조회하지 않습니다.
  • 보안: 원격 state는 암호화, 백업 및 접근 제어를 가질 수 있습니다.

핵심 모범 사례

  • terraform.tfstate를 Git에 절대 저장하지 마세요: .gitignore를 사용하고 상태를 원격으로 저장하세요.
  • 상태 버전을 사용하세요: 팀에서 변경 사항을 감사하기 위해 특히 중요합니다.
  • 잠금 기능을 구현하세요: 두 사람이 동시에 변경을 적용하는 것을 방지합니다.
  • 원격 상태를 암호화하세요: 민감한 정보(비밀번호, 개인 키)를 포함합니다.
  • 백업을 수행하세요: 상태 파일은 유일한 진실의 원천입니다.
  • 수동으로 편집하지 마세요: 수정이 필요하면 terraform state 명령을 사용하세요.

모범 사례

실용적인 가치

Terraform을 올바르게 사용하려면 state 파일을 이해하는 것이 필수적입니다. 이는 단순한 내부 기술 파일이 아니라 인프라를 코드로 관리하는 핵심입니다. 이를 잘 다루면 문제를 줄이고, 협업이 개선되며, 배포에 대한 신뢰도가 높아집니다.

0 조회
Back to Blog

관련 글

더 보기 »

SRE 주간 호 #515

sreweekly.com에서 보기 https://sreweekly.com/sre-weekly-issue-515/ 왜 Reliability Metrics가 측정하는 시스템보다 더 빨리 오래되는가 > “Is your dashboard always gr...”

Bucket4j + Infinispan: 구현에 대한 심층 탐구

분산 시스템에서, 속도 제한(rate limiting)의 가장 큰 과제는 상태(state)입니다. 서로 다른 클러스터 노드에 도달하는 두 개의 병렬 요청이 ‘…​’​를 하지 않도록 어떻게 보장합니까?