Terraform이란 무엇인가요?

게시일 2025년 04월 15일
수정일 2026년 07월 13일
서버실에서 노트북으로 데이터를 처리하는 프로그래머
By Derek Robertson, Matthew Kosinski and Gregg Lindemulder

Terraform이란?

Terraform은 HashiCorp에서 개발한 엔터프라이즈급 코드형 인프라(IaC) 제품입니다. Terraform은 여러 클라우드(AWS, Azure, Google Cloud), 네트워크, 프라이빗 데이터 센터 및 SaaS 환경의 인프라 구성 요소를 프로비저닝할 수 있도록 통합된 인프라 라이프사이클 관리 인터페이스와 단일 워크플로를 제공합니다. 

Terraform을 사용하면 사람이 읽기 쉬운 구성 파일을 작성하여 인프라 구성 요소를 생성, 업데이트 및 삭제할 수 있습니다. 이러한 구성 파일은 절차형 언어가 아닌 선언형 언어를 사용합니다. 사용자는 인프라 리소스의 원하는 최종 상태를 정의하면 되고, 나머지는 Terraform이 처리합니다. Terraform은 실행 계획을 자동으로 생성하고 리소스 간 종속성을 파악하여 구성 요소를 올바른 순서대로 프로비저닝합니다.

예를 들어 가상 머신(VM)가상 프라이빗 클라우드(VPC)에 종속되는 경우 Terraform은 VM을 프로비저닝하기 전에 VPC가 먼저 생성되도록 합니다.

반면 절차형 언어에서는 개발자가 인프라를 프로비저닝하기 위한 단계별 명령을 직접 작성해야 합니다.

Terraform 구성 파일은 버전 관리, 재사용 및 공유가 가능합니다. Terraform은 컴퓨팅 및 스토리지 리소스, S3 버킷과 같은 하위 수준 구성 요소는 물론 도메인 이름 시스템(DNS) 항목과 서비스형 소프트웨어(SaaS) 기능과 같은 상위 수준 구성 요소도 관리합니다.

2025년 2월, IBM은 HashiCorp와 Terraform을 비롯한 해당 회사의 제품을 인수했습니다.

Terraform은 어떻게 작동하나요?

Terraform은 접근 가능한 애플리케이션 프로그래밍 인터페이스(API)를 제공하는 거의 모든 플랫폼 및 서비스와 함께 사용할 수 있으며, 여기에는 Amazon Web Services(AWS), Microsoft Azure, Google Cloud, GitHub, IBM® Cloud 및 Docker가 포함됩니다.

핵심 Terraform 워크플로는 다음의 세 가지 단계로 구성됩니다.

  1. 쓰기
  2. 계획 
  3. 적용

1. 쓰기

개발자는 사람이 읽기 쉬운 구성 파일을 작성하여 원하는 인프라의 리소스 구성을 정의합니다. 이 파일은 선언형 방식으로 작성됩니다. 개발자는 원하는 인프라의 상태를 정의할 뿐, 이를 프로비저닝하는 방법은 지정하지 않습니다.

예를 들어 개발자가 클라우드에서 호스팅되는 애플리케이션을 배포하기 위한 인프라를 프로비저닝하려고 한다고 가정해 보겠습니다. 이 경우 개발자는 가상 프라이빗 클라우드의 가상 머신과 이에 연결된 보안 그룹 및 로드 밸런서가 필요하다고 지정할 수 있습니다.

단일 구성 파일로 여러 클라우드 공급업체와 서비스에 걸쳐 있는 리소스를 관리할 수 있습니다.

2. 계획

Terraform은 개발자가 작성한 구성과 조직 인프라의 현재 상태를 모두 분석합니다. 그런 다음 현재 상태에서 원하는 상태에 도달하기 위한 실행 계획을 생성합니다.

이 실행 계획은 개발자가 정의한 구성에 맞춰 실제 인프라를 조정하기 위해 Terraform이 생성, 업데이트 또는 삭제할 인프라의 목록 형태로 제공됩니다.

앞서 살펴본 가상 프라이빗 클라우드의 가상 머신에 애플리케이션을 배포하는 예를 다시 살펴보겠습니다. Terraform의 실행 계획에는 다음과 같은 작업이 포함될 수 있습니다.

  • 애플리케이션을 호스팅할 새로운 가상 머신을 프로비저닝합니다. 

  • 기존 보안 그룹을 수정하여 새 가상 머신으로의 트래픽을 허용합니다. 

  • 가상 머신 간에 트래픽을 분산하기 위해 로드 밸런서를 프로비저닝합니다.

개발자는 Terraform이 실행하기 전에 실행 계획을 검토, 수정 및 검증할 수 있습니다.

3. 신청

