Terraform으로 인프라 관리를 쉽게

Socra·2026년 4월 29일

Terraform 공식 문서

Terraform | HashiCorp Developer

AWS 콘솔만 사용하다가 Terraform을 사용해보니 정말 말도 안되게 편하다. HCL 파일도 매우 직관적이고 명령어 몇개만으로 인프라를 올리고 내리고 할 수 있는 점이 너무 편하다.
심지어 user data로 자동으로 swap 설정을 하고, docker 설치부터 Nginx Proxy Manager, MySQL, Redis 환경을 한 번에 구성할 수 있었다. 앞으로 자주 사용할 것 같다.


Terraform이란?

Terraform은 클라우드, 온프레미스 리소스를 사람이 읽을 수 있는 설정 파일로 정의해 버전 관리, 재사용, 공유를 편하게 할 수 있는 인프라 도구이다.

컴퓨팅, 스토리지, 네트워킹 리소스부터 DNS, Saas 같은 구성 요소도 관리할 수 있다.

Amazon Web Service, Azure, Google Cloud Platform, Oracle Cloud Infrastructure, Docker 등의 서비스의 인프라 관리에 활용할 수 있다.

Terraform을 사용하면 CLI보다 인프라 관리를 편하게 할 수 있다.

Terraform 작동 원리

API를 통해 클라우드 플랫폼 및 기타 서비스의 리소스를 생성하고 관리한다.

핵심 워크플로우는 다음과 같다.

  • Write: 여러 클라우드 서비스의 리소스를 정의한다. 예를 들면 보안 그룹, 로드 밸런서 등으로 VPC 네트워크의 인스턴스에 애플리케이션을 배포하는 구성을 만들 수 있다.
  • Plan: Terraform이 기존 인프라와 설정을 기반으로 생성, 업데이트, 삭제할 인프라를 설명하는 실행 계획을 만든다.
  • Apply: 사용자가 승인하면, 리소스 종속성을 조려해서 작업을 순서대로 수행한다. 예를 들어, VPC의 속성을 업데이트하고 VPC의 가상 머신 수를 변경하면 가상 머신을 확장하기 전에 VPC를 다시 생성한다.

Terraform 설치

https://developer.hashicorp.com/terraform/tutorials/aws-get-started/install-cli

brew tap hashicorp/tap
brew install hashicorp/tap/terraform

Terraform 업데이트

brew update
brew upgrade hashicorp/tap/terraform

설치 확인

terraform -help

Terraform으로 인프라 구축하기

우선 AWS CLI가 설치되어 있고, 리소스를 생성할 수 있는 AWS 계정 자격 증명이 완료되어 있어야 한다.

작업 디렉토리에 인프라를 정의하는 파일을 생성해야 한다.

예시 코드에서는 단순하게 VPC를 생성하도록 한다.

main.tf

terraform {
  required_providers {
    aws = {
      source = "hashicorp/aws"
    }
  }
}

provider "aws" {
  region = "ap-northeast-2"
}

resource "aws_vpc" "example" {
  cidr_block = "10.0.0.0/16"

  tags = {
    Name = "example"
  }
}

Terraform 블록

terraform { } 블록에 Terraform 설정을 작성한다. 여기선 AWS 인프라를 관리하는데 필요한 필수 provider hashicorp/aws을 정의했다.

Terraform은 기본적으로 Terraform Registry에서 provider를 설치한다.

Terraform Registry

provider

provider는 Terraform이 리소스를 생성하고 관리하는데 사용하는 플러그인이다. “aws” provider에 리전을 설정해줬다.

resource

resource { } 블록으로 인프라의 구성 요소를 정의한다. EC2 인스턴스 같은 물리적 가상 구성 요소일 수도 있고, Heroku 같은 논리적 리소스일 수도 있다.

디렉토리 초기화

새로운 구성을 생성하거나 버전 제어에서 기존 구성을 체크하웃하는 경우 디렉토리를 초기화해야한다.

terrafrom init

init 명령어를 사용하면,

  • 하위 디렉토리 .terraform에 provider를 설치하고 버전을 표시한다.
  • .terraform.lock.hcl 이라는 잠근 파일을 생성해서 프로젝트에 사용되는 provider의 업데이트를 제어할 수 있도록 한다.

구성 포맷/검증(선택)

가독성, 일관성을 위해 구성을 자동으로 업데이트할 수 있다.

terraform fmt

구성의 구문이 유효한지, 내부적으로 동작 가능한지 확인할 수 있다.

terraform validate

인프라 변경사항 확인(선택)

현재 구성으로 인프라에 생기게 되는 변경을 확인할 수 있다.

terraform plan

인프라 구축

terraform apply

변경사항을 적용하기 전에 인프라를 구성에 맞게 변경하기 위해 Terraform이 어떻게 동작할지 설명하는 실행 계획을 출력한다.

출력 형식은 Git 같은 도구의 diff 형식과 유사하다. +, -로 변경 사항을 확인할 수 있다.

작업 계획에 문제가 없다면, yes로 확인해 진행하면 반영된다.


인프라를 형상관리 하듯이 다룰 수 있다는 점, 여러 인프라 구성을 한 번에 자동화할 수 있다는 점에서 큰 장점이 있는 것 같다.

AWS의 서비스들부터 NCP 네이버 클라우드까지 다양한 클라우드 플랫폼에 연동 가능하다. (공식문서의 사용법 참고)

인프라 설정에 사용되는 문법 구조를 정확히는 몰라도 직관적인 구조라,

생성형 AI의 도움을 받으면 처음 사용하더라도 어렵지 않다.

인프라 구성이 단순하지 않을 때 자주 사용하게 될 것 같다.

0개의 댓글