0Pricing
DevOps Bootcamp · 강의

Terratest로 단위 테스트

인프라 코드 테스트를 위한 Go 라이브러리인 Terratest를 사용해 Terraform 모듈의 단위 테스트를 작성하는 방법을 학습합니다.

Terratest로 단위 테스트은(는) CoddyKit의 무료 DevOps Bootcamp 강의입니다. 이것은 4개 중 2번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 DevOps Bootcamp 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. DevOps Bootcamp 강의에는 총 4개의 강의가 포함되어 있습니다.

코드형 인프라를 테스트해야 하는 이유

코드형 인프라를 사용하면 소프트웨어처럼 인프라를 관리할 수 있습니다. 소프트웨어와 마찬가지로 코드형 인프라 구성에도 버그가 있을 수 있습니다!

  • 신뢰성: 배포 전에 오류를 발견합니다.
  • 일관성: 리소스가 예상대로 프로비저닝되는지 확인합니다.
  • 확신: 기존 인프라를 손상시킬 걱정을 줄이고 변경할 수 있습니다.

테라폼 코드를 테스트하는 것은 견고하고 유지 관리하기 쉬운 클라우드 환경을 구축하는 데 매우 중요합니다.

단위 테스트와 통합 테스트

코드형 인프라를 테스트할 때는 일반적으로 두 가지 주요 유형을 이야기합니다.

  • 단위 테스트: 단일 테라폼 모듈과 같이 코드에서 작고 독립적인 부분에 집중합니다. 각 구성 요소가 독립적으로 올바르게 작동하는지 확인합니다.
  • 통합 테스트: 여러 구성 요소 또는 모듈이 하나의 시스템으로 함께 작동하는지 확인하며, 클라우드 환경에 실제 리소스를 배포하는 경우가 많습니다.

이번 레슨에서는 테라폼 모듈의 단위 테스트에 집중합니다.

Terratest 소개

Terratest는 테라폼을 만든 HashiCorp가 인프라 코드를 테스트하기 위해 특별히 개발한 Go 라이브러리입니다.

  • 테라폼, Packer, Kubernetes 및 기타 코드형 인프라 코드에 대한 자동화된 테스트를 작성하는 데 도움이 됩니다.
  • Terratest는 클라우드 프로바이더에 실제 인프라를 배포하고, 해당 인프라에 대한 검증을 실행한 다음 정리할 수 있습니다.
  • 단위 테스트와 통합 테스트 모두에 강력하게 활용할 수 있습니다.

Terratest 사전 요구 사항

Terratest를 시작하려면 몇 가지 준비가 필요합니다.

  • Go: Terratest는 Go 라이브러리이므로 Go가 설치되어 있어야 합니다(버전 1.13 이상 권장).
  • Terraform CLI: Terraform 명령줄 인터페이스가 설치되어 있고 어디서든 사용할 수 있어야 합니다.
  • 클라우드 제공업체 자격 증명: 실제 리소스를 배포하는 경우(클라우드 API에 접근하는 단위 테스트도 포함) 인증된 클라우드 제공업체 액세스 권한이 필요합니다(예: AWS CLI가 구성되어 있어야 함).

Go 프로그래밍 개념에 대한 기본적인 이해도 필요합니다.

Go 테스트 파일 구조

Terratest 테스트는 Go로 작성되며 Go의 표준 테스트 규칙을 따릅니다.

  • 테스트 파일 이름은 _test.go로 끝납니다(예: main_test.go).
  • 테스트 함수 이름은 Test로 시작합니다(예: TestMyModule(t *testing.T)).
  • Go에 내장된 testing 패키지를 사용합니다.

이러한 파일은 일반적으로 Terraform 모듈과 같은 위치에 두거나 별도의 test 디렉터리에 둡니다.

`terraform.Options` 알아보기

Terratest Terraform 테스트의 핵심은 terraform.Options 구조체입니다. 이 객체는 Terratest에 Terraform을 실행하는 방법을 알려 줍니다.

주요 필드는 다음과 같습니다.

  • TerraformDir: Terraform 모듈의 경로입니다.
  • Vars: Terraform 모듈에 전달할 입력 변수입니다.
  • EnvVars: Terraform 프로세스에 설정할 환경 변수입니다.
  • BackendConfig: Terraform 백엔드 구성입니다.

테스트에서 Terraform 명령을 실행하기 위한 설계도라고 할 수 있습니다.

기본 테스트 작업 흐름

