코드형 인프라(IaC)란?
코드형 인프라(IaC)는 인프라의 프로비저닝을 자동화하므로 조직은 더 빨리 더 낮은 비용과 리스크를 수반하면서 애플리케이션을 개발, 배포, 확장할 수 있습니다.
DevOps
터널을 빠른 속도로 지나는 빛의 흔적
코드형 인프라(IaC)란?

코드형 인프라(IaC)는 IT 인프라 프로비저닝을 자동화하는 기술적인 하이 레벨(high-level) 코딩 언어입니다. 이러한 자동화 덕분에 개발자는 소프트웨어 애플리케이션을 개발, 테스트 또는 배포하려고 할 때마다 서버, 운영 체제, 데이터베이스 연결, 스토리지 및 기타 인프라 요소를 수동으로 프로비저닝 및 관리할 필요가 없습니다.

매일 기업은 수백 개의 애플리케이션을 프로덕션 환경으로 배포하고, 개발자와 사용자의 요구사항에 따라 끊임없이 인프라를 가동, 해제, 확장/축소해야 하는 시대에 조직은 비용을 통제하고, 리스크를 줄이고, 새로운 비즈니스 기회와 경쟁 위협에 신속하게 대응하기 위해 반드시 인프라를 자동화해야 합니다. IaC는 이러한 자동화를 가능하게 합니다.

IaC는 또한 경쟁력 있는 속도로 진행되는 소프트웨어 제공 라이프사이클에 필수불가결한  DevOps 프랙티스이기도 합니다. IaC를 통해 DevOps 팀은 소스 코드를 버전화하는 것과 동일한 방식으로 빠르게 인프라를 생성 및 버전화하고, 배포 도중 심각한 문제를 일으킬 수 있는 IT 환경 간의 비일관성을 피하기 위해 이러한 버전을 추적할 수 있습니다.

Sai Vennam이 “코드형 인프라란?”이라는 아래 동영상에서 IaC에 대해 자세히 설명합니다.

코드형 인프라의 장점

기존 IT를 프로비저닝하는 것은 외부 인력에 의한 하드웨어의 물리적 설정, 운영 체제 소프트웨어의 설치 및 구성, 미들웨어네트워크스토리지 등에 대한 연결을 요구 하는 시간과 비용이 많이 소요되는 프로세스입니다.

가상화 및 클라우드 네이티브 개발은  물리적 하드웨어 관리 문제를 제거하므로 개발자는 자체 가상 서버 또는 컨테이너를 필요에 따라 프로비저닝할 수 있습니다. 그러나 가상화된 인프라를 프로비저닝해도 여전히 개발자는 코딩에 집중하기 어려우며, 새로운 배포를 수행할 때마다 프로비저닝 작업을 반복해야 합니다. 또한, 가상화된 인프라 프로비저닝은 환경의 변화를 추적하고 배포 환경에 영향을 주는 비일관성을 방지하는 쉬운 방법을 제공하지 않습니다.

코드형 인프라(IaC)는 개발자가 스크립트를 실행하여 완전 문서화되고 버전화된 인프라를 효과적으로 '완료'할 수 있는 마지막 단계를 수행합니다. 이 기술의 장점은 여러분이 상상한 것과 같습니다.

  • 프로덕션 환경/시장 진입 속도 향상: IaC 자동화는 개발, 테스트, 프로덕션(및 필요에 따른 프로덕션 인프라 확장 또는 축소)을 위한 인프라 프로비저닝 프로세스의 속도를 대폭 향상합니다. IaC는 모든 것을 코딩하고 문서화하기 때문에 레거시 인프라의 프로비저닝도 자동화할 수 있습니다. IaC를 사용하지 않을 경우 이러한 레거시 인프라는 시간이 많이 소요되는 프로세스(예: 티켓 발행)를 거쳐야 할 수 있습니다.

  • 일관성 향상—구성 변경 감소’: 구성 변경은 임시적 구성 변경과 업데이트로 인해 개발, 테스트, 배포 환경의 불일치가 발생하면 나타납니다. 이로 인해 엄격한 규제를 준수해야 하는 애플리케이션과 서비스를 개발할 때 배포 문제, 보안 취약성, 리스크가 발생할 수 있습니다. IaC는 매번 같은 환경을 프로비저닝하여 변경을 방지합니다.

  • 개발 속도 및 효율성 향상: IaC는 프로비저닝을 간소화하고 인프라 일관성을 유지하여 신뢰할 수 있는 방식으로 소프트웨어 제공 라이프사이클의 모든 단계를 가속화합니다. 개발자는 간편하게 샌드박스와 지속적 통합/지속적 배포(CI/CD) 환경을 프로비저닝할 수 있습니다. QA 팀은 간편하게 완전 충실도(full-fidelity) 테스트 환경을 프로비저닝할 수 있습니다. 운영 팀은 보안 및 사용자 수용성 테스트를 위해 인프라를 프로비저닝할 수 있습니다. 코드가 테스트를 통과하면 애플리케이션과 이 애플리케이션이 실행되는 프로덕션 인프라를 한 단계로 배포할 수 있습니다.

  • 담당자 변경 시 보호: IaC를 활용하지 않는 조직에서 효율성을 높이기 위해 일반적으로 몇몇 숙련된 엔지니어 또는 IT 직원에게 프로비저닝이 위임됩니다. 이러한 전문가 중 한 명이 조직을 떠나면 다른 전문가들은 때때로 프로세스를 재구성합니다. IaC는 프로비저닝 인텔리전스가 항상 조직 내에 남아 있도록 합니다.

  • 비용 절감 및 ROI 향상: IaC는 인프라 프로비저닝 및 확장에 필요한 시간, 노력, 전문 기술을 대폭 줄일 뿐만 아니라 조직이  클라우드 컴퓨팅의 사용량 기반 비용 구조를 최대한 활용하도록 지원합니다. 또한 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이란?

