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

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

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


개발과 운영의 경계 허문다

IaC는 애플리케이션 개발과 운영에 필요한 인프라를 코드로 자동 생성·배치·관리하는 것이다. 인프라에 대한 정보가 담긴 코드들을 하나의 스크립트에 작성하면, IaC 툴이 스크립트에 맞춰 CSP의 클라우드 서비스와 연동해 인프라를 생성한다. 쉽게 표현하면 IaC 툴은 ‘배우’고, 스크립트는 ‘시나리오’에 해당한다고 보면 된다. 연극의 스토리를 전개할 수 있는 단어와 문장들이 담긴 시나리오를 보고 배우가 연기하는 것과 같다는 것이다.

IaC의 개념도 (출처: 클루커스)
IaC의 개념도 (출처: 클루커스)

인프라 프로비저닝(설정과정: Provisioning)을 자동화한다는 것은 개발자가 애플리케이션을 개발하거나 배포할 때마다 서버, 운영체제(OS), 스토리지 및 기타 인프라 구성 요소를 수동으로 설치하고 관리할 필요가 없다는 것을 의미한다.

일반적으로 프로비저닝이라는 용어는 IT 환경에서 운영 담당자가 개발자가 사용할 컴퓨터에 필요한 컴퓨팅 자원과 저장소 또는 기타 서비스를 설치한다는 의미로 사용된다.

통상 개발자들이 애플리케이션을 개발할 때 가장 먼저 하는 일은 운영팀과 협의해 인프라를 설치하는 것이다. 이 때 개발자는 개발에 필요한 자원을 운영팀에 요청하고, 운영팀은 서버, 라우팅 항목, 데이터베이스(DB) 구성 및 로드 밸런서를 수동으로 개발자의 작업 컴퓨터에 설치한다. 이후 설치된 컴퓨터를 개발자에게 전달한다.

이 때 운영팀이 인프라를 잘못 설치할 경우 다운타임이 발생할 수도 있으며, 문제 해결에 많은 시간이 필요할 수도 있다.

IaC는 이러한 기존 개발환경이 갖는 문제들을 해결할 수 있을 것으로 기대를 모으고 있다. IaC는 개발자로 하여금 ▲IT 인프라 환경의 자동 프로비저닝과 워크플로우 호환 ▲인프라 규모와 상관없는 관리의 용이성 ▲빠른 재해복구 환경 구축 ▲멀티·하이브리드 클라우드 구현 등 5가지 이점을 코드 작업으로 누릴 수 있게 해준다.

먼저 IaC는 ‘IT 인프라 환경을 자동으로 프로비저닝’ 해준다. 간단한 파일과 코드를 사용해 인프라, 네트워킹, 부하 분산, 클라우드 IAM(Indexed Access Method) 등을 포함한 환경을 비롯해 테스트나 QA 등을 위한 인프라 환경도 구축할 수 있도록 해준다. 이 과정에서 인프라를 생성하기 위한 운영팀의 실수나 오류를 줄여 효율성도 높아진다. IaC를 이용할 경우 스크립트 내 코드 수정을 통해 손쉽게 자원을 생성하고, 업데이트하거나 삭제할 수도 있다.

IaC는 인프라 규모에 제약이 없어 관리도 용이하다. 코드를 스크립트에 작성할 때 VM의 개수와 상관없이 필요한 만큼 생성할 수 있다. 인프라 구성요소 역시 세분화해 자동으로 결합할 수 있기 때문에, 개발자가 부분적으로 제어할 수 있다. VM 100대를 사용한다고 가정할 경우, 50대에는 마리아 DB를, 50대에는 오라클을, 또 관리자 권한은 100명에게 나눌 수도 있다. 네트워크나 저장소, 데이터베이스(DB) 등과 같은 리소스를 쉽게 관리할 수 있다는 얘기다.

클라우드로 애플리케이션을 개발할 때 클라우드 서비스 제공사의 ‘포털’에서 인프라를 생성한다. 이 때 CSP의 웹 포털에서는 원하는 자원을 한 가지만 선택할 수 있기 때문에, 자원의 수가 많아질수록 비례해서 작업도 늘어나게 된다. 가령, 웹 포털에서 생성하고자 하는 자원의 종류가 15가지라면, 15번의 개별 작업이 필요하다. 그러나 IaC를 이용할 경우 이처럼 번거로운 클라우드 인프라 생성 과정을 줄일 수 있다.

IaC는 ‘빠른 재해복구 환경’도 구축할 수 있도록 해준다. 기존 애플리케이션의 인프라와 구성을 코드로 확인할 수 있어 문제가 발생하더라도 빠르게 조치를 취할 수 있다. 또 개발팀과 운영팀 모두가 스크립트를 검토할 수 있기 때문에 지속 통합·지속 배포(CI·CD) 파이프라인을 구축해 문제가 발생한 곳이 어느 지점인지 쉽게 확인할 수 있다. 부적절한 인프라 변경사항을 바로 알아내 재해 복구를 할 수 있다는 것이다.

모은정 클루커스 개발팀 리더는 “개발 직원이 퇴사할 때 애플리케이션에 대한 정보를 인수인계해야 하는데, 그렇지 못한 경우가 있다. 이 경우 IaC를 통해 애플리케이션을 개발했다면 스크립트에 애플리케이션에 대한 인프라 정보가 담겨있어, 새로운 직원이 오더라도 손쉽게 애플리케이션에 대한 버전관리가 가능하다”고 설명했다.

이어 그는 “IaC 스크립트를 사용할 경우 몇 번이고 같은 환경을 구성할 수 있어 소프트웨어의 개발 기한을 단축할 수 있다. 적시에 제품을 개발해야 하는 개발자에게 큰 도움이 될 것”이라고 덧붙였다.

IaC는 멀티·하이브리드 클라우드를 구현하는 데에도 적합하다. IaC로 컨테이너(Container) 환경을 만드는 것이다. 컨테이너는 온프레미스부터 퍼블릭 클라우드, 프라이빗 클라우드 등 인프라에 제약을 받지 않는다는 점에서 멀티·하이브리드 클라우드에 적합하다.

컨테이너는 인프라 위에 OS를 구성하고 그 위에 컨테이너 엔진을 설치하며, 바로 위에 설치되는 컨테이너에 애플리케이션과 WAS(Web Application Server)가 담기는 구조다. 하부 자원에 대한 종속 없이 스스로 가동될 수 있어 멀티·하이브리드 클라우드 환경에 적합하다. 이처럼 컨테이너와 생성된 컨테이너를 관리하는 시스템인 ‘쿠버네티스(Kubernetes)’도 IaC로 쉽게 관리할 수 있다. 애플리케이션을 개발하기 위해 스크립트에 인프라 코드를 작성할 때 컨테이너에 대한 정보와 이를 관리할 쿠버네티스 서비스를 담기만하면 된다.

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