1. 코드형 인프라(IaC: Infrastructure as Code)란?
본격적으로 도서 리뷰를 시작하기 전, 코드형 인프라(Infrastructure as Code, IaC)에 대해 간단히 알아보자. 코드형 인프라, 즉 IaC는 매뉴얼 작업이 아니라, 코드로 인프라를 관리하고 구축하는 것을 뜻한다.
IaC로 인프라를 관리 및 구축하게 되면, 휴먼 에러 없이 동일한 환경을 프로비저닝 하게 도와주고, 구성 내용을 문서화(코드로 남김)하여 구성 내용을 관리하는 데에 도움을 준다. IaC로 인프라 구축을 자동화하면, 애플리케이션을 개발하거나 배포할 때마다 개발자 혹은 엔지니어가 서버, 운영 체제, 스토리지, 기타 인프라 구성 요소들을 수동으로 구축하거나 관리할 필요가 없어진다.
90년대에도 시스템 엔지니어들이 스크립트로 인프라 관리를 자동화하거나 하는 등 코드를 통해 인프라 관리를 자동화 한다는 행위는 이미 존재했지만, IaC에 대한 개념은 00년대 말 셰프(Chef)의 공동 창업자인 아담 제이콥(Adam Jacob), 퍼펫(Puppet)의 설립자 루크 케이니스(Luke Kanies)가 해당 용어를 사용하기 시작하고 나서 비로소 점점 널리 사용되기 시작되었다.
또한, IaC에 대한 접근 방식에는 선언적 방식과 명령형 방식 두 가지가 있다.
선언적 접근 방식은 말 그대로 필요한 리소스와 속성 등 바람직한(Desired) 시스템의 상태를 정의하게 되면, IaC 도구가 해당 상태로 구성해주는 방식으로. 선언적 접근방식으로 인프라 구축을 자동화하는 툴에는 하시코프(Hashicorp)의 Terraform, AWS의 Cloudformation, Redhat에서 개발한 오픈소스 툴인 앤서블(Ansible)이 있다. 원하는 상태를 key-value값으로 정의(JSON, YAML등의 파일을 떠올려보면 된다)하는 등으로 인프라 구성을 정의하면 해당 도구들이 정의한 상태에 맞도록 구성을 진행하게 된다.
명령적 접근 방식은 바람직한(Desired) 시스템 상태를 얻기 위한 특정 절차를 명령으로 정의하여, 이 정의된 명령을 올바른 순서로 실행해야 한다. 명령적 접근방식을 활용하여 인프라 구축을 자동화하는 툴에는 AWS CDK가 있다. AWS CDK의 경우에는, Java, Python과 같은 개발자에게 친숙한 코드언어로 인프라를 구성할 수 있다는 장점이 있다.
2. **'**코드로 인프라 관리하기(2판)’ 리뷰
‘코드로 인프라 관리하기’ 라는 책은 제목만 봤을 때는 위에서 언급한 특정 IaC 도구들을 어떻게 사용할지에 대해서 알려주는 책이라고 생각할 수 있는데, 이 책은 특정 도구를 어떤식으로 사용하면 좋을지에 대해 알려주는 가이드 매뉴얼, 혹은 튜토리얼 같은 책은 아니다. 하지만 읽어본 감상으로는 그렇다고 반대로 코드형 인프라가 무엇인지에 대해 설명하는 개념서적인 책도 아니라고 말할 수 있다.
물론 이 책의 초반에서는 코드형 인프라란 무엇인지, 왜 사용하는지 클라우드 네이티브(Cloud Native)한 환경에서 인프라를 운영하는 것이란 무엇인지에 대해서 설명하는데에 상당한 부분을 할애하고 있지만 가장 중요한 부분은 특정 기술이나 도구에 얽매이지 않고 코드로 인프라를 관리할 때 어떤 부분에 주의해서 구성해야할지에 대한 방법론에 대해 설명하는 부분. 사실 책 소개만 읽었을 때에는 특정 도구 없이 이런 부분을 어떻게 설명할까 싶었는데, 이 책에서는 ShopSpinner라는 가상의 기업이 FCS(Fictional Cloud Service)라는 가상의 퍼블릭 클라우드를 사용하면서, FSI(Fictional Server Image), 그리고 FKS(Fictional Kubernetes Service)를 사용하여 인프라를 운영하고 있다고 가정한다. 그리고 ShopSpinner라는 기업은 Terraform, CloudFormation, Flumi(코드형 인프라 관리 도구로 일반적 프로그래밍 언어로 인프라를 구축할 수 있다)와 비슷한 Stackmaker라는 도구를 사용하고, Ansible, Chef, Puppet과 비슷한 Servermaker라는 도구로 서버를 설정하고있다고 가정한다. 따라서 특정 도구에 대한 선수 지식 필요 없이(하지만 코드형 인프라 관리 툴에 대한 개념을 이해하고 있어야 하기에 한 가지 이상의 툴을 써본 경험이 있으면 좋다) 코드형 인프라를 어떻게 관리해야할지에 대해 설명하고 있다. 따라서 특정 툴에 대한 지식을 쌓고 싶어하는 사람보다는 이미 코드형 인프라 관리 툴을 사용해본 데브옵스 엔지니어, 인프라 엔지니어 혹은 사이트 신뢰성 엔지니어(Site Reliability Engineer) 중에서 어떻게 하면 코드형 인프라 툴을 효과적으로 사용할 수있을지에 대해 배우고 싶은 경우 추천하고 싶은 책이었다.