티스토리 뷰
인프라가 복잡하고 특히 development, staging, production 환경을 분리해서 사용하는 회사라면 IaC 도입이 필수입니다. 테라폼은 hashicorp에서 개발된 인프라 스트럭처를 효율적으로 구축, 변경, 관리하기 위한 도구(IaC)입니다. <tmi>hashicorp은 한국에서 하시코프로 많이 통용됩니다. 앞에 hash를 보고 해시콥 이라고 읽어도 적당히 대화는 되지요</tmi>도입 이후 기대되는 내용은 다음과 같습니다.
# pros
- 인프라 변화 과정, 히스토리를 사용 중인 버전 관리 시스템(VCS)을 통해 형상관리할 수 있게 됩니다
- 인프라를 코드로 관리하면 애플리케이션을 형상관리 했을 때와 완벽하게 동일한 이점을 갖게 됩니다
- 누가, 언제, 왜 인프라를 변경 했는지 확인할 수 있고,
- 애플리케이션 코드를 리뷰하듯이 인프라를 코드로 리뷰 할 수 있게 됩니다
- development 환경을 만들고 이후 staging이나 production을 만들 때 다시 한 땀 한 땀 클릭할 필요가 없습니다
- 한 개의 환경이 만들어졌으면 그대로 다른 환경을 찍어낼 수 있습니다
- 굳이 비유하자면 docker container로 말아놓은 프로그램을 여러 서버에 배포하는 것과 같습니다. Dockerfile을 통해 얻는 이점은 더 말할 필요도 없죠
- 테라폼은 이보다 훨씬 더 복잡하게 얽혀있는 인프라를 찍어낼 수 있습니다
- 인프라 구축 시에 발생할 수 있는 실수를 미연에 방지합니다
- 누구나 인프라를 쉽게 컨트롤 할 수 있게 됩니다
- 도입하는 환경을 더 깊이 있게 이해할 수 있게 됩니다.
- 클라우드 환경을 IaC로 작성하다보면 클라우드 콘솔이라면 깊이 파고들지 않았을 설정까지 확인하게 되니까요.
- 일반적이지 않지만 인프라 엔지니어의 검토가 수월해집니다.
- 인프라 관리팀이 있는 조직이라면 보통 개발팀은 원하는 인프라를 설계해서 요청하고 리소스를 할당받습니다
- 조금 더 영세한 스타트업이라면 개발자가 직접 해야 하겠죠
물론 장점만 있는 것은 아닙니다.
# cons
- 허들이 존재합니다
- Terraform을 위한 문법(HCL)을 익혀야 합니다
- don't worry. 고작 JSON 수준입니다
- 정말이에요. 심지어 HCL이 아니라 JSON으로 작성하는 것도 가능합니다
- 모든 사람이 테라폼 마스터가 될 수는 없습니다. 누군가는 전사적인 지원(publisher)을 해야 합니다
- 하지만 초벌이 만들어져 있다면 개발자(consumer) 누구나 쉽게 허들을 넘을 수 있겠죠
- 인프라 개념을 모르면 접근하기 힘듭니다
- 사실 이건 클라우드 콘솔을 사용해도 마찬가지 기는 합니다
단점이 있음에도 불구하고 IaC가 주는 장점은 엄청납니다. 인프라 스트럭처를 코드로 관리하는 툴로는 테라폼 이외에도 Ansible, Cloudformation, SAM 등 다른 도구도 존재하지만, 다양한 퍼블릭 클라우드를 지원하는 테라폼은 개발자(혹은 인프라 운영자)에게 기술적으로 더 매력적인 요소(경쟁력)를 갖게 해 줄 겁니다. 나아가 DevOps 역량도 갖추게 되죠. IaC의 종류에 대해 부연 설명하자면 아래와 같이 네 종류가 있습니다. ( 링크 )
- 애드 훅 스크립트
- 부연설명이 필요 없습니다. Bash 등의 스크립트 언어로 서버의 환경을 세팅하는 걸 의미합니다.
- 구성 관리 도구
- 셰프(Chef), 퍼핏(Puppet), 앤서블(Ansible), 솔트스택(Saltstack)이 있습니다.
- 코딩 규칙이 필요하고 멱등성(같은 코드라면 수행 횟수에 상관없이 결괏값은 항상 같다)이 보장됩니다.
- 분산 환경을 관리할 수 있도록 설계되어 있습니다.
- 서버 템플릿 도구
- 도커(Docker), 패커(Packer), 베이그란트(Vagrant)가 있습니다.
- 소프트웨어 실행에 필요한 설정과 의존성 있는 프로그램을 포함해서 특정 시점에 운영 체제와 함께 스냅샷하여 템플릿 이미지화하는 것을 나타냅니다. 도커를 생각하면 쉽게 이해됩니다.
- 서버 프로비전 도구
- 테라폼(Terraform), 클라우드포메이션(CloudFormation), 오픈스택 히트(Openstack Heat)가 있습니다.
- 구성 관리 도구와는 경계가 살짝 모호해지고 있지만 주요 특징으로는 절차적 언어인가 선언형 언어인가를 들 수 있습니다. 선언형 언어로 다뤄지는 테라폼의 경우 인프라에 변경사항이 생겼을 때 변경된 부분만 반영된다는 주요 특징이 있습니다. 예를 들어 인스턴스 5대로 운영 중이던 환경에 10대를 추가하려면 count = 5 부분을 count = 15로 변경하면 테라폼 내부에서 내용을 해석하고 10대만 증설합니다.
자, 다음 글에서 본격적으로 설치부터 배포, 운영까지 살펴보도록 하겠습니다.
'개발 > IaC' 카테고리의 다른 글
[Terraform] Error asking for state migration action: input is disabled (0) | 2023.11.13 |
---|---|
[Terraform] Lambda 최초 배포 시 컨테이너 이미지 처리 (0) | 2023.11.13 |
[Terraform] configmaps "aws-auth" already exists (0) | 2023.11.02 |
[Terraform] providers, resource, variables, output, data (0) | 2021.02.20 |
[Terraform] concept (0) | 2021.02.20 |
댓글
최근에 올라온 글
최근에 달린 댓글
글 보관함
- Total
- Today
- Yesterday