개발도구 & 환경

Terraform 기초 사용법

지식소 채움이 2025. 5. 21. 13:35

Terraform은 클라우드 인프라를 코드로 관리하는 인프라스트럭처 코드(Infrastructure as Code, IaC) 도구입니다. AWS, Azure, GCP 같은 클라우드 뿐만 아니라 온프레미스 자원을 사람이 읽기 쉬운 설정 파일(HCL)로 정의하고, 안전하게 생성·변경·파괴할 수 있습니다. Terraform은 각 클라우드 서비스의 API와 통신하는 플러그인 제공자(Provider)를 사용합니다. 예를 들어 AWS 클라우드를 사용하려면 provider "aws" 블록을 설정해야 하며, 이 Provider가 실제 AWS 인스턴스나 네트워크 자원 등을 Terraform이 관리할 수 있도록 합니다. 이처럼 Terraform 구성 파일에 필요한 Provider를 선언해 두면, 동일한 워크플로우로 다양한 플랫폼의 인프라를 프로비저닝하고 관리할 수 있습니다.

Terraform 설치 방법

Terraform CLI는 HashiCorp에서 제공하는 바이너리(zip)를 다운로드하거나, 각 운영체제 전용 패키지 매니저로 설치할 수 있습니다. 예를 들어:

  • macOS: Homebrew로 brew install terraform.
  • Windows: Chocolatey로 choco install terraform.
  • Linux (CentOS/RHEL): HashiCorp 저장소를 추가한 뒤 sudo yum install terraform. (Ubuntu 등 Debian 계열에서는 유사하게 apt 명령을 사용)

또는 Terraform 다운로드 페이지에서 운영체제에 맞는 ZIP 파일을 받아 압축 해제 후 실행 파일을 $PATH에 복사해도 됩니다. 설치가 완료되면 terraform -help 명령어로 정상 설치 여부를 확인할 수 있습니다.

핵심 개념

Terraform을 이해하기 위해 알아둘 주요 개념은 Provider, Resource, State 등입니다.

  • Provider: Terraform이 클라우드나 서비스 API와 통신하기 위해 사용하는 플러그인입니다. 예를 들어 AWS Provider를 구성하면 Terraform이 AWS 리소스를 생성·관리할 수 있습니다. 제공자는 필요한 경우 API 엔드포인트, 리전, 자격증명 등을 설정해야 합니다.
  • Resource: 실제 인프라 자원을 코드로 표현한 블록입니다. 예를 들어 aws_instance, aws_vpc 같은 리소스가 있습니다. 각 리소스는 인스턴스 타입, 이미지(AMI) 등 인수(arguments)를 받고, 생성된 후에는 자체 ID나 ARN 같은 출력 속성(attributes)을 가집니다. Terraform은 이 리소스를 생성·읽기·업데이트·삭제(lifecycle)하며 관리합니다.
  • State: Terraform이 관리하는 인프라 현황을 저장하는 파일입니다. 기본적으로 로컬의 terraform.tfstate에 저장하며, 클라우드 상의 리소스와 설정 파일의 연결 관계, 메타데이터 등을 기록하여 변경 시 어떤 작업이 필요한지 판단합니다. 즉 Terraform은 이 상태 파일을 참고하여 현재 구성과 실제 리소스 간 차이를 계산하고, 필요한 변경사항을 계획(plan)하거나 적용(apply)합니다. (팀 협업 시에는 S3나 HashiCorp Cloud Platform 같은 원격 백엔드를 이용해 상태를 공유할 수도 있습니다.)

간단한 AWS EC2 예제

이제 간단한 예제로 AWS EC2 인스턴스를 만들어 보겠습니다. 먼저 작업 디렉터리를 만들고, main.tf 파일에 다음과 같이 작성합니다:

provider "aws" {
  region = "us-west-2"
}

resource "aws_instance" "app_server" {
  ami           = "ami-830c94e3"
  instance_type = "t2.micro"
}

위 코드에서 provider "aws" 블록은 AWS 프로바이더를 사용하되 리전을 us-west-2로 설정합니다. resource "aws_instance" "app_server" 블록은 AMI ID와 인스턴스 유형(t2.micro)을 지정해 EC2 인스턴스 한 대를 정의합니다. (프로바이더 설정은 플랫폼 연결 정보를, 리소스 블록은 생성할 인프라 자원을 나타냅니다.)

