본문 바로가기
INFRA/Operation

테라폼(Terraform)이란? - 개념, 장점, 관리툴

by BTC_Dana 2022. 4. 6.


※ 목차

IAC

  1. 가상화 기술의 발전
  2. Iac 란
  3. Iac 종류

Terraform

  1. Terraform 개념
  2. Terraform 장점
  3. Terraform 구성
  4. 사용관리 툴

들어가기전에..

IT산업에 종사하면서 도구의 사용법을 익히는 것도 중요하지만,
그 뒷 배경 또한 중요합니다.

오늘은 IAC의 배경부터 관련 도구는 무엇이 있으며,
어떻게 동작하는 지에 대해 알아보는 시간을 가지겠습니다.

▶ Iac

1. 가상화 기술의 발전
  • VM ware, Hyper-v와 같은 기술을 통해서 여러대의 서버를 더 많이 쉽게 만들 수 있게 되었습니다. 하지만 기하급수적으로 늘어나는 서버들에 대한 프로비저닝과 운영에 대한 이슈가 발생하였습니다. 인력을 무한정으로 늘릴 수 없었기 때문에 서버 구축과 운영에 대한 자동화가 필요했습니다. 이러한 배경에서 프로그래밍 코드로 인프라를 구축/운영할 수 있는 IAC 가 생겨나게 되었습니다.
2. Iac란?
  • IaC(Infrastructure as Code)는 코드로 인프라스트럭처를 관리한다는 개념으로 테라폼에서는 하시코프 설정 언어 HCL(Hashicorp Configuration Language)을 사용해 클라우드 리소스를 선언합니다.
    • 쉽게 말해, 인프라를 사람이 읽을 수 있는 코드 로 만들 수 있습니다. 이를 통해 버전 관리, 공유 및 재사용이 가능합니다.
3. Iac 종류
  • Iac는 영역별로 크게 두 종류로 나눌 수 있습니다.
Iac 종류 설명 종류
Provisioning Tool
(프로비저닝 도구)
♠ 일반적으로 운영팀의 담당자가 컴퓨터나 가상 호스트를 사용해 개발팀에서 필요한 라이브러리나 서비스를 설치 하는 것을 의미합니다. 프로비저닝 영역에서는 개발팀이 사용한 코드 버전과 동일한 버전을 사용해 네트워크, VM, DB 등을 구성합니다. ◆ Terraform
◆ Cloudformation
SCM Tool
(구성 관리 도구)
♠ 구성관리는 성능부터 H/W 속성과 라이프사이클 전반에 걸친 요구사항, 설계 및 운영 정보 의 일관성 등을 설정하고 유지하기 위한   시스템 프로세스 입니다. 프로비저닝이 인프라에 대한 배포 위주에 진행된다면, 구성관리는  애플리케이션의 구성 설정을 관리 하는 영역입니다. ◆ Chef
◆ Puppet
◆ Ansible

참조문서 : https://medium.com/cloudnativeinfra/when-to-use-which-infrastructure-as-code-tool-665af289fbde

▶ Terraform

1. Terraform 개념
  • 테라폼(Terraform)은 하시코프(Hashicorp)에서 오픈소스로 개발중인 클라우드 인프라스트럭처 자동화 를 지향하는 코드로서의 인프라스트럭처(IaC)도구입니다.
    • 쉽게 말해, 코드를 통해 인프라 서버를 구축/운영 할 수 있게 해주는 오픈 소스 소프트웨어입니다.
공식문서 : https://www.terraform.io/docs
2. Terraform 장점

 

