코드형 인프라(IaC)는 IT 인프라 프로비저닝을 자동화하는 기술적인 하이 레벨(high-level) 코딩 언어입니다. 이러한 자동화 덕분에 개발자는 소프트웨어 애플리케이션을 개발, 테스트 또는 배포하려고 할 때마다 서버, 운영 체제, 데이터베이스 연결, 스토리지 및 기타 인프라 요소를 수동으로 프로비저닝 및 관리할 필요가 없습니다.
매일 기업은 수백 개의 애플리케이션을 프로덕션 환경으로 배포하고, 개발자와 사용자의 요구사항에 따라 끊임없이 인프라를 가동, 해제, 확장/축소해야 하는 시대에 조직은 비용을 통제하고, 리스크를 줄이고, 새로운 비즈니스 기회와 경쟁 위협에 신속하게 대응하기 위해 반드시 인프라를 자동화해야 합니다. IaC는 이러한 자동화를 가능하게 합니다.
IaC는 또한 경쟁력 있는 속도로 진행되는 소프트웨어 제공 라이프사이클에 필수불가결한 DevOps 프랙티스이기도 합니다. IaC를 통해 DevOps 팀은 소스 코드를 버전화하는 것과 동일한 방식으로 빠르게 인프라를 생성 및 버전화하고, 배포 도중 심각한 문제를 일으킬 수 있는 IT 환경 간의 비일관성을 피하기 위해 이러한 버전을 추적할 수 있습니다.
Sai Vennam이 “코드형 인프라란?”이라는 아래 동영상에서 IaC에 대해 자세히 설명합니다.
기존 IT를 프로비저닝하는 것은 외부 인력에 의한 하드웨어의 물리적 설정, 운영 체제 소프트웨어의 설치 및 구성, 미들웨어, 네트워크, 스토리지 등에 대한 연결을 요구 하는 시간과 비용이 많이 소요되는 프로세스입니다.
가상화 및 클라우드 네이티브 개발은 물리적 하드웨어 관리 문제를 제거하므로 개발자는 자체 가상 서버 또는 컨테이너를 필요에 따라 프로비저닝할 수 있습니다. 그러나 가상화된 인프라를 프로비저닝해도 여전히 개발자는 코딩에 집중하기 어려우며, 새로운 배포를 수행할 때마다 프로비저닝 작업을 반복해야 합니다. 또한, 가상화된 인프라 프로비저닝은 환경의 변화를 추적하고 배포 환경에 영향을 주는 비일관성을 방지하는 쉬운 방법을 제공하지 않습니다.
코드형 인프라(IaC)는 개발자가 스크립트를 실행하여 완전 문서화되고 버전화된 인프라를 효과적으로 '완료'할 수 있는 마지막 단계를 수행합니다. 이 기술의 장점은 여러분이 상상한 것과 같습니다.
코드형 인프라(IaC)로 인프라를 자동화하고 IaC 솔루션을 선택할 때 내려야 할 중요한 결정 중 하나는 변경 가능 인프라 또는 변경 불가능 인프라 중 무엇을 구축할지 여부입니다.
변경 가능 인프라 는 처음 프로비저닝한 후 수정이나 업데이트가 가능한 인프라입니다. 변경 가능 인프라는 개발 팀에게 개발 요구 사항 또는 애플리케이션 요구 사항에 더 적합하게 또는 긴급 보안 문제에 대응하기 위해 임시 서버 맞춤화를 수행할 수 있는 유연성을 제공합니다. 그러나 이러한 인프라는 배포 환경 간의 또는 버전 내의 일관성을 유지하는 IaC의 주요 장점을 저해하고 인프라 버전 추적을 훨씬 더 어렵게 만들 수 있습니다.
이러한 이유로 대다수의 IaC는 처음 프로비저닝한 후 수정할 수 없는 인프라인 변경 불가능 인프라로 구현됩니다. 변경 불가능 인프라를 변경해야 하는 경우에는 새 인프라로 교체해야 합니다. 특히 IaC를 사용할 경우 클라우드에서 새 인프라를 간편하게 가동할 수 있으므로 변경 불가능 인프라는 보기보다 더 실현 가능성과 실용성이 뛰어납니다.
변경 불가능 인프라는 IaC를 다음 논리적 단계로 이동시켜 기본적으로 IaC를 강화하여 IaC가 제공하는 장점을 향상합니다. IaC는 구성 변경을 거의 제거하며, 테스트 및 배포 환경 간에 일관성 유지를 훨씬 더 용이하게 합니다. 또한 IaC를 사용하면 더 쉽게 인프라 버전을 유지하고 추적할 수 있으며 필요시 어느 버전으로든 신뢰할 수 있는 방식으로 롤백할 수 있습니다.
IaC 솔루션을 선택할 때는 인프라 자동화에 대한 선언적 접근법 과 명령적 접근법의 차이를 이해하는 것도 중요합니다.
대부분의 조직에서는 선언적 접근법(기능적 접근법으로도 부름)이 가장 적합합니다. 선언적 접근법에서는 프로비저닝하려는 인프라에서 원하는 최종 상태를 지정하면 IaC 소프트웨어가 가상 머신(VM)또는 컨테이너 가동, 필요한 소프트웨어 설치 및 구성, 시스템 및 소프트웨어 상호종속성 해결 및 버전화 관리와 같은 나머지 작업을 처리합니다. 선언적 접근법의 주된 단점은 일반적으로 설정 및 관리 작업을 수행하는 숙련된 관리자가 필요하다는 것입니다. 이러한 관리자는 선호하는 솔루션을 전문으로 다루는 경우가 많습니다.
명령적 접근법(절차적 접근법이라고도 부름)의 경우에는 솔루션이 한 번에 구체적인 한 단계씩 인프라를 프로비저닝하기 위한 자동화 스크립트를 준비하도록 돕습니다. 이 접근법을 취하면 확장에 따라 관리 노력이 더 많이 들지만, 기존 관리 직원이 이해하기 더 쉽고, 이미 사용 중인 구성 스크립트를 활용할 수 있습니다.
선언적 접근법 또는 명령적 접근법을 선택하는 것은 GPS를 사용하거나 턴바이턴(turn-by-turn) 지시를 따르는 것과 유사합니다. GPS의 경우 주소를 입력하면 GPS가 가장 빠른 경로를 제시하고 교통량이 많은 곳을 피하며 나머지를 알아서 합니다. 그러나, GPS가 특정 경로를 선택한 이유를 설명해주는 전문가가 필요할 수 있습니다. 턴바이턴 지시는 개인적 경험을 기반으로 합니다. 제공자는 경로를 알고 이러한 경로를 선택한 이유를 압니다. 그러나 장애물에 직면하거나 경로를 최적화하려면 사용자는 도움을 청하거나 직접 작업을 수행해야 합니다.
사용 가능한 오픈소스 IaC 툴은 많지만, 가장 흔히 채택되는 툴은 Ansible과 Terraform입니다.
Ansible (ibm.com 외부 링크)은 Red Hat이 후원하는 오픈소스 커뮤니티 프로젝트로, 조직들의 프로비저닝, 구성 관리, 애플리케이션 배포를 돕기 위해 설계되었습니다. 선언적 자동화 툴인 Ansible을 사용하면, 사용자는 인프라에서 원하는 상태를 지정하는 '플레이북'(YAML 구성 언어로 작성)을 만듭니다. 그러면 Ansible이 사용자 대신 프로비저닝을 수행합니다. Ansible은 Docker 컨테이너의 프로비저닝 및 Kubernetes 배포를 자동화하기 위해 널리 선택되는 툴입니다.
Terraform 은 엔지니어가 엔터프라이즈 클라우드 기반 인프라와 온프레미스 인프라의 모든 측면의 프로비저닝을 자동화하도록 지원하는 또 다른 선언적 프로비저닝 및 인프라 오케스트레이션 툴입니다.
Terraform은 모든 주요 클라우드 제공자와 함께 작동하며, 물리적 서버, DNS 서버 또는 데이터베이스의 위치에 상관없이 여러 제공자에 걸쳐 병렬로 리소스 구축을 자동화하도록 돕습니다. Terraform은 또한 작성된 언어에 상관없이 모든 애플리케이션을 프로비저닝할 수 있습니다.
Ansible과 다르게 Terraform은 구성 관리 기능을 제공하지 않습니다. 그러나 Ansible은 구성 관리 툴(예: Cloud Foundation)과 나란히 작동하여 자동으로 구성 파일에 기술된 상태로 인프라를 프로비저닝하고 필요한 경우 구성 변경 사항에 대해 업데이트 프로비저닝을 변경합니다.
IaC를 선택하는 방법을 자세히 알아보려면 “코드형 인프라: Chef, Ansible, Puppet 또는 Terraform 중 무엇을 선택할 것인가?”를 확인하세요.