계획이 승인되면 Terraform은 리소스 종속성을 고려하여 올바른 순서로 제안된 작업을 수행합니다. 즉, 리소스 A가 리소스 B에 의존하는 경우 Terraform은 리소스 B가 리소스 A보다 먼저 생성되도록 합니다.

예를 들어 개발자가 VPC의 속성을 업데이트하고 해당 VPC에서 실행되는 가상 머신 수를 변경한다고 가정해 보겠습니다. Terraform은 가상 머신을 확장하기 전에 업데이트된 속성을 반영하여 VPC를 다시 생성합니다.

Terraform의 구성 요소

Terraform의 주요 구성 요소는 다음과 같습니다.

  • 구성 파일
  • 모듈
  • 상태 파일
  • 제공자들
  • 레지스트리
  • Terraform CLI
구성 파일

구성 파일은 개발자가 온프레미스 및 클라우드 환경에서 원하는 리소스를 정의하는 방식입니다. 이 파일에는 Terraform이 사용할 프로바이더, 생성할 인프라 그리고 가져올 데이터가 정의됩니다. 개발자는 구성 파일을 수정, 재사용 및 공유할 수 있습니다.

개발자는 JSON 또는 HashiCorp Configuration Language(HCL)로 구성 파일을 작성할 수 있습니다. HCL은 선언형 구문을 사용합니다. 즉, 개발자는 인프라를 프로비저닝하는 방법을 지정하는 대신 원하는 인프라의 상태를 정의합니다. HCL은 JSON의 키-값 쌍과 유사하지만 사람이 읽기 쉽도록 최적화되어 있습니다.

모듈

모듈은 일반적으로 함께 사용되는 여러 리소스를 위한 재사용 가능 컨테이너입니다. 예를 들어, 모듈에는 가상 머신, 데이터베이스, 네트워크 구성, 보안 설정이 모두 하나의 패키지에 포함될 수 있습니다. 모듈은 구성 파일의 컬렉션으로 저장됩니다.

Terraform 모듈을 사용하면 개발자가 매번 처음부터 시작하지 않고도 복잡한 인프라를 구축할 수 있습니다. 대신 필요한 인프라 구성이 이미 정의되어 있는 모듈을 사용할 수 있습니다.

상태 파일

Terraform 상태 파일은 구성 요소, 구성 정보 및 리소스 간 관계를 포함한 현재 인프라 상태를 나타내는 정보입니다.

Terraform은 실행 계획을 생성할 때 먼저 구성 파일과 상태 파일을 비교합니다. 이 비교를 통해 Terraform은 현재 인프라를 원하는 구성과 일치시키기 위해 어떤 변경을 수행해야 하는지 판단합니다.

제공자들

Terraform 프로바이더는 외부 서비스 및 플랫폼의 API와 상호 작용하기 위해 Terraform이 사용하는 플러그인입니다. 프로바이더를 사용하면 Terraform은 서비스형 인프라(IaaS), 서비스형 플랫폼(PaaS) 및 서비스형 소프트웨어(SaaS) 환경의 리소스를 관리할 수 있습니다. 각 프로바이더에는 서비스 연결, 인증 및 리소스 프로비저닝에 필요한 모든 코드가 포함되어 있습니다. 

개발자는 직접 프로바이더를 작성할 수도 있지만, HashiCorp와 다른 Terraform 사용자가 작성한 기존 프로바이더를 사용할 수도 있습니다. 대부분의 주요 프라이빗 및 퍼블릭 클라우드 서비스는 물론 데이터베이스, 네트워킹 솔루션 및 기타 일반적인 툴을 위한 사전 구축된 프로바이더가 제공됩니다. 

Terraform은 기존 인프라도 관리할 수 있습니다. 개발자는 import 블록을 사용하여 Terraform 외부에서 생성된 리소스도 Terraform 관리 대상으로 가져올 수 있으므로, 새 리소스뿐 아니라 전체 환경을 코드로 관리하고 제어할 수 있습니다. 

레지스트리

Terraform Registry는 프로바이더, 모듈, 정책 규칙 및 솔루션을 위한 저장소입니다.

누구나 공개 Terraform Registry에 리소스와 템플릿을 게시하고 사용할 수 있습니다. 이 Registry의 프로바이더나 모듈을 사용하려면 사용자는 이를 구성에 추가하면 됩니다. 사용자가 terraform init을 실행하면 Terraform이 필요한 모든 구성 요소를 자동으로 다운로드합니다.

조직은 자체 모듈과 리소스를 내부에서 공유하기 위해 프라이빗 Registry를 생성할 수도 있습니다.

Terraform CLI

