[Ansible] #1.1 IaC 개요, 장점
IaC
의 개요와 장점을 알아보자.
1. IaC 개요
IaC(Infrastructure as Code : 코드형 인프라)
는 인프라를 웹 인터페이스 및 대화 형식의 도구를 사용해 수동적으로 인프라를 구성하는 것이 아닌, 시스템이 읽을 수 있는 인프라 정의 파일을 통해 인프라의 구성 관리 및 배포를 자동화하는 것을 일컫는다.
인프라는 물리적 하드웨어 뿐만 아니라 가상 컴퓨터, 클라우드 등 관련 리소스를 IaC
를 통해 구성 관리 및 배포할 수 있다.
IaC
는 폭발적으로 확장되는 컴퓨팅과 차세대 웹 프레임워크와 같은 새로운 기술을 구현하고 구성하는 어려움에 대한 해결책으로 발전하게 되었고, 기업들은 이런 기술을 통해 스케일링 확장하는 문제도 해결할 수 있었다.
2006년 경 산업을 뒤흔든 새로운 이슈가 제기 되었는데, Amazon Web Service
의 EC2
에 얼마 전 릴리스 된 Ruby on Rails 1.0
을 배포하는 것이었다.
이것을 해결하기 위해 새로운 도구들이 계속해서 등장하게 되었고 IaC
의 필요성과 탄생하게 된 배경이 되었다.
표준화된 코드로 인프라를 모델링하고 알려진 모범 사례를 이용해 인프라를 설계, 구현 및 배포할 수 있는 기능이 필요했고, 인프라를 소프트웨어 프로젝트와 같은 코드를 이용해 인프라의 애플리케이션을 신속하고 정확하게 표준화 되도록 배포할 수 있었다.
인프라에서 가장 중요한 것은 격리(isolation) 이라고 할 수 있다.
논리적으로 격리를 구현하여 물리적으로 분리되어 있는 것 처럼 인프라를 구성하는 것이 중요하다.
가상화를 통해 추상화를 구현하고, 플랫폼의 인스턴스를 생성, 삭제 등 라이프 사이클(생명 주기)을 코드로 관리할 수 있다.
요즘 인프라, 클라우드에서는 Web
, GUI
기반으로는 관리하지 않는다.
DevOps
로서 추구해야 하는 목적은 자동화(Automation)다.
아무래도 그래픽 기반에서는 자동화 하기 힘들다.
2. IaC 장점
- 비용 절감
- 일반적으로 비용이라고 하면, 물리적인 리소스도 당연히 포함되지만 인적 자원, 즉 인건비도 포함된다.
IaC
로 자동화를 구현하면 사람의 수동적인 인프라 관리를 위한 리소스가 절약되므로 비용 절감이 가능하다.
- 빠른 속도
- 인프라 구성 관리 및 배포를 자동화 함으로서 신속한 실행을 가능하게 하고, 효율적으로 작업할 수 있는 가시성을 제공한다.
- 일일이 손으로 수정하는 일련의 과정을 거치는 것 보다는 자동화된 코드가 훨씬 빠른것은 자명하다.
- 안정성
- 대부분의 오류, 보안적 이슈는 사람에 의해 발생한다. 즉,
IaC
를 사용하면 수동으로 구성할 떄와 같은 사람의 실수와 관련된 위험을 제거할 수 있다. - 완벽한 것은 존재할 수 없고, 하루에도 몇 번씩 오류가 발생할 수 있으며 이를 사전에 완전히 방지하는 것은 불가능하기 때문에, 어떻게 신속하게 대처하느냐가 중요하다.
DR(Disaster Recovery)
를 극복하기 위해서 기존에 자동화된 코드를 마련해 놓는다면 사고를 방지할 수 있을 것이다.
- 대부분의 오류, 보안적 이슈는 사람에 의해 발생한다. 즉,
- 코드화 및 버전 관리
- 코드로 구성되어 있기 떄문에, 다른 사람과의 공유가 용이하다.
Git
과 같은VCS(Version Control System)
를 이용하면 변경 사항 이력을 남길 수 있어 추후 문제가 발생했을시 어떤 부분이 변경되어 발생한 문제인지 확인하기 쉽다.
- 재사용성
- 인프라를 코드화하고 관련 리소스를 그룹 및 모듈화해서 필요 시 재사용할 수 있다.