90DaysOfDevOps (Day 8)

고태규·2025년 9월 13일
0

DevOps

목록 보기
7/21
post-thumbnail

해당 스터디는 90DaysOfDevOps
https://github.com/MichaelCade/90DaysOfDevOps
를 기반으로 진행한 내용입니다.

Day 8 - Culinary Coding: Crafting Infrastructure Recipes with OpenTofu


1. OpenTofu란?


OpenTofu는 Terraform과 유사한 '오픈 소스 인프라형 코드 (laC) 도구'이다.
이전에는 OpenTF로 불렸으며, Terraform의 오픈 소스 Fork로 최근에는 Linux Foundation에 합류하였다.

OpenTofu의 주요 동기는 '기존 Terraform 생태계의 격차를 해소하고 개선하며 Terraform의 대안'이 되는 것이다.

Terraform을 개발한 하시코프 (HashiCorp)가 기존의 오픈소스 라이선스(MPL)를 BSL(Business Source License)로 변경하면서 더 이상 오픈소스가 아니게 되었고, 특정 비즈니스 사용 사례에서 Terraform 사용 여부를 판단하기 어려워 졌다.

이러한 문제를 해결하기 위해, Terraform이 라이선스를 변경하기 직전의 마지막 오픈소스 버전을 기반으로 여러 기업과 커뮤니티가 합쳐 완전한 오픈소스 대안인 OpenTofu를 만들었다.

앞서 말한 것처럼, OpenTofu는 Terraform의 Fork이므로, Terraform 1.5x 에서 1.6 버전까지의 모든 구성요소와 호환된다.

또한, 이미 Terraform을 사용하여 인프라를 구축한 경우, 기존의 Terraform 상태 파일, 변수 및 구성 요소를 OpenTofu와 함께 사용할 수 있어 전체를 다시 작성할 필요가 없다.


2. 그렇다면 Terraform이란?


테라폼 (Terraform)은 Infrastructure를 코드로 관리하고 프로비저닝하는 오픈 소스 도구이다.

HashiCorp에 의해 개발되었으며, 클라우드 서비스, VM, Storage 등 다양한 서비스에 대한 관리를 자동화하는 데 사용된다.

Terraform을 사용하여 인프라의 구성을 코드로 작성하고, 코드를 사용하여 인프라 생성, 변경 및 관리할 수 있다.


2-1. Terraform 워크플로우

해당 이미지는 Terraform의 인프라 관리 및 프로비저닝 프로세스를 나타내는 워크플로우 과정도이다.

  1. Terraform Core에서 시작하여 설정된 리소스 관리 명령을 Terraform Provider에 RPD (Remote Procedure Call) 방식으로 전송
  2. Terraform Provider는 Golang으로 작성된 Client Libraray를 통해 'TARGET API'에 HTTP(S) 프로토콜을 사용하여 실제 클라우드 리소스를 관리 (생성, 수정, 삭제) 함.

자세한 용어 설명은 다음과 같다.

  • Terraform Core
    • 테라폼의 핵심 컴포넌트로, 인프라 구성과 상태 관리를 담당
    • 사용자가 작성한 설정 파일을 분석하고 실행 계획을 수립
  • Terraform Provider
    • Terraform Core와 실제 클라우드 서비스 or 서비스 Provider 간의 중개자 역할
    • 각 Provider는 특정 기술이나 플랫폼 (AWS, Azure, GCP 등) 과의 상호작용을 가능하게 하며, 이러한 API 호출을 통해 인프라를 생성하거나 수정
  • Client Library
    • 특정 API와 상호작용을 단순화 하는 역할
    • Terraform Provider가 Client Library를 사용하여 구체적인 API 호출을 구성하고 실행
  • Target API
    • 최종적으로 Terraform이 인프라 구성을 위해 상호작용 하는 외부 서비스의 API
    • 해당 API를 통해 실제 리소스 생성, 수정, 삭제 등의 작업이 수행


2-2. Terraform 동작 방식

  1. Write :
    • Infra를 정의하는 설정 파일을 작성하는 단계
    • Terraform 프로젝트 내에서 설정 파일과 상태 파일이 있음
      • Terraform Configuration: 사용자가 인프라 구성을 정의하는 파일
      • Terraform State File: 테라폼이 인프라의 현재 상태를 추적하는 데 사용하는 파일
  2. Plan :
    • 작성된 설정에 따라 Terraform이 인프라에 어떤 변경을 할지 미리 보여주는 단계
    • 실제로 리소스 생성, 수정, 삭제 전에 계획을 검토하는 단계
    • 명령어 'terraform plan' 실행시, 계획된 작업들이 출력
  3. Apply :
    • 계획된 변경사항을 실제 인프라에 적용하는 단계
    • 설정파일에 기술된 대로 클라우드 서비스나 다른 인프라 서비스에 리소스를 생성, 수정 및 삭제 진행

Terraform은 해당 동작 방식을 가지고 있으며, 추가적으로 Apply 과정에 제시된 AWS, GCP, DataDog 이외에도 약 1000개 이상의 다양한 Provider들과 호환이 가능하다.

0개의 댓글