본문 바로가기
데브옵스/DevOps

Terraform, 코드로 관리하는 인프라의 시작!

by 룰루르루 2025. 3. 17.
안녕하세요~ IT의 아는 것을 넓혀가는 룰루르루입니다!
오늘은 인프라를 코드로 쉽게 관리할 수 있도록 도와주는 Terraform(테라폼)에 대해서 정리했습니다.
잘못된 정보나 보완할 점이 있다면 댓글로 남겨주세요! 성심성의껏 개선하겠습니다 :)

예전에는 인프라 관리가 어땠나요?

 

IaC, 코드로 인프라 관리하기

안녕하세요~ IT의 아는 것을 넓혀가는 룰루르루입니다!오늘은 "IT 인프라를 코드로 정의하는 방식, IaC"에 대해 정리해보았습니다.과거 방식과 비교하면서, IaC가 왜 중요한지 하나씩 알아보겠습니

wooks-space.me

 

앞서 IaC를 소개하는 포스팅을 인용하자면,

과거에는 서버나 네트워크, 스토리지와 같은 인프라를 구축하고 관리하기 위해 수동으로 작업하는 경우가 많았습니다. 예를 들어 가상머신을 생성하고 네트워크 설정을 변경할 때마다 관리자는 직접 콘솔에서 클릭하며 설정하거나 스크립트를 이용해 복잡한 작업을 반복했어요. 이 과정에서 설정 실수나 불필요한 반복 작업이 자주 발생했고, 시간이 지날수록 어떤 설정이 어떻게 변경됐는지 추적하는 것도 쉽지 않았습니다.

이러한 문제점을 해결하기 위해 등장한 기술이 바로 "IaC(Infrastructure as Code)", 즉 코드로 관리하는 인프라입니다. 

그리고 IaC를 소개하며 대표적인 도구로 Terraform이 있다 정도로만 정리했었습니다.


Terraform은 정확히 어떤 도구인가요?

Terraform은 HashiCorp가 개발한 코드형 인프라(IaC) 도구로, 클라우드와 온프레미스 환경에 인프라를 구축, 변경 및 버전 관리할 수 있도록 도와줍니다. 테라폼의 특징을 조금 더 구체적으로 살펴보면 다음과 같습니다.

1. 멀티 플랫폼 지원

AWS, Azure, GCP 같은 다양한 클라우드 서비스뿐만 아니라 VMware나 Kubernetes와 같은 온프레미스 환경까지 모두 지원합니다. 즉, 하나의 도구로 다양한 인프라를 통합적으구축, 변경 및 버전을 관리할 수 있어 효율성이 뛰어납니다.

2. 간결하고 이해하기 쉬운 구성 언어, HCL

테라폼은 HCL(HashiCorp Configuration Language)이라는 직관적인 구성 언어를 사용합니다.

따라서 운영자도 복잡한 코딩 기술이 없어도 코드로 인프라를 쉽게 관리할 수 있으며,

개발자 또한 코드 자체가 명확해 어떤 인프라가 구성되는지 이해하기 편리합니다.

3. 선언형(Declarative) 방식

테라폼은 인프라의 '최종 상태'를 정의하는 선언형 방식을 채택하고 있어요.
예를 들어 "서버가 3개가 되어야 한다"는 최종 상태를 정의하면, 테라폼이 알아서 서버를 3개로 맞춰줍니다.

이를 통해 사람이 직접 인프라의 상태를 하나씩 수정하는 실수를 방지할 수 있습니다.


테라폼을 쓰면 어떤 장점이 있나요?

테라폼을 이용하면 다양한 장점이 있지만, 대표적으로 다음 세 가지를 꼽을 수 있습니다.

① 불변 인프라 (Immutable Infrastructure)

테라폼은 인프라 변경 시 기존 리소스를 수정하지 않고 새로 프로비저닝을 하는 방식(불변 인프라)을 사용합니다.

그래서 서버 설정이 "남아있어 변형되는" 상황을 최소화하고, 안정성을 높입니다.

② 코드로 버전 관리

인프라를 코드로 정의하니까 소스 코드 관리 도구(Git 등)를 통해 쉽게 변경 이력을 추적할 수 있고, 언제든지 원하는 상태로 복구할 수도 있습니다.

③ 자동화된 프로비저닝

테라폼은 의존 관계가 있는 리소스를 자동으로 분석해 적절한 순서로 프로비저닝합니다. 그래서 사람이 직접 리소스 사이의 복잡한 관계를 계산할 필요가 없습니다.

테라폼의 라이선스 변화 (23.08.10. MPL v2.0 → BSL v1.1)

과거에는 Terraform을 사용하는 이유로 오픈소스라는 점을 꼽았습니다.
오픈소스의 특성 상 커뮤니티가 구성되기 쉬웠고, 테라폼 또한 대규모의 커뮤니티가 구성되어 있어 플러그인이나 기술 지원을 쉽게 찾을 수 있었습니다.
하지만 소스코드의 수정, 배포가 자유롭고 상업적 이용이 가능한 MPL 라이선스에서 특정 조건 하에 수정, 배포 및 상업적 사용을 허용하는 BSL 라이선스로 변경되며 커뮤니티가 이전보다는 축소되었다고 합니다.
라이선스 변화 이후에도 개인이나 조직 내에서는 여전히 자유롭게 사용 가능하지만,  장기적인 관점에서 OpenTofu와 같은 대체 오픈소스 프로젝트가 주목받고 있기도 합니다.

 


테라폼의 주요 개념과 동작 방식

테라폼은 기본적으로 다음과 같은 세 가지 단계로 동작합니다.

