[Terraform] IaC와 테라폼

2해승·2024년 6월 24일
0

데브옵스 엔지니어를 준비한다면 빠트릴 수 없는 개념이 코드형 인프라(IaC)이다. 대충 강의를 통해 사용법을 알게 되었다지만 왜 중요한 개념이 되었는지? 테라폼의 사용 목적이 무엇인지? 와 같은 기초적인 질문에 답하기 어려웠다.

본격적으로 테라폼의 환경 구성과 사용법을 정리하기 전에 한번 집고 넘어가면 좋을 개념들을 알아보자.

도서 테라폼으로 시작하는 IaC 와 인프런 강의 처음 시작하는 Infrastructure as Code: AWS & 테라폼 을 공부하며 작성된 포스팅입니다.

IaC(Infrastructure as Code)

IaC는 인프라가 코드로 표현되고 코드가 인프라를 설명한다는 의미로 UI나 CLI를 이용한 수동 조작이 아닌 코드로 대상을 관리한다.

인프라 자동화의 성숙도 변화

인프라 운영이 물리적인 온프레미스 환경부터 클라우드 환경에 이르기까지 지속적으로 변화하고 있는데, 구성 방식과 변경 내용을 공유하고 자동화하기 위한 노력을 다음과 같이 표현할 수 있다.

1단계: 매뉴얼

인프라와 관련한 모든 정보와 구성 방법, 변경 방법 등 모든 내용이 문서로 관리되었다. 지금도 엑셀이나 노션을 이용해서 인프라에 관한 정보와 배포 방식 등을 관리하는 곳이 많다.(일경험 회사에서도 그러했다.)

이러한 방식은 정보와 구성을 곧바로 확인할 수 있다는 장점이 있지만 사람이 아닌 인프라가 이해할 수는 없기 때문에 결국 사람이 실제 작업을 하기 위한 명령어와 구성 파일을 별도로 준비해야하는 번거로움이 있다.

2단계: 스크립트

반복되는 작업을 줄이고 사용하기 간단하고 편리하다는 장점이 있다. 지루한 작업을 줄이고 스크립트에서 작업자가 미리 정의한 동작을 한 번에 실행하여 오류를 줄여준다.

그러나 동작하는 코드의 양이 많아질수록 시스템의 응답이나 상태를 고려해야하며 최종 상태가 일치하지 않는 경우가 종종 발생한다.

3단계: 가상머신(VM)

미리 구성된 가상 머신의 이미지를 템플릿화하여 저장하고 반복적으로 사용할 수 있다. 필요한 패키지나 솔루션을 설치해두고 필요한 설정도 추가해 템플릿 이미지로 저장해놓는 것으로 공동 작접 능률이 올라갈 수 있다.

그러나 가상화 범위 외적인 요소는 자동화가 불가능하고 하이퍼바이저에 의존적이게 된다.

4단계: 클라우드 인프라

API를 통해 더 많은 인프라를 가상화하고 자동화 도구를 제공한다. 빠른 인프라 시작과 구성이 가능하고 확장성이 뛰어나다는 장점이 있으나 클라우드 제공자마다 서로 다른 API를 제공하므로 멀티 클라우드 자동화를 위해서는 개별적인 작업이 추가로 필요하다.

5단계: 컨테이너

최근 데브옵스 흐름에 맞춰 빠르게 성장하고 있으며 컨테이너 오케스트레이션 환경을 사용한다면 특정 컴퓨팅 서버가 아닌 애플리케이션 실행을 위한 적절한 리소스가 있는 서버에 배포되기 때문에 리소스 활용률을 높이고 이전보다 더 자동화할 수 있다.

그러나 컨테이너 관리와 배포를 위한 제어 시스템을 구축한 후 모니터링 관리가 더 커지는 자동화의 역설 현상이 있을 수 있다.


IaC의 이해