Terraform CLI는 Terraform으로 인프라를 관리하기 위한 명령줄 인터페이스(CLI) 툴입니다. 개발자는 이를 사용하여 명령을 실행하고, 실행 계획을 생성하며, 변경 사항을 적용하고, 구성 파일, 상태 파일, 프로바이더 및 모듈과 같은 Terraform의 핵심 구성 요소와 상호 작용합니다.

조직들은 Terraform을 어떻게 사용하나요?

조직은 Terraform을 사용하여 인프라의 전체 라이프사이클에 걸쳐 인프라를 프로비저닝하고 관리합니다. 일반적인 사용 사례는 다음과 같습니다.

  • 하이브리드 및 멀티클라우드 환경 관리
  • 애플리케이션 인프라 관리
  • 개발자 셀프서비스 
  • 정책 및 규정 준수 관리
  • 팀 협업

하이브리드 및 멀티클라우드 환경 관리

하이브리드멀티클라우드 환경은 각 클라우드 공급업체마다 자체 인터페이스, 툴 및 워크플로를 사용하기 때문에 복잡할 수 있습니다.이러한 환경에서는 중요한 클라우드 리소스가 퍼블릭 클라우드, 프라이빗 클라우드 및 여러 데이터 센터에 분산되어 있을 수 있습니다.

조직은 Terraform을 사용하여 복잡한 대규모 클라우드 인프라의 관리 및 오케스트레이션을 간소화할 수 있습니다. 구체적으로 Terraform을 사용하면 조직은 하나의 통합된 워크플로에서 동일한 구성 언어를 사용하여 퍼블릭 클라우드, 프라이빗 클라우드 및 온프레미스 환경 전반의 리소스를 프로비저닝하고 관리할 수 있습니다.

대규모 인프라를 효율적으로 관리할 수 있도록 Terraform Stacks는 상호 의존적인 Terraform 구성의 조정, 배포 및 라이프사이클 관리를 자동화하고 최적화하여 인프라 관리에 드는 시간과 운영 부담을 줄여 줍니다. 

Stacks는 Terraform의 기존 루트 모듈 구조를 Terraform 모듈을 기반으로 구축된 새로운 컴포넌트 기반 아키텍처로 대체합니다. Stacks를 사용하면 사용자는 대규모 환경에서 인프라 라이프사이클을 프로비저닝하고 조율할 수 있으며, 코드형 인프라(IaC)를 더욱 확장한 체계적이고 재사용 가능한 방식을 활용할 수 있습니다.

애플리케이션 인프라 관리

Terraform은 다계층 애플리케이션을 위한 인프라를 배포하고 관리할 수 있으므로 조직은 종속성을 존중하면서 통합 워크플로에서 각 계층의 리소스를 관리할 수 있습니다.

예를 들어 다중 계층 애플리케이션은 웹 서버 풀, 데이터베이스 계층, API 계층, 캐싱 서버 및 라우팅 계층으로 구성될 수 있습니다. Terraform은 데이터베이스 계층에 종속된 웹 서버를 프로비저닝하기 전에 먼저 데이터베이스 계층을 프로비저닝합니다.

개발자 셀프서비스

개발자 셀프서비스는 단순한 인프라 프로비저닝을 넘어 환경 설정부터 배포 및 지속적인 운영까지 애플리케이션의 전체 라이프사이클을 지원하는 방향으로 발전하고 있습니다.

Terraform은 이러한 현대적인 셀프서비스 모델의 기반을 제공합니다. Terraform은 Backstage, Port, Cortex와 같은 개발자 포털, ServiceNow 및 Jira와 같은 ITSM 시스템, 그리고 GitHub Actions 및 Jenkins와 같은 CI/CD 파이프라인 플랫폼과 통합됩니다.

Terraform 워크플로 내에서 작업하기를 선호하는 팀을 위해 Waypoint는 Terraform 기반 개발자 셀프서비스 포털 역할을 하며, 정책 기반의 일관된 애플리케이션 배포 환경을 제공합니다. 

AWS, Azure 및 GCP 전반에서 Terraform은 이러한 진입점을 통합하는 통합 및 제어 계층 역할을 하여 거버넌스와 운영의 일관성을 유지하면서도 개발자가 더욱 빠르게 작업할 수 있도록 지원합니다.

정책 및 규정 준수 관리

조직은 Terraform을 사용하여 팀이 프로비저닝하고 사용할 수 있는 리소스 유형에 대해 보안 및 규정 준수 정책을 시행할 수 있습니다.

인프라 전반에서 세분화된 논리 기반 거버넌스를 적용하기 위한 HashiCorp의 정책형 코드(Policy as Code) 프레임워크인 Sentinel은 기본으로 사용할 수 있는 제어 기능(예: NIST SP-80053 매핑)을 제공하는 사전 정의된 정책 라이브러리를 제공합니다. 이러한 정책을 사용하면 팀은 모든 정책을 처음부터 직접 작성하지 않고도 일반적인 컴플라이언스 요구 사항을 적용할 수 있습니다.