Ansible (ibm.com 외부 링크)은 Red Hat이 후원하는 오픈소스 커뮤니티 프로젝트로, 조직들의 프로비저닝, 구성 관리, 애플리케이션 배포를 돕기 위해 설계되었습니다. 선언적 자동화 툴인 Ansible을 사용하면, 사용자는 인프라에서 원하는 상태를 지정하는 '플레이북'(YAML 구성 언어로 작성)을 만듭니다. 그러면 Ansible이 사용자 대신 프로비저닝을 수행합니다. Ansible은 Docker 컨테이너의 프로비저닝 및 Kubernetes 배포를 자동화하기 위해 널리 선택되는 툴입니다.

Terraform이란?

Terraform 은 엔지니어가 엔터프라이즈 클라우드 기반 인프라와 온프레미스 인프라의 모든 측면의 프로비저닝을 자동화하도록 지원하는 또 다른 선언적 프로비저닝 및 인프라 오케스트레이션 툴입니다.

Terraform은 모든 주요 클라우드 제공자와 함께 작동하며, 물리적 서버,  DNS 서버 또는 데이터베이스의 위치에 상관없이 여러 제공자에 걸쳐 병렬로 리소스 구축을 자동화하도록 돕습니다. Terraform은 또한 작성된 언어에 상관없이 모든 애플리케이션을 프로비저닝할 수 있습니다.

Ansible과 다르게 Terraform은 구성 관리 기능을 제공하지 않습니다. 그러나 Ansible은 구성 관리 툴(예: Cloud Foundation)과 나란히 작동하여 자동으로 구성 파일에 기술된 상태로 인프라를 프로비저닝하고 필요한 경우 구성 변경 사항에 대해 업데이트 프로비저닝을 변경합니다.

IaC를 선택하는 방법을 자세히 알아보려면 “코드형 인프라: Chef, Ansible, Puppet 또는 Terraform 중 무엇을 선택할 것인가?”를 확인하세요.

관련 솔루션
IBM Cloud® Schematics

IaC(Infrastructure as Code)를 사용하여 리소스를 구성하고 자동화하고 핵심 애플리케이션에 집중하세요.

IBM® Cloud Schematics 살펴보기
IBM DevOps 솔루션

여러 디바이스, 환경 및 클라우드에서 보안이 강화된 클라우드 네이티브 앱을 빌드, 배치 및 관리하는 강력한 DevOps 소프트웨어.

IBM DevOps 솔루션 살펴보기
리소스 DevOps란?

DevOps는 소프트웨어 개발 및 IT 운영 팀의 작업을 결합하고 자동화함으로써 고품질의 소프트웨어를 보다 빠르게 제공합니다.

클라우드 컴퓨팅이란?

클라우드 컴퓨팅을 이용하면 인터넷을 통해 IT 인프라에 '플러그인'할 수 있으며, 이를 온프레미스에 설치하고 유지보수하지 않아도 컴퓨팅 리소스를 사용할 수 있습니다.

코드형 인프라: Chef, Ansible, Puppet 또는 Terraform 중 무엇을 선택할 것인가?

코드형 인프라 툴을 선택하는 방법을 알아보세요.

다음 단계

Terraform을 기반으로 구축된 IBM Cloud® Schematics는 인프라 관리 자동화를 위한 간소화된 솔루션이며, 조직이 일관적인 프로비저닝과 오케스트레이션을 통해 애플리케이션 성능을 향상하도록 지원할 수 있습니다.

IBM® Cloud Schematics 자세히 보기