← 아티클 목록

IaC란? 인프라 코드 — Terraform 개념

2028-10-16#cloud#IaC#Terraform

"서버 하나 더 만들려고 콘솔에서 30번 클릭했는데, 다음 달에 또 똑같이 해야 한다고요?" 클라우드를 손으로 만들다 보면 이런 반복과 실수가 쌓입니다. IaC(Infrastructure as Code)는 그 해법으로, 서버·네트워크·DB 같은 인프라를 클릭이 아니라 코드 파일로 정의하고 관리하는 방식입니다. 인프라 구성을 코드로 적어두면, 같은 환경을 버튼 한 번으로 몇 번이고 똑같이 만들 수 있습니다. 마치 요리를 매번 감으로 하지 않고 레시피로 적어두는 것과 같습니다.

수동 구성 vs IaC

구분콘솔 수동 구성IaC
재현성사람마다·시점마다 다름코드대로 항상 동일
변경 추적누가 뭘 바꿨는지 모름Git 이력에 다 남음
검토불가능코드 리뷰 가능
복구기억에 의존코드 다시 적용하면 끝

핵심 가치는 재현성과 추적성입니다. 인프라가 코드이므로 Git으로 버전 관리하고, 변경을 PR로 리뷰하고, 문제가 생기면 이전 버전으로 되돌릴 수 있습니다. 운영 환경과 개발 환경을 동일하게 맞추는 일도 쉬워집니다.

선언형 — "어떻게"가 아니라 "무엇을"

IaC 도구는 대부분 선언형입니다. 절차(클릭 순서)를 적는 게 아니라 원하는 최종 상태를 적으면, 도구가 현재 상태와 비교해 차이만큼만 알아서 만들고 바꿉니다. 아래 Terraform 코드는 "t3.micro 서버 한 대가 있어야 한다"는 상태를 선언합니다.

HCL
resource "aws_instance" "web" {
  ami           = "ami-0abcd1234"
  instance_type = "t3.micro"

  tags = {
    Name = "web-server"
  }
}

이 파일을 적용하면 서버가 없을 때는 생성하고, 이미 있으면 그대로 둡니다. instance_typet3.small로 바꿔 다시 적용하면 그 차이만 반영합니다. 손으로 하는 작업과 달리, 같은 코드를 몇 번 적용해도 결과가 같은 성질(멱등성)이 핵심입니다.

Terraform vs CloudFormation

구분TerraformCloudFormation
제공HashiCorp (오픈소스)AWS 기본 제공
대상 클라우드AWS·GCP·Azure 등 멀티AWS 전용
언어HCLJSON/YAML
상태 관리state 파일 직접 관리AWS가 관리

여러 클라우드를 함께 쓰거나 클라우드 종속을 줄이고 싶으면 Terraform이 유리하고, AWS만 쓰고 별도 도구 설치 없이 AWS와 깊게 통합하고 싶으면 CloudFormation이 편합니다. 선택 기준은 "한 클라우드에 깊게 갈지, 여러 클라우드를 아우를지"입니다.

요점 정리

  • IaC는 인프라를 코드로 정의해 재현성·추적성·리뷰 가능성을 얻는 방식.
  • 선언형이라 "원하는 상태"만 적으면 도구가 차이만 반영하고, 몇 번 적용해도 결과가 같다.
  • 멀티 클라우드면 Terraform, AWS 전용이면 CloudFormation이 무난한 출발점.

terraform plan으로 변경 예정 사항을 미리 보고 apply로 실제 인프라를 코드로 만들어 보는 실습은 클라우드 트랙에서 회원가입 없이 무료로 할 수 있습니다.