예를 들어 조직은 Terraform 모듈을 사용하여 조직 전반에서 리소스를 배포하고 관리하기 위한 표준을 코드화할 수 있습니다. 다른 팀이 이러한 승인된 모듈을 사용하면 조직의 운영 기준을 준수하는 방식으로 리소스를 배포하고 있음을 확신할 수 있습니다.

팀 협업

조직은 Terraform 코드와 구성 파일을 Git 리포지토리와 같은 버전 관리 시스템(VCS)에 저장할 수 있습니다. 이를 통해 DevOps 팀은 코드 공동 작업, 구성 정의 검토, 인프라 변경 사항 추적 및 필요한 경우 이전 인프라 버전으로의 롤백을 수행할 수 있습니다.

HashiCorp Terraform과 Red Hat Ansible 비교

Terraform과 Ansible은 인프라 프로비저닝을 넘어 자동화 범위를 확장하기 위해 함께 사용하는 경우가 많습니다. Terraform은 클라우드 및 하이브리드 환경을 위한 복잡한 리소스를 준비하고 프로비저닝하는 등 인프라 프로비저닝에 뛰어난 성능을 제공합니다. Ansible은 기존 인프라를 일관되게 구성, 수정 및 유지 관리할 수 있는 강력한 구성 관리 툴입니다. 

YAML로 작성된 Ansible 플레이북을 사용하면 소프트웨어 설치 및 시스템 설정 업데이트와 같은 작업을 세밀하게 제어할 수 있습니다.

두 툴은 인프라 라이프사이클의 서로 다른 단계에 사용되지만 긴밀하게 연결되어 있어, 여러 환경에서 일관성을 확보하려는 조직에 적합합니다.

Terraform과 Ansible의 통합은 리소스 생성과 구성 관리 간의 간극을 줄이는 데 도움이 됩니다. 예를 들어 Terraform 작업은 이벤트를 전송하여 Ansible Automation Platform(AAP)의 이벤트 기반 자동화 기능을 활성화하고, 단 한 번의 Terraform apply만으로 Ansible의 동적 자동화 워크플로를 실행할 수 있습니다. 

이러한 상호 연동을 통해 인프라 툴체인을 통합하고 Day 2 운영 전반에서 패치, 확장 및 서비스 종료와 같은 작업의 운영 부담을 줄일 수 있습니다. Terraform과 Ansible를 함께 사용하면 인프라와 애플리케이션이 라이프사이클 전반에 걸쳐 일관성과 안정성을 유지하도록 지원할 수 있습니다.

IBM DevOps

DevOps란 무엇인가요?

Andrea Crawford는 DevOps의 정의, DevOps의 가치, 그리고 DevOps 사례와 툴이 아이디어 구상부터 프로덕션에 이르기까지 전체 소프트웨어 Delivery Pipeline을 통해 앱을 이동하는 데 어떻게 도움이 되는지 설명합니다. 최고의 IBM 사고 리더가 이끄는 이 커리큘럼은 비즈니스 리더가 성장을 주도할 수 있는 AI 투자의 우선순위를 정하는 데 필요한 지식을 얻을 수 있도록 설계되었습니다.

Terraform과 Kubernetes 비교

Kubernetes와 Terraform은 클라우드 환경에서 널리 사용되는 구성 요소이며, 둘 다 인프라 관련 작업을 자동화하는 데 도움을 줍니다. 그러나 가장 큰 차이점은 Kubernetes는 컨테이너화된 워크로드에 중점을 두는 반면, Terraform은 Kubernetes 클러스터 자체를 포함한 모든 유형의 인프라 구성 요소를 관리한다는 점입니다.

Kubernetes는 컨테이너화된 애플리케이션의 배포, 관리 및 확장을 예약하고 자동화하기 위한 오픈 소스 컨테이너 오케스트레이션 플랫폼입니다. Terraform은 인프라의 프로비저닝과 관리를 자동화하는 코드형 인프라(IaC) 툴입니다.

이러한 툴은 서로 다른 기능을 수행하지만 클라우드 백엔드에서는 함께 사용되는 경우가 많습니다. 예를 들어 Terraform은 클라우드 플랫폼에서 Kubernetes 클러스터의 프로비저닝을 자동화할 수 있으며, Kubernetes는 이러한 클러스터 내 애플리케이션의 배포를 관리합니다.

작성자

Derek Robertson

Staff Writer

IBM Think

Matthew Kosinski

Staff Editor

IBM Think

Gregg Lindemulder

Staff Writer

IBM Think