장점 설명
자동화 ♠ 수동으로 서버를 생성하는 게 아닌  코드로 생성하기 때문에  서버 운영 및 관리가 모두 자동화  될 수 있습니다.
♠ 예를 들어, AWS에서 새로운 서버를 생성 하기 위해서 AWS 콘솔에 로그인할 필요없이 Terraform 코드를 실행시키기기만 하면 됩니다.
속도
&
안전
♠ 코드로 실행 되기 때문에 사람이 수동으로 작업하는 것 보다  훨씬 빠르며  또한 사람이 직접 할 때 생길 수 있는  실수들을 방지할 수 있습니다.
문서화 ♠ 모든 인프라가 코드로 기록 및 관리 되기 때문에  자동으로 문서화가 됩니다. 가장 큰 장점 중에 하나로, 많은 회사에서 인프라를 직접 구현하고 관리한 담당자를 제외하고는 전체 서버를 전부 파악하고 있는 사람이 없는 경우가 많습니다. 하지만 Terraform의 경우에는  새로 들어온 개발자라도 Terraform code를 보면 전체적인 구성을 이해 할 수 있습니다.
형상관리 git 을 통해 형상관리가 가능하며,  인프라의 변경 기록을 쉽게 볼 수 있습니다.
리뷰

테스트
♠ 수동으로 서버 작업을 할 때는, 실제로 실행하기 전에 리뷰 하는 것이 굉장히 힘들수 밖에 없었습니다. 그래서 문제가 발견 되었을 때는 이미 프로덕션 애플리케이션에 영향을 주고 난 후인 경우가 많았는데, Terraform의 경우  코드 리뷰와 테스트를 통해  문제가 실제로 발생 되는 것을 어느 정도  예방할 수 있습니다.

 

3. Terraform 테라폼 구성
구성은 간단하게 알아보고 자세한 내용은 다음 글에 올려드리겠습니다.

<Terraform 진행순서>

<기본 구성 개념>

구성 설명
프로비저닝
(Provisioning)
♠ 어떤 프로세스나 서비스슬 실행하기 위한 준비 단계
♠ 크게 네트워크나 컴퓨팅 자원을 준비하는 작업
프로바이더
(Provider)
♠ 테라폼과 외부 서비스를 연결해주는 기능
♠ 프로바이더로는 AWS, GCP, Azure와 같은 범용 클라우드 서비스를 비롯해 Github, Datadog와 같은 특정 기능을 제공하는 서비스
리소스 ♠ 프로바이더가 제공해주는 조작 가능한 대상의 최소 단위
♠ 예를 들어 AWS 프로바이더는 aws_instance 리소스 타입을 제공하고, 이 리소스 타입을 사용해 Amazon EC2의 가상 머신 리소스를 선언하고 조작하는 것이 가능
계획
(Plan)
♠ 테라폼 프로젝트 디렉터리 아래의 모든 .tf 파일의 내용을 실제로 적용 가능한지 확인하는 작업
terraform plan
적용
(apply)
♠ 테라폼 프로젝트 디렉터리 아래의 모든 .tf파일의 내용대로 리소스를 생성, 수정, 삭제하는 일을 적용
♠ terraform apply
공식문서 : https://docs.microsoft.com/ko-kr/azure/governance/policy/assign-policy-terraform
4. 사용 관리 툴 
도구 설명
CDKFT ♠ Cloud Development Kit for Terraform
♠ 프로그래밍 언어를 사용하여 클라우드 애플리케이션 리소스를 모델링 및 프로비저닝할 수 있는 오픈 소스 소프트웨어 개발 프레임워크
VSCode ♠ Visual Studio Code Extension
♠ Terraform 언어 서버를 사용하여 VS Code에서 편집
Language Server ♠ Sublime Text, vim 등과 같이 Language Server Protocol를 사용하는 편집기에서 편집
Console ♠ 복잡한 상태 데이터 및 Terraform 표현식으로 작업할 때 인프라를 개발하고 디버그
공식문서 : https://www.terraform.io/docs/terraform-tools 

이상으로 Terraform의 개념에 대해서 알아봤습니다.
다음 주제는 Ansible의 개념에 대해서 살펴볼 예정이니 뜨거운 관심 바랍니다:)
Animated Rainbow Nyan Cat

댓글