효율적인 클라우드 인프라 운영의 핵심으로 떠오른 IaC

[아이티데일리] 클라우드를 효율적으로 운영하며, 데브옵스(DevOps)를 성공적으로 구현하기 위한 방법으로 ‘IaC(Infrastructure as Code)’가 떠오르고 있다. IaC는 개발자가 직접 코드를 작성해 인프라를 생성하고, 배치, 관리하는 기술이다. 개발자들은 IaC를 이용해 개발하기 전 수행해야 했던 번거로운 클라우드 인프라 설정 작업을 줄이고, 개발과 운영을 유기적으로 만들 수 있다. ‘IaC’에 대한 관심이 높아지자 솔루션 공급업체들이 시장 진입을 서두르는 등 빠르게 움직이고 있다. 새롭게 떠오르고 있는 기술, ‘IaC’에 대해 알아봤다.

[IaC ①] 개발과 운영의 경계 허문다
[IaC ②] 2가지 코드 작성 방식과 3가지 방법으로 구동
[IaC ③] ‘테라폼’ 및 ‘앤서블’ 각광…향후 고성장 기대


2가지 코드 작성 방식

IaC를 사용하기 위해서는 원하는 인프라 구성을 코드형태로 스크립트에 기술해야 한다. 작성 방식은 사용하고자 하는 IaC 툴에 따라 순차적인 명령을 주는 방식인 ‘명령형(Imperative)’과 최종 결과물을 구성하는 방식인 ‘선언형(Declarative)’ 2가지로 나뉜다.

명령형 방식(좌측)과 선언형 방식
명령형 방식(좌측)과 선언형 방식

먼저 ‘명령형’의 경우 인프라에 대한 코드가 적힌 스크립트를 IaC 툴로 생성하는 방식이다. 이 방식은 스크립트에 인프라에 대한 자원과 구성에 대한 코드가 모두 포함돼야 한다. 때문에 개발자가 애플리케이션을 개발하기 위해 필요한 인프라에 대한 모든 것을 코드로 작성할 수 있어야 한다.

‘명령형’의 경우 솔루션을 통해 인프라를 프로비저닝 하는데, 이때 하나씩 주어진 명령을 수행하며 인프라를 생성한다. 이런 이유로 스크립트에 코드를 작성하는 순서가 절대로 바뀌어서는 안 된다. ‘명령형’ 방식의 IaC 솔루션을 사용해 스크립트를 작성하기 위해선 고도의 전문성이 요구되는 이유다.

모은정 클루커스 개발팀 리더는 “‘명령형’은 윈도우 도스(DOS) 명령처럼 명령어를 작성하는 개념이다. 가령, 어떤 VM으로 몇 개를 사용한다고 결정하게 되면, 삭제할 수 없고 바로 VM이 생성된다. 또 인프라를 코딩하는 순서 역시 바뀌면 안 된다”면서, “비교적 ‘선언형’에 비해 전문성이 필요하다”고 설명했다.

‘선언형’은 최종 결과물이 어떻게 나올지 구상한 후 모듈 형식으로 작성한다. 한 마디로 프로비저닝할 인프라의 최종 상태를 지정하게 되면, IaC 툴이 나머지를 알아서 처리해준다는 것이다. 또한 순차적으로 코드를 작성해야 하는 ‘명령형’과는 다르게 생성하고자 하는 서비스 별로 ‘선언’하기만 하면 된다.

CSP는 ‘A’, 리전은 ‘B’, 스토리지는 ‘C’, 쿠버네티스는 ‘D’ 등과 같이 작성하면 IaC 툴이 인프라를 생성한다. 현재 IaC SW 대부분은 ‘선언형’을 채택하고 있다. AWS의 클라우드 서비스에서 IaC를 적용하는 것을 예로 들면, ‘AWS S3 API create-bucket’, ‘my-first-website-cloud-native-website’, ‘리전 EU-센트럴1’ 등과 같은 코드를 하나의 스크립트에 작성하기만 하면 된다.

 선언형 방식의 사례 (출처: 클루커스)
선언형 방식의 사례 (출처: 클루커스)


3단계로 구동

앞서 2가지 방식으로 스크립트를 작성하더라도 ▲초기 인프라 설정 ▲인프라 관리 ▲인프라 애플리케이션 배포 등의 3단계를 거친다. 또한 각 단계에 적용되는 IaC 툴 역시 다양하다.

 IaC 툴 종류와 타입, 언어 (출처: 클루커스)
IaC 툴 종류와 타입, 언어 (출처: 클루커스)

먼저 ‘초기 인프라 설정’ 단계에서는 말 그대로 IT 인프라를 설정하는 단계다. 사용자가 인프라를 사용할 수 있도록, 스크립트를 통해 인프라를 프로비저닝 한다는 것이다. 여기에서 사용할 수 있는 IaC 솔루션은 ‘팩커(Packer)’, ‘베이그런트(Vagrant)’ 등이 있다.

‘인프라 관리’ 단계에서는 앞서 생성된 인프라를 관리한다. 이 단계에서는 생성된 인프라를 수정, 재사용, 인프라 작업 정보, 이력 등 인프라에 대한 전반을 관리한다. 아울러, 다음 단계에서 진행될 ‘인프라 애플리케이션 배포’ 작업에 앞서 애플리케이션 배포를 위한 과정을 개발하기도 한다. 여기에서 주로 사용되는 IaC 솔루션으로는 ‘테라폼’, ‘베이그런트’, ‘솔트스택(Saltstack)’, ‘앤서블(Ansible)’, ‘퍼펫(Puppet)’, ‘셰프(Chep)’ 등을 들 수 있다.

‘인프라 애플리케이션 배포’ 단계에서는 준비된 애플리케이션 서버에 애플리케이션의 새 버전을 배포한다. 자바나 DB부터 CI·CD 파이프라인 관리 도구와 컨테이너 오케스트레이션 툴까지 애플리케이션의 개발 환경을 구성하고 관리한다. 이 단계에서 인프라에 대한 애플리케이션 구성과 테스트 환경을 생성하며, 보안에 대한 관리 절차도 세우게 된다. 사용되는 IaC 솔루션은 ‘클라우드인잇(Cloud-init)’, ‘CF엔진(CFEngine)’, 솔트스택’, ‘앤서블’, ‘퍼펫’, ‘셰프’ 등이다.

‘인프라 애플리케이션 배포’ 단계 외에도 ‘배포 애플리케이션 관리 단계’도 있지만, 대개 인프라 애플리케이션을 배포하고 나서 이를 위한 관리도 함께 진행하고 있다. ‘인프라 애플리케이션 배포’ 단계에서 사용되는 ‘클라우드인잇’, ‘CF엔진’, 솔트스택’, ‘앤서블’, ‘퍼펫’, ‘셰프’ 등의 툴로 배포된 인프라 애플리케이션을 관리한다.

 각 단계별 적용되는 IaC 툴
각 단계별 적용되는 IaC 툴

이 같은 오픈소스들을 기반으로 많은 기업들은 다양한 IaC 솔루션을 만들어내고 있다. 하지만 기술이 성숙하지 않은 현 상황에서는, 인프라 운영을 위한 모든 과정을 대체할 수는 없어 각 단계에 맞는 IaC 툴을 적절히 섞어서 활용해야 한다.

저작권자 © 아이티데일리 무단전재 및 재배포 금지