IaC란

클라우드로 인프라를 구성할때 AWS의 경우 console(AWS 웹페이지)를 이용하여 자원을 생성/수정/삭제한다. 여기에는 큰 단점이 존재하는데 자원을 생성한 사람만이 해당 자원의 정보를 알 수 있으며 인프라가 커져감에 따라 복잡도를 제어하기 힘들다는 것이다. 이러한 단점을 극복한 기술이 바로 IaC이다. IaC는 프로그래밍 코드로 인프라를 구성하고 배포할 수 있는 기술이다. 코드로 관리함에 따라 인프라의 전반적인 모습을 쉽게 확인할 수 있는 등 많은 장점을 가져갈 수 있게 되었다.

IaC의 장점

  • 누구나 인프라의 구성을 코드를 통해 쉽게 알 수 있다.
  • 코드로 필요한 리소스를 정의하여 재사용성과 일관성을 가져갈 수 있다.
  • 조직의 개발/운영 속도가 향상된다.
  • 인프라의 변경사항(코드의 변경)에 대한 로그확인, 버전관리가 가능하다. 이로인해 인프라 문제 발생시 빠른 롤백도 가능하다.


클라우드(with IaC)와 DevOps

과거 클라우드의 등장 이전에는 서버구축, 네트워크 연결, 이중화와 같은 인프라의 관리를 운영조직에서 담당하였다. 그리고 서버 위에서 돌아가는 소프트웨어 어플리케이션의 경우는 개발조직이 담당하였다. 업무와 책임이 완전히 분리되어 있지만 두 조직은 완전히 의존적이었다. 서버는 결국 인프라의 위에서 동작하였기에 인프라의 구성이 변경되었을때 서버에도 영향을 주었고 문제가 발생했을때 문제점을 파악하기 힘들었다.
클라우드가 등장하면서 물리적인 장비를 관리하던 운영조직은 소프트웨어의 관리, 배포 자동화 등에 집중하였고 자연스럽게 개발조직에 녹아들게 되었고

💡 DevOps란?
Dev(개발) + Ops(운영)의 합성어로 개발과 운영을 합쳐 요구사항(팀 내 or 고객)을 빠르게 반영하고 품질 높은 소프트웨어를 만들고자 하는 목적을 가진다.
DevOps 엔지니어들은 빠른 요구사항 반영을 위해 소프트웨어의 전달/배포의 과정을 자동화하여 전반적인 프로세스를 효율적으로 운영하는 역할을 지닌다.

IaC는 인프라 구성부터 배포까지 모든 것을 코드 형태로 관리한다. 이는 DevOps가 지향하는 자동화의 목적에 부합한다.
IaC를 이용하여 개발 주기의 각 단계(dev, stage, prod)의 환경 구축을 효율적으로 하며 배포 문제발생에 대해 가능성을 낮추며 코드로 자동화함에 따라 휴먼 에러의 문제점도 해소시킬 수 있다.


IaC의 툴

CloudFormation

  • AWS에서 공식적으로 지원한다.
  • AWS의 지원이 빨라 신규 서비스나 설정들을 빠르게 사용할 수 있다.
  • AWS에 한정되어 사용할 수 밖에 없다는 단점이 있다.

Terraform

  • HCP(HashiCorp Configuration Language)를 사용
  • 선언형이며 불변성(리소스 수정시 삭제 후 재생성)
  • 멀티 클라우드 지원(AWS, Azure, GCP 등 여러 provider들을 Terraform하나로 관리가능)

CDK
인프라 운영과 개발의 거의 완전 통합을 지원하기 위해 각 프로그래밍 언어로 인프라를 구성할 수 있도록 하는 AWS CDK도 등장하였다.

이 외에 Ansible, puppet 등이 존재한다.

댓글남기기