설정 파일 작성이 끝났으면 다음 명령어로 진행합니다. 먼저 terraform init을 실행하면 현재 디렉터리의 설정을 초기화하고, 선언된 프로바이더 플러그인을 자동으로 설치합니다. 그다음 terraform plan 명령을 사용하면 Terraform이 적용할 변경사항(실행 계획)을 미리 보여줍니다. 예를 들어 “+ aws_instance.app_server”와 같은 메시지가 출력되면 인스턴스가 생성된다는 뜻입니다. 마지막으로 terraform apply를 실행하면 이러한 계획이 실제로 적용되어 AWS에 EC2 인스턴스가 생성됩니다. (명령어 실행 중에는 자원 생성 여부를 확인하는 프롬프트가 나오며, -auto-approve 옵션을 추가하면 자동 승인 후 진행합니다.) 이 과정이 끝나면 AWS 콘솔이나 CLI에서 EC2 인스턴스가 생성된 것을 확인할 수 있고, 같은 디렉터리에 terraform.tfstate 파일이 생깁니다. 완료 후에는 terraform destroy를 통해 해당 인스턴스를 정리할 수 있습니다.

주요 명령어 정리

Terraform 사용 시 자주 쓰는 기본 명령어입니다:

  • terraform init : 작업 디렉터리를 초기화합니다. 필요한 Provider를 다운로드하고 모듈을 설치하여 Terraform 작업 준비를 마칩니다. (초기화가 되지 않은 디렉터리에서는 다른 명령어가 동작하지 않습니다.)
  • terraform plan : 작성한 설정과 현재 상태를 비교하여, 인프라에 어떤 변경사항이 생길지 실행 계획을 미리 보여줍니다. 실제 리소스 변경은 하지 않고, 검토용으로 사용합니다.
  • terraform apply : 위에서 생성된 실행 계획에 따라 실제 인프라를 생성·변경합니다. 기본적으로 plan을 자동으로 생성해 보여준 후 진행하며, -auto-approve 옵션으로 확인 없이 적용할 수 있습니다.
  • terraform destroy : 관리 중인 모든 리소스를 삭제합니다. (사전 검토용으로 terraform plan -destroy를 실행할 수도 있으며, apply -destroy와 동일하게 동작합니다.)
  • 그 외 유용한 명령어: terraform fmt(코드 자동 정렬), terraform validate(구성 문법 검사), terraform refresh(실제 리소스 상태로 tfstate 갱신), terraform output(출력값 조회) 등도 자주 사용됩니다.

실무 활용 예시

Terraform은 실제 업무에서 아래와 같은 사례로 널리 활용됩니다:

  • 멀티티어 애플리케이션 배포: 웹 서버, 데이터베이스, 로드밸런서 등 여러 계층으로 구성된 인프라를 Terraform 코드로 정의하여 배포하고 스케일링할 수 있습니다. 예를 들어 N-계층 구조를 갖는 애플리케이션을 자동으로 생성·확장하며 모니터링하는 데 쓰입니다.
  • 자체 서비스화(셀프서비스): 개발/운영팀이 각자 필요한 인프라를 직접 프로비저닝할 수 있도록 Terraform 모듈을 제작합니다. 이렇게 하면 팀 단위로 인프라 표준을 코드로 정의하여 서로 독립적으로 인프라를 관리할 수 있습니다.
  • 다양한 서비스 연동: Heroku 애플리케이션 배포, DNS 설정, CDN 구성 등 여러 SaaS 서비스와 연동된 환경을 코드로 정의합니다. 예를 들어, Terraform으로 Heroku 앱을 설정하고 DNSimple·Cloudflare 같은 외부 서비스를 함께 구성할 수 있습니다.
  • 멀티클라우드 및 테스트 환경 구성: Terraform으로 여러 클라우드(AWS, Azure 등)에 걸친 인프라 데모 환경을 생성하고, 변수 값을 조정해 규모나 환경을 쉽게 변경할 수 있습니다. 이를 통해 다양한 환경에서 빠르게 테스트하거나 모의 실험을 수행할 수 있습니다.

이처럼 Terraform은 인프라를 코드로 관리하면서 버전 관리, 재사용 가능 모듈화, 팀 협업 등의 이점을 제공합니다. 클라우드 환경 구축과 변경 작업을 자동화하고 일관되게 유지하여, 운영 효율을 높이고 인프라 운영 실수를 줄일 수 있습니다.

참고: 더 자세한 Terraform 예제와 사용법은 HashiCorp 공식 문서와 다양한 튜토리얼을 참고하세요.

'개발도구 & 환경' 카테고리의 다른 글

GitHub 기초 사용법  (0) 2025.05.22