일반적인 Terratest Terraform 단위 테스트는 다음 단계를 따릅니다.

  1. 옵션 정의: 모듈을 가리키고 변수를 설정하는 terraform.Options 구조체를 만듭니다.
  2. 배포: terraform.InitAndApply(t, options)를 사용하여 구성을 초기화하고 적용합니다.
  3. Destroy 예약: 테스트가 실행된 후 정리되도록 defer terraform.Destroy(t, options)를 즉시 추가합니다.
  4. 검증: 리소스 속성이나 출력을 확인하기 위해 Go의 testify/assert 또는 Terratest의 terraform.Output을 사용합니다.

이렇게 하면 깔끔하고 격리된 테스트 환경을 유지할 수 있습니다.

`terraform.Options` 작성

다음은 terraform.Options를 설정하는 방법을 보여 주는 간단한 Go 프로그램입니다. 이는 Terratest를 사용하기 위한 기본 단계입니다.

package main

import (
	"fmt"
	"path/filepath"
	"github.com/gruntwork-io/terratest/modules/terraform"
)

func main() {
	// Define the path to your Terraform configuration directory.
	// In a real test, this would point to your module under test.
	terraformConfigDir := filepath.Join(".", "my-example-module")

	// Create a terraform.Options object.
	// This struct holds all the configuration for running Terraform via Terratest.
	options := &terraform.Options{
		TerraformDir: terraformConfigDir,
		// You would add input variables here, e.g.:
		// Vars: map[string]interface{}{"instance_type": "t2.micro"},
		// And environment variables, e.g.:
		// EnvVars: map[string]string{"AWS_REGION": "us-east-1"},
	}

	fmt.Println("--- Terratest Options Configuration Demo ---")
	fmt.Printf("Configured Terraform Directory: %s\n", options.TerraformDir)
	fmt.Println("This shows how to initialize Terratest options.")
	fmt.Println("Actual Terratest unit tests are run using 'go test' command.")
}

출력 검증

Terraform 구성을 적용한 후에는 출력 결과를 확인해야 합니다. Terratest는 이러한 값을 쉽게 가져올 수 있는 함수를 제공합니다.

  • terraform.Output(t, options, "output_name"): 단일 문자열 출력을 가져옵니다.
  • terraform.OutputMap(t, options, "output_name"): 맵 출력을 가져옵니다.
  • terraform.OutputList(t, options, "output_name"): 목록 출력을 가져옵니다.

그런 다음 Go의 테스트 검증 기능(예: github.com/stretchr/testify/assert에 포함된 기능)을 사용하여 출력이 예상과 일치하는지 확인합니다.

이해도 확인

Terratest는 실제 클라우드 리소스와 상호 작용하여 Terraform 코드를 테스트하는 데 도움을 줍니다. 다음 중 Terratest 단위 테스트 작업 흐름의 일반적인 단계가 아닌 것은 무엇입니까?

복습 및 다음 단계

Terratest를 사용하여 Terraform을 단위 테스트하는 기본 내용을 학습했습니다!

  • Terratest는 IaC 테스트를 위한 Go 라이브러리입니다.
  • 실제 클라우드 인프라를 배포하고, 검증하고, 정리할 수 있습니다.
  • 주요 구성 요소로는 _test.go 파일, func TestXxx(t *testing.T), terraform.Options 구조체가 있습니다.
  • 작업 흐름은 옵션 정의, Terraform 적용, 검증 수행, defer를 사용한 정리 보장으로 이루어집니다.

다음으로 더 복잡한 검증을 작성하고 Terratest를 CI/CD 파이프라인에 통합하여 자동화된 테스트를 실행하는 방법을 살펴보세요.

자주 묻는 질문

“Terratest로 단위 테스트” 강의는 무료인가요?

네 — “Terratest로 단위 테스트” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 DevOps Bootcamp 강의 전체를 잠금 해제할 수 있습니다. DevOps Bootcamp 강의에는 총 4개의 강의가 포함되어 있습니다.

“Terratest로 단위 테스트”에서 뭘 배우나요?

인프라 코드 테스트를 위한 Go 라이브러리인 Terratest를 사용해 Terraform 모듈의 단위 테스트를 작성하는 방법을 학습합니다. 브라우저에서 직접 실행하는 실습 코드로 DevOps Bootcamp을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

DevOps Bootcamp을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 DevOps Bootcamp은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 2번째 강의입니다.

“Terratest로 단위 테스트” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 DevOps Bootcamp 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 DevOps Bootcamp 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. Terraform `validate`와 `fmt`
  2. Terratest로 단위 테스트
  3. 클라우드 리소스 통합 테스트
  4. 코드로서의 정책 및 규정 준수 검사
← DevOps Bootcamp(으)로 돌아가기