IaC는 인프라 자동화에 있어서 중요한 개념이다. 코드로 인프라를 관리한다는 것은 '자유롭게 변경'하고, '환경을 이해'하고, '반복적으로 동일한 상태를 만들 수 있다'는 뜻이다. 이에 대한 명세를 별도의 문서로 관리하지 않아도 인프라가 명확하게 정의되어 남게된다.

IaC 도입의 긍정적인 측면

  • 속도와 효율성: 사람이 수동으로 작업할 때보다 빠르고 불필요한 인프라 구성을 방지하여 생산성을 높임
  • 버전 관리: 코드 형태로 관리하기 때문에 버전 관리 툴과 연계할 수 있어 변경 내용을 추적하고 이전 코드로 되돌리거나 비교할 수 있음
  • 재사용성: 코드의 주요 반복 또는 표준화된 구성을 패키징하면 매번 새로 코드를 구성하지 않고 기존 모듈을 활용해 배포할 수 있음

IaC 도입의 우려되는 측면

  • 코드 문법 학습: 새로운 도구를 위한 학습이 필요함
  • 파이프라인 통합: 기존 워크플로에 자동화를 위한 수고가 추가로 필요함
  • 대상 인프라에 대한 이해 필요: IaC 자체 지식과 더불어 관리 대상이 되는 인프라의 지식이 함께 필요함

테라폼의 특성

테라폼은 하시코프사에서 공개한 IaC 도구다. 작업 환경을 쉽게 반복적으로 구성할 수 있는 베이그런트를 시작으로 2014년 테라폼이 처음 출시되었고 2021년 1.0 버전의 테라폼이 출시되었다.

테라폼은 세 가지 중요한 철학을 담아 설계되었다.

워크플로에 집중

개발자나 시스템 관리자 등이 일하는 방식과 유사한 '워크플로'를 만들기 위한 도구로 테라폼은 어떤 기술이 사용되더라도 워크플로를 통해 환경의 변화에 크게 구애받지 않도록 설계되었다.

코드형 인프라(IaC)

구현되거나 구성되는 모든 것이 코드로 표현되어야 한다는 의미이다.

실용주의

현실적인 해결책을 찾기 위해 새로운 아이디어와 접근 방식, 기술을 다시 평가하고 타협이 아닌 이전의 것이 틀릴 수 있다는 사실을 받아들이는 적응 능력이 중요하다.

테라폼 코어와 프로바이더 호출 관계

  • 테라폼 자체만으로는 다양한 인프라와 서비스를 프로비저닝하는 것은 불가능하기 때문에 프로바이더가 둘 사이에서 인터페이싱해야 함
  • 각 인프라와 서비스는 고유의 API를 가지고 있고 프로바이더는 각 API 명세를 테라폼 코드로 호출해 동작

테라폼 사용 목적과 과제

워크플로

인프라와 서비스 구성 및 변경 작업인 프로비저닝을 위해 체계화된 워크플로를 제공한다.

자산화

테라폼을 통해 프로비저닝 작업에 일관성을 보장하고 축적된 프로비저닝 노하우를 자산화 할 수 있다. 코드 형태로 되어 있으므로 손쉬운 공유와 재사용이 가능하다.

표준화

작성된 테라폼 코드는 조직 내부의 표준화를 거쳐 모듈화된 상태로, 숙련자가 아니더라도 이미 작성된 코드 집합을 사용해 쉽게 재사용이 가능하다.

프로비저닝 자동화

테라폼은 기존 인프라의 변경와 업데이트를 코드 워크플로 도구(깃, CI/CD 등)와 통합할 수 있다. 작업 수행 전에 실행 계획을 작성하여 변경 사항을 미리 확인하므로 안전하고 빠를 프로비저닝을 수행한다.


[테라폼으로 시작하는 IaC]을 통해 테라폼이 출연한 배경과 사용 목적에 대해 알아보았다. 다음 게시글부터는 기본적인 실습을 통해 동작원리와 간단한 인프라를 설계해보도록 하자.

profile
Node 백엔드 개발자 / 데브옵스 취준생

0개의 댓글

관련 채용 정보