HashiCorp Terraform은 절차적 언어가 아닌 선언적 언어를 사용합니다. 사용자가 인프라 리소스에 대해 원하는 최종 상태를 설명하면 Terraform이 나머지를 처리합니다. Terraform은 자동으로 실행 계획을 생성하고, 리소스 간의 종속성을 식별하고, 구성 요소를 올바른 순서로 프로비저닝합니다. 예를 들어, 가상 머신(VM)이 프라이빗 클라우드(VPC)에 종속된 경우 Terraform은 VM을 프로비저닝하기 전에 VPC가 생성되었는지 확인합니다.
반면, 절차적 언어를 사용하면 개발자는 인프라를 프로비저닝하기 위한 단계별 지침을 작성해야 합니다.
Terraform 구성 파일은 버전 관리, 재사용 및 공유가 가능합니다. Terraform은 컴퓨팅 및 스토리지 리소스와 같은 하위 수준 구성 요소와 도메인 이름 시스템(DNS) 항목 및 서비스형 소프트웨어(SaaS) 기능과 같은 상위 수준 구성 요소를 관리합니다.
2025년 2월, IBM은 HashiCorp과 제품 및 서비스, 그리고 Terraform을 인수했습니다.
Terraform은 애플리케이션 프로그래밍 인터페이스(API)를 통해 클라우드 플랫폼 및 기타 서비스의 리소스를 생성하고 관리합니다. Terraform은 Amazon Web Services(AWS), Microsoft Azure, Google Cloud, GitHub, IBM Cloud, Docker를 비롯한 액세스 가능 API를 통해 거의 모든 플랫폼 또는 서비스에서 작동합니다.
핵심 Terraform 워크플로는 다음의 세 가지 단계로 구성됩니다.
개발자는 사람이 읽을 수 있는 구성 파일을 작성하여 원하는 인프라에 대한 리소스 구성을 정의합니다. 이 파일은 선언적 파일로, 개발자가 원하는 인프라에 대해 설명하지만 프로비저닝 방법은 설명하지 않습니다.
예를 들어, 개발자가 클라우드 호스팅 앱을 배포하기 위한 인프라를 프로비저닝하려는 경우 연결된 보안 그룹 및 로드 밸런서와 함께 프라이빗 클라우드에 가상 머신이 필요하다고 지정할 수 있습니다.
단일 구성 파일은 여러 클라우드 공급자 및 서비스에 있는 리소스를 관리할 수 있습니다.
Terraform은 개발자가 제공한 서면 구성과 조직 인프라의 현재 상태를 모두 분석합니다. 그런 다음, 현재 상태에서 원하는 최종 상태에 도달하는 방법을 설명하는 실행 계획을 수립합니다.
계획 자체는 개발자가 설명한 구성에 맞춰 실제 세계를 구현하기 위해 Terraform이 생성, 업데이트 또는 파괴할 인프라 목록의 형태를 취합니다.
개발자가 가상 프라이빗 클라우드의 가상 머신에 애플리케이션을 배포하는 이전 예를 생각해 보세요. Terraform의 계획에는 다음과 같은 조치가 포함될 수 있습니다.
개발자는 Terraform이 계획을 실행하기 전에 계획을 검토하고 수정할 수 있습니다.
계획이 승인되면 Terraform은 리소스 종속성을 고려하여 올바른 순서로 제안된 작업을 수행합니다. 즉, 리소스 A가 리소스 B에 의존하는 경우 Terraform은 리소스 B가 리소스 A보다 먼저 생성되도록 합니다.
예를 들어, 개발자가 VPC의 속성을 업데이트하고 해당 VPC의 가상 머신 수를 변경하면 Terraform은 가상 머신을 확장하기 전에 업데이트된 속성으로 VPC를 다시 생성합니다.
Terraform의 주요 구성 요소는 다음과 같습니다.
구성 파일은 개발자가 온프레미스 및 클라우드 환경에 대해 원하는 리소스를 정의하는 방법입니다. 이 파일은 사용할 공급자, 생성할 인프라, 가져올 데이터를 Terraform에 알려줍니다. 개발자는 구성 파일을 수정하고 재사용하고 공유할 수 있습니다.
개발자는 JSON 또는 HCL(HashiCorp Configuration Language)로 구성 파일을 작성할 수 있습니다. HCL은 선언적 구문을 사용합니다. 즉 개발자는 프로비저닝 방법을 지정하는 것이 아니라 원하는 인프라를 설명합니다. HCL은 JSON의 키-값 쌍과 유사하지만 사람이 읽기 쉽도록 최적화되어 있습니다.
모듈은 일반적으로 함께 사용되는 여러 리소스를 위한 재사용 가능 컨테이너입니다. 예를 들어, 모듈에는 가상 머신, 데이터베이스, 네트워크 구성, 보안 설정이 모두 하나의 패키지에 포함될 수 있습니다. 모듈은 구성 파일의 컬렉션으로 저장됩니다.
Terraform 모듈을 사용하면 개발자가 매번 처음부터 시작하지 않고도 복잡한 인프라를 생성할 수 있습니다. 즉 필요한 인프라 배치를 이미 설명하는 모듈을 사용할 수 있습니다.
Terraform 상태 파일은 구성 요소, 구성 및 리소스 간의 관계를 포함하여 인프라의 현재 상태를 나타냅니다.
Terraform은 계획을 생성할 때 구성 파일을 상태 파일과 비교하는 것으로 시작합니다. 이를 통해 Terraform은 현재 인프라를 원하는 구성에 맞추기 위해 필요한 변경 사항을 판단할 수 있습니다.
Terraform 공급자는 Terraform이 외부 서비스 및 플랫폼용 API와 상호 작용할 수 있도록 하는 플러그인입니다. 공급자를 통해 Terraform은 서비스형 인프라(IaaS), 서비스형 플랫폼(PaaS) 및 서비스형 소프트웨어(SaaS) 환경에서 리소스를 관리할 수 있습니다. 각 공급자에는 Terraform이 서비스에 연결하고 리소스를 인증 및 프로비저닝하는 데 필요한 모든 코드가 포함되어 있습니다.
개발자는 자체 공급자를 작성할 수도 있지만, HashiCorp 및 기타 Terraform 사용자가 작성한 기존 공급자를 사용할 수도 있습니다. 대부분의 주요 프라이빗 및 퍼블릭 클라우드 서비스, 데이터베이스, 네트워킹 솔루션, 기타 일반 툴에 대한 사전 구축된 공급자가 존재합니다.
Terraform 레지스트리는 공급자, 모듈, 정책 규칙 및 솔루션을 저장하는 저장소입니다.
누구나 공개 Terraform 레지스트리에 리소스를 게시하고 사용할 수 있습니다. 조직에서는 개인 레지스트리를 만들어서 자체 모듈과 리소스를 내부적으로 공유할 수도 있습니다.
Terraform CLI는 Terraform을 사용하여 인프라를 관리하기 위한 CLI(명령줄 인터페이스) 도구입니다. 개발자는 이를 사용하여 명령을 실행하고, 실행 계획을 생성하고, 변경 사항을 적용하고, 구성 파일, 상태 파일, 공급자 및 모듈과 같은 주요 Terraform 구성 요소와 상호 작용합니다.
조직은 Terraform을 사용하여 라이프사이클 전반에 걸쳐 인프라를 프로비저닝하고 관리합니다. 일반적인 사용 사례는 다음과 같습니다.
Terraform은 다계층 애플리케이션을 위한 인프라를 배포하고 관리할 수 있으므로 조직은 종속성을 존중하면서 통합 워크플로에서 각 계층의 리소스를 관리할 수 있습니다.
예를 들어, 다중 계층 애플리케이션은 웹 서버 풀, 데이터베이스 계층, API 계층, 캐싱 서버, 라우팅 계층으로 구성될 수 있습니다. Terraform은 데이터베이스 계층에 의존하는 웹 서버를 프로비저닝하기 전에 데이터베이스 계층을 프로비저닝합니다.
대형 조직의 중앙 집중식 IT 운영팀은 일반적으로 반복적인 인프라 요청을 많이 받습니다.
조직은 Terraform을 사용하여 제품 팀이 자체 인프라를 독립적으로 관리할 수 있도록 지원하는 셀프 서비스 인프라 모델을 구축할 수 있습니다. 예를 들어, 팀은 사전 구축된 모듈을 사용하여 표준화되고 승인된 구성 요소를 직접 배포할 수 있습니다.
또한 조직은 Terraform을 티켓팅 시스템 및 지속적 통합/지속적 배포 (CI/CD) DevOps 파이프라인과 통합하여 새로운 인프라 프로비저닝 요청을 자동화할 수 있습니다. 예를 들어, 사용자가 티켓팅 시스템에 인프라 요청을 제출하면 Terraform은 워크플로를 시작하여 그에 따라 리소스를 자동으로 업데이트할 수 있습니다.
조직은 Terraform을 사용하여 팀이 프로비저닝하고 사용할 수 있는 리소스 유형에 대해 보안 및 규정 준수 정책을 시행할 수 있습니다.
예를 들어, 조직은 Terraform 모듈을 사용하여 조직 전반에 리소스를 배포하고 관리하기 위한 표준을 코드화할 수 있습니다. 다른 팀이 이러한 승인된 모듈을 사용할 때 조직 관행에 따라 리소스를 배포하고 있는지 확인할 수 있습니다.
조직은 버전 관리 시스템(VCS)에 Terraform 구성 파일을 저장할 수 있습니다. 이를 통해 DevOps 팀은 코드에 대해 협업하고, 정의를 검토하고, 인프라 변경 사항을 추적하고, 필요한 경우 이전 인프라 버전으로 롤백할 수 있습니다.
Kubernetes와 Terraform은 클라우드 환경의 일반적인 구성 요소이며, 둘 다 인프라 관련 작업을 자동화하는 데 도움이 됩니다. 하지만 이 둘의 핵심적인 차이점은 Kubernetes는 컨테이너화된 워크로드에 초점을 맞추는 반면, Terraform은 Kubernetes 클러스터 자체를 포함한 모든 종류의 인프라 구성 요소를 관리한다는 점입니다.
Kubernetes는 컨테이너화된 애플리케이션의 배포, 관리 및 확장을 예약하고 자동화하기 위한 오픈 소스 컨테이너 오케스트레이션 플랫폼입니다. Terraform은 인프라의 프로비저닝 및 관리를 자동화하는 코드형 인프라 도구입니다.
이 둘은 서로 다른 기능을 가진 별개의 툴이지만, 클라우드 환경에서 함께 작동하는 경우가 많습니다. 예를 들어, Terraform은 클라우드 플랫폼에서 Kubernetes 클러스터 프로비저닝을 자동화할 수 있으며, Kubernetes는 이러한 클러스터 내에서 애플리케이션 배포를 관리합니다.
Terraform과 Ansible은 모두 핵심 인프라 작업을 자동화하는 데 도움이 되는 코드형 인프라 툴입니다. 하지만 서로 다른 언어를 사용하며 서로 다른 용도로 사용되는 경우가 많습니다. Terraform은 인프라 리소스를 프로비저닝하는 데 사용되는 반면, Ansible은 리소스 구성을 관리하는 데 자주 사용됩니다.
Terraform은 순수 선언적 언어를 사용하는 반면, Ansible은 선언적 언어와 절차적 언어를 모두 사용합니다. 절차적 구성에서 개발자는 리소스를 원하는 상태로 구성하는 단계를 지정합니다. 절차적 구성은 노동 집약적이지만, 더 많은 제어 기능을 제공할 수도 있습니다.
YAML로 작성된 Ansible 플레이북을 사용하면 소프트웨어 설치 및 시스템 설정 업데이트와 같은 작업을 세밀하게 제어할 수 있습니다. Ansible은 패키지 관리 및 운영 체제 업데이트를 포함하여 일반적인 구성 관리 작업을 위한 다양한 사전 구축된 모듈을 가지고 있습니다. 또한 Ansible은 리소스에 변경 사항을 멱등성으로 적용할 수 있으며, 이는 작업이 처음 적용된 후 동일한 작업을 추가로 적용해도 리소스가 변경되지 않는다는 것을 의미합니다.
이러한 특성을 종합하면 Ansible이 구성 관리에 일반적으로 선택되는 이유를 잘 알 수 있습니다.
Terraform은 인프라 리소스를 프로비저닝할 수 있지만, Ansible만큼 효과적으로 리소스 내부의 소프트웨어를 관리할 수는 없습니다. 예를 들어, Terraform은 인스턴스 유형 및 디스크 크기와 같은 속성을 포함하여 새 가상 머신을 정의할 수 있지만, 가상 머신에서 운영 체제를 업데이트할 수는 없습니다.
하지만 Terraform은 Ansible과 같은 구성 관리 툴과 함께 작동하여 인프라 구성을 단순화하고 간소화할 수 있습니다. 예를 들어, 조직은 Terraform을 사용하여 가상 머신을 프로비저닝하고 Ansible을 사용하여 해당 가상 머신에 소프트웨어를 구성할 수 있습니다.
기존 IT 인프라를 자동으로 확장하여 더 낮은 비용으로 더 높은 성능을 제공합니다.
IT 운영을 위한 AI가 탁월한 비즈니스 성과를 이끌어내는 데 필요한 인사이트를 어떻게 제공하는지 알아보세요.
단순한 작업 자동화를 넘어 기본 제공되는 도입 및 확장을 통해 중요하고 고객을 대상으로 하며 수익을 창출하는 프로세스를 처리합니다.