개요
인프라에즈코드 즉 인프라를 코드로 만든다 이런뜻인데요 iac의 특징을 설명하기 전에
현재 인프라구성 as-is를 살펴보겠습니다.
우리는 현재 가장 발전된 환경인 클라우드 환경에서 인프라를 구성하고 있습니다
다만, 제가 생각하기에 고도화된 환경에 있지만 지금 이 이미지처럼 마치
가내 수공업을 하는듯한 느낌을 받을 수가 있는데요
아무래도 반복된 인프라 구성 및 반복된 변경, 또 그속에서 일어나는 휴먼에러들.. 이런문제가
사람이 직접 하기 때문에 발생하지 않나 싶습니다.
그렇다면 To-Be 의 모습은 어떨까요?
이 이미지처럼 잘 구성된 라인, 즉 설계도만 있으면, 실수없이 설계도의 제품을 찍어 내는 모습입니다.
이런게 Iac의 특징이 아닐까 생각됩니다.
그럼 좀더 자세히 알아 보겠습니다.
실행 가능한 설계도
저는 Iac를 실행가능한 설계도라고 정의하고 싶습니다.
사실 클라우드 환경에서 우리가 인프라를 만들때 콘솔에서 클릭 클릭 하는 활동들은
궁극적으로 그 클라우드 안의 명령어 즉 코드를 실행 하는 것입니다.
근데 그것을 사용자가 편리하게 사용하기 위해서 콘솔을 만든거죠
즉 클라우드 환경에서의 인프라는 원래 코드로 만들었습니다.
근데 콘솔에서의 작업이 처음은 좋지만, 반복될 수록 비효율적이란 생각이 들었기 때문에 Iac가 탄생된게 아닌가 생각됩니다.
다시 말해서 우리가 콘솔로 만든 인프라들을 다시 재활용하기 위해 코드로 만들어두는것이 Iac라는 거죠
자 이런설계도를 만들때 고민해서 만들었을것이고 콘솔에서 여러가지 과정을 통해 인프라를 구성했을겁니다.
하지만 이 설계도를 작성할때 콘솔이 아닌 Iac를 통해 만들었다면, 그것은 하나의 모듈로 관리할수 있을것입니다.
그 모듈은 코드로 구성되어있을 것이고, 그 코드를 실행하는것은 설계된 인프라를 구성하는 것이기 때문에
저는 Iac를 실행가능한 설계도라고 생각 합니다.
형상 관리
코드를 쓴다는것은 형상관리를 할수 있다는 겁니다.
즉 이런코드를 깃등의 형상관리 툴에 공유하고 다른사람들과 협업하고
계속 업그레이드 할 수 있다는 것입니다.
보통 콘솔로 작업한 것들은 그냥 그대로 두기 때문에, 그것이 만들어 지는 과정은 사실 잘 알기 힘듭니다.
그러나 Iac를 사용하여 코드로 구성한다면, 코드를 변경해서 인프라를 변경하거나
코드를 추가해서 새로운 인프라를 추가할수 있기 때문에 그에대한 과정을 기록할 수 있습니다.
또한 협업을 통해 가장발전되고 최신의 모듈을 유지할수 있다는 장점이 있습니다.
무엇보다 제가생각하는 Iac의 가장큰 장점은 이런 부분이 아닐까 생각 됩니다.
이러한 특징들 때문인지는 정확히 모르겠지만, Iac에 익숙해진 사람들은 보통 다시돌아갈수 없을거 같다는 얘기들을 한다고 합니다.
그럼 이 다음으로 Iac의 도구들을 살펴보겠습니다. 제가 알아본 도구는 두개입니다.
테라폼
테라폼은 하시콥이라는 회사에서만든 Iac 도구인데요
가장 유명하고 가장 많이 쓰이는 도구중 하나입니다.
HCL이라는 하시콥에서 만든 언어를 통해 코드를 정의 해야하기 때문에 이 언어를 배워야 합니다.
가장많이 쓰이는 도구인 만큼 다양한 프로바이더를 지원 하고 있습니다.
애저 지시피 aws 뿐만 아니라 정말 많은 다양한 프로바이더를 지원하고 있습니다.
테라폼은 작성 계획 어플라이를 통해 인프라를 생성하게 됩니다.
첫번째로 HCL 언어를 통해 리소르르 정의하게 되고, 정의한 리소스를 바탕으로 plan 명령어를 통해
이 리소스가 생성 가능한지 확인하게 됩니다.
그리고 마지막으로 Apply를 통해 실제 리소스를 생성하게 됩니다.
테라폼은 tfstat를통해 클라우드의 상태를 관리합니다.
즉 한번 생성후 다시 생성하려고해도 클라우드이 리소스 가 생성되 있는 상태 기 때문에 다시 생성하지 않는 다는 것이죠
다시 말하면 모든 Iac의 특징일수도 있겠지만, 만약 콘솔에서 직접 인프라를 변경하거나 삭제한다면, 테라폼의 코드에서는 그 상태를 알지 못합니다.
즉 동기화가 되지 않으면 Iac의 장점 중 히스토리 추적은 불가능하게 되는것이죠
테라폼의 가장 큰 특징은 가장많이 쓴다는것, 그것으로 인한 장점은 누구에게나 익숙할수 있으며, 에러에 대한 레퍼런스가 많다고 할수 있습니다.
풀루미
사실 풀루미의 특징은
테라폼의 차이점이라고 할수있는데
그 중에서 가장큰 차이점은 사용언어 입니다.
이전에 말씀드렸듯이 테라폼은 HCL이라는 하시콥에서 요구하는 언어로 작성되어야만 합니다.
하지만 풀루미 에서는 사용자가 원하는 언어로 작성이 가능합니다.
즉 자신이 자신있어 하는 언어로 코드를 만들수 있다는 것입니다.
사실 둘의 차이는 이것이 전부라고 할만큼 다른것은 찾기가 힘들었습니다.
하지만 극명한 차이는 선두주자가 테라폼이고, 후발주자가 풀루미 라는것 입니다.
그 차이는 사용 레퍼런스에서 보여질거라 생각합니다.
마무리
테라폼과 풀루미를 샘플로서 각자 사용해보았고, 차이점도 확인했습니다.
그러면서 알게된 Iac의 단점들도 있습니다.
특히 테라폼은 새로운 언어를 배워야 한다는 부담감이 있습니다.
하지만 풀루미는 협업하는 사람들이 똑같은 언어를 알고 있어야 한다는 단점이 존재합니다.
그리고 리소스의 최신상황을 항상 팔로우 해야 합니다.
예를 들어 만들어진 ec2생성 코드가 옛날버전의 ami를 사용한다면 , 생성되지 않는 경우도 존재합니다.
또한, 콘솔 상으로 인프라가 만들어질때 자동적으로 생성되는 부분들이 존재합니다. 즉 우리가 인지하지 못했던 부분도 클라우드 서비스사에서 직접 만들어주는 경우가 있는데,
뭐 예를들어 시큐리티그룹을 생성해준다던가 서비스간의 의존도도를 생성해주는등…
이런것을 코드로 작성할때 놓칠 우려가 있습니다.
다시 정리하면, Iac를 사용한다는것은 많은것을 배워야 하고 클라우드 리소스를 제대로 알고 있어야 하며, 항상 최신기술을 따라야 한다는 것입니다.