📌 Write (코드 정의)

  • 프로바이더(Provider): 관리할 리소스가 존재하는 플랫폼을 정의
  • 리소스(Resource): 프로비저닝할 실제 서비스와 자원을 정의
  • 변수(Variables) 및 지역 변수(Locals): 설정값과 민감 정보를 관리
  • 출력(Outputs): 실행 결과나 특정 값을 추출해 다른 프로젝트에서 참조할 때 사용
Variables는 실행 중 값 변경이 가능하고 외부 모듈에서 참조할 수 있습니다.
그래서 반복되는 코드를 간소화하고 외부로부터 값을 입력받는 형태로 많이 사용합니다.
Locals는 실행 중 값 변경이 불가능하고, 현재 모듈 내에서만 사용 가능합니다.
그래서 모듈 내의 특정 값들을 빠르게 식별할 수 있도록 코드 가독성 개선 목적으로 사용합니다

📌 Plan (실행 계획, 테스트)

  • .tfstate 상태 파일로 현재 인프라 상태를 추적하고 관리합니다.
  • 현재 상태 파일과 사용자가 정의한 코드를 비교하여 어떤 변경이 필요한지 파악하고, 
    생성, 업데이트, 제거될 인프라의 변경점을 설명하는 계획을 보여줍니다.

📌 Apply (프로비저닝, 적용)

  • 현재 정의된 코드대로 실제 인프라에 변경 사항을 적용합니다.
  • 종속된 리소스는 순서대로, 독립된 리소스는 병렬로 프로비저닝합니다.
    예를 들어 VPC 업데이트+ VM 확장이 예정되어 있다면, 종속성을 고려해 VPC를 다시 생성 후 VM을 확장합니다.

테라폼 코드 구성요소

Terraform Provider

  • 모든 테라폼 코드는 1개 이상의 Provider를 포함하고 있습니다.
  • Provider는 대상 플랫폼의 API를 이용해 인프라를 구현할 수 있게 해주는 플러그인으로 사용자 대신 CSP의 서비스를 인증, 사용하는 데 필요한 모든 코드가 포함되어 있습니다.
  • 사용자는 Provider를 이용해 클라우드 플랫폼 및 기타 서비스에서 리소스를 생성하고 관리합니다
  • 사용 가능한 Provider는 여기서 확인

Terraform Module

  • 테라폼은 .tf 확장자로 만들어진 코드 모듈을 실행하는 방식입니다.
  • 모듈은 하위 모듈(Sub module)을 호출할 수 있기 때문에 객체를 정의하듯 코드를 더 간결하게 구성할 수 있습니다.
  • 즉, 하나의 코드에 모든 리소스를 정의할 수 있지만, 재사용을 위해 소규모의 모듈로 분리해 구성할 수도 있습니다.
규모가 작다면 하나의 파일에 담아도 되지만, 규모가 크다면 특정 리소스와 데이터 소스를 쉽게 찾을 수 있도록 일반적으로 다음과 같은 파일 이름을 사용합니다.

main.tf: 모든 리소스 및 데이터 소스 블록을 포함하는 파일, 또는 하위 모듈을 포함하는 파일
backend.tf: 테라폼 상태 파일을 원격 스토리지에 저장할 경우 사용하는 파일로 독립적인 파일
terraform.tf: 테라폼의 버전과 프로바이더의 버전을 정의하는 파일
provider.tf: provider 블록과 구성을 포함하는 파일
variables.tf | locals.tf | network.tf | storage.tf | compute.tf 등 리소스를 구성하기 위한 파일

Terraform State

  • 테라폼은 실제 인프라의 구성과 코드를 매핑하기 위해 최초 Terraform init 시 State 파일을 생성하고 필수적으로 요구합니다.
  • 로컬 환경의 경우 terraform.tfstate라는 파일로 저장하지만, 버전 관리 및 팀과의 공유를 위해 원격 스토리지에 저장하거나, HCP Platform에 저장하는 경우가 일반적입니다.
  • State 파일에는 매핑된 인프라 정보 뿐만 아니라 Outputs로 정의된 데이터도 보관하고 있어 다른 모듈에서 호출할 수 있게 제공해줍니다.

오늘은 이렇게 테라폼에 대해 정리해 보았습니다.

테라폼을 활용하면 인프라 관리가 훨씬 쉽고 효율적으로 바뀔 수 있어 많은 기업들이 도입하고 있습니다.

많이 활용하는 만큼 시스템 운영 업무나 DevOps 취업 시 기업에서 활용 경험을 요구하고 있는 것을 볼 수 있습니다.

 

다음 포스팅에서는 테라폼을 활용해 AWS나 가상화 환경에 인프라를 프로비저닝하는 방법 등 실제 코드 구성에 대해 좀 더 자세히 다뤄보겠습니다!

감사합니다~🙌


 

 

What is Terraform | Terraform | HashiCorp Developer

Terraform is an infrastructure as code tool that lets you build, change, and version cloud and on-prem resources safely and efficiently.

developer.hashicorp.com

 

Terraform이란 무엇인가요? | IBM

Terraform은 프로그래머가 인프라를 안전하고 효율적으로 구축, 변경 및 버전 지정할 수 있는 도구입니다.

www.ibm.com

 

State | Terraform | HashiCorp Developer

An introduction to state, information that Terraform uses to map resources to a configuration, track metadata, and improve performance.

developer.hashicorp.com

 

OPEN SOURCE 라이선스 별 특징 정리 - DSMENTORING

Licesnse Division Description GNU GPL v2.0/v3.0 필수 요구사항 ▶수정한 소스코드 또는 GPL 소스코드를 활용한 소프트웨어 모두 GPL로 공개

ldap.or.kr

 

Business Source License 1.1

모든 애플리케이션을 위한 인프라 프로비저닝, 보호, 연결 및 실행하는 일관된 워크플로우

www.hashicorp.com

'

댓글