IaC는 수동 프로세스가 아닌 코드를 통해 인프라를 관리하고 프로비저닝하는 것을 말한다.
IaC를 사용하면 인프라 사양을 담은 구성파일이 생성되므로 구성을 편집하고 배포하기가 더 쉬워진다. 그리고 매번 동일한 환경을 프로비저닝 하도록 보장한다.
IaC는 구성 사양을 코드화하고 문서화함으로써 구성관리를 지원하며, 구성 변경 사항을 문서화하지 않고 임시로 변경하는 일을 막을 수 있다.
원래 인프라 프로비저닝은 시간과 비용이 많이 드는 수동 프로세스였다. 하지만 이제 데이터 센터의 물리적 하드웨어가 아니라 가상화, 컨테이너, 클라우드 컴퓨팅을 이용하여 인프라 관리를 하게 되었다.
클라우드 컴퓨팅이 등장하면서 인프라 구성 요소의 수가 늘어났고, 날마다 더 많은 애플리케이션이 프로덕션 환경에 릴리스되고 있습니다. 이에 따라 더 잦은 빈도로 가동하고, 중지하고, 확장할 수 있는 인프라가 필요해졌습니다. IaC 이용 사례를 확립하지 않으면 현재 인프라의 규모를 관리하기가 갈수록 어려워질 것입니다.
조직은 IaC를 이용해 IT 인프라 요구 사항을 관리함과 동시에 일관성을 높이고 오류 및 수동 구성을 줄일 수 있습니다.
IaC에 대한 접근방식에는 다음과 같은 두가지 방식이 있다.
명령적 방식은 원하는 인프라를 갖추기 위해서 단계적으로 명령을 내리는 것이고, 선언적 방식은 최종 솔루션 상태를 정의하고 자동화 플랫폼이 이 상태를 달성하는 방식이다.
이들의 특징과 차이점을 아라보자
가변인프라 라는 어려운 말이 붙었지만 쉽게 생각하면 온프레미스 서버와 일맥상통한다.
왜 "가변"이라는 말이 붙게 되었냐면 서버가 생성된 뒤 변경가능한 형태이기 때문이다. 엔지니어와 관리자가 수동으로 패키지를 업/다운그레이드 하고, 서버 하나하나의 설정파일을 수정하고, 새 코드를 기존 서버에 배포한다.
이러한 면 들을 봤을때 하나하나 관리를 해 주어야 하고 챙겨줘야 하는것 때문에 흔히 애완동물이라고 표현을 많이 한다. 이와 반대되는 개념으로 불변 인프라가 있는데 이것은 흔히 가축(e.g. 소떼)라고 불린다.
서버가 배포된 이후 절대 변경되지 않는 형태의 인프라 패러다임이다. 만약 업데이트, 수정, 변경을 해야 한다면 공용 이미지에 적절한 수정을 한 새 서버가 프로비저닝되어 기존 서버를 대체한다.
그래서 변경사항들이 발생하게 되면 기존의 인프라를 처분하고 새 인프라로 교체하는 방식으로 하기 때문에 간단하고, 일관성 있고 ,예측 가능한 배포 프로세스이다.
가변인프라는 배포된 이후 변경이 가능하도록 설계되었고, 불변인프라는 변경되지 않고 교체되도록 만들어졌다.
가변인프라에서 장애가 발생하게 된다면 치명적인 요인이 된다. 서버를 다시 살려내기 위해서 많은 시간과 노력, 비용이 발생할 수도 있다.
하지만 불변인프라에서는 장애가 발생하게 된다면 그 부분만 교체를 하여 빠르고 저렴하게 장애대응이 가능하다.
다음 포스팅에서는 선언적 접근방식 IaC인 테라폼에 대해 포스팅 할 것이다.
:)