[Terraform] 1. Terraform(테라폼)이란?
Notepad96
·2022. 9. 13. 15:38
1. 코드형 인프라(IaC)란?
Terraform에 관하여 말하기 전 우선 코드형 인프라(IaC)가 무엇인지 설명이 선행되어야 할 것 같다.
IaC(Infrastructure as Code)란 코드를 사용하여 인프라를 생성, 배포, 수정 등 인프라 관련 생성 및 관리 작업을 수행하는 것
그렇다면 굳이 인프라 관련 작업들까지 코드를 작성하여 관리를 해야 하는지 의문이 생기게 된다. 단순히 이유를 말하자면 코드로 관리함으로써 할 수 있는 게 많아지며 장점이 많기 때문이고, 이유를 알기 위해서는 IaC의 배경과 장점을 봐야 한다.
배경
현대의 와서는 여러 경쟁사들이 존재하며 경쟁에서 우위를 선점하기 위해서는 빠르게 새로운 것을 만들어 내고 불필요하다면 사라지는 환경이 되었다.
따라서 새로운 기능을 빠르게 개발하고 빠르게 서비스 제공을 할 수 있어야만 살아남을 수 있는 환경이 된 것이며, 이에 대응하여 개발하는 데 있어 Agile*, DevOps*와 같은 개념 혹은 방법론들이 나타나게 된다.
기존에 철저한 단계별 과정을 수행하여 개발하였던 것을 짧고 반복적인 사이클을 반복하여 개발을 하거나 코드를 배포하고 빌드하는 과정을 자동화함으로써 빠른 변화가 필요한 환경에 적응할 수 있게 된 것이다.
*Agile : 애자일 방법론은 소프트웨어 개발 방법에 있어서 아무런 계획이 없는 개발 방법과 계획이 지나치게 많은 개발 방법들 사이에서 타협점을 찾고자 하는 방법론이다.
*DevOps : 데브옵스(DevOps)는 소프트웨어의 개발(Development)과 운영(Operations)의 합성어로서, 소프트웨어 개발자와 정보기술 전문가 간의 소통, 협업 및 통합을 강조하는 개발 환경이나 문화를 말한다.
출처) 위키백과
그럼 이제 새로운 방법론들을 사용함으로써 빠르게 새로운 기능을 개발하고 서비스할 수 있어야 하는 요구사항을 충족시켰다 하여도 인프라적인 측면에서도 이에 맞게 변화할 필요가 생겨났다.
하지만 인프라 영역에서도 예전과는 다르게 인터넷의 발전으로 Cloud라는 서비스를 사용함으로써 물리적인 메모리나 디스크를 추가하거나 연결할 필요 없이 인터넷을 통하여 필요한 만큼만 돈을 지불하고 컴퓨터 리소스들을 사용할 수 있게 되었다.
따라서 인프라 영역에서도 추가적인 개발로 인해 발생하는 추가 컴퓨터 리소스 요구의 맞게 제공할 수 있는 방법이 생겨난 것이다. 이를 개발에 맞추어 빠르고 자동화하여 제공할 필요가 생겨난 것이고 이를 충족시키는 방법이 IaC(Infrastructure as Code)이며 인프라 영역 또한 코드로 관리함으로써 빠르게 인프라를 제공할 수 있게 된 것이다.
예를 들어 새롭게 추가할 기능의 테스트를 하기 위하여 테스트 환경이 추가적으로 필요하게 되었다. 이럴 때 기존 환경을 코드로 작성해놨다면 해당 환경을 약간의 코드 수정만으로 조금 스펙만 낮은 동일한 테스트 환경을 빠르게 배포하여 만들어내는 것이 가능하게 되는 것이다.
장점
● 배포 프로세스를 자동화하여 일관되고 반복적으로 빠르게 배포를 진행할 수 있어 안정성과 속도과 향상된다.
● 필요하다면 인프라들을 모듈화함으로써 이후 동일한 인프라가 필요할 경우 재사용할 수 있어 추가적인 검증이 불필요하게 된다.
● 코드로 작성하여 배포하고 관리하기 때문에 코드를 봄으로써 누구나 동일한 내용을 읽어 인프라를 관리할 수 있으며, 이에 따라서 특정 사람에게 의존성이 줄어들게 된다.
● 코드로 작성하기 때문에 소스 파일을 업데이트할 때마다 버전으로 관리가 가능하여 문제가 발생하였을 때도 문제가 발생하기 이전 상황으로 빠르게 되돌리는 것이 가능해진다.
● Etc.
핵심은 반복적인 작업에 대하여 틀을 만들어 놓음으로써 정확성과 일관성을 높이며 빠른 속도로 만들어 내는 것이 가능해진다. 이 틀을 변경해야 할 때도 기존 틀에서 변경된 부분만 변경하여 새로운 틀을 만들어 사용하면 되기 때문에 빠르게 원하는 부분만 변경이 가능하며, 문제가 있을 경우 예전에 사용하던 틀을 그대로 사용하면 되기 때문에 안정성과 속도를 향상할 수 있게 된다.
2. Terraform(테라폼)이란?
앞서 설명한 IaC 도구에는 여러 가지가 있으며 셰프(Chef), 퍼핏(Puppet), Ansible(앤서블), Terraform(테라폼) 등 여러 가지 도구들이 있다.
● 이 중 Terraform의 관하여 설명하자면 Terraform은 해시 코프(HashiCorp) 사가 개발한 오픈 소스 도구로서 오픈 소스인 만큼 대규모의 커뮤니티 환경이 구성되어 있으며, 이에 따라서 빠르게 변화하고 발전하고 있습니다.
● 또한 AWS, Azure, GCP 등 다양한 퍼블릭 클라우드의 대한 공급자를 지원하여 API를 호출하여 리소스를 생성할 수 있게 합니다. 따라서 정확히 동일한 코드라고 할 수는 없지만 유사한 코드를 작성함으로써 다른 플랫폼의 유사한 리소스들을 배포 가능하도록 합니다.
● Terraform은 프로비전 도구로서 불변 인프라를 제공합니다. 여기서 불변이라는 것은 새로운 이미지를 배포할 때 '변경'보다는 '새로 생성'이 되는 것이다.
예를 들어 셰프, 퍼핏과 같은 Configuration 도구로 소프트웨어를 추가하도록 하였을 때 기존 서버에서 소프트웨어 추가 작업이 발생하게 된다. 하지만 이러한 작업이 쌓일수록 Configuration에 있어 버그가 발생할 수 있다.
하지만 Terraform의 경우 새로운 이미지로 새로 배포를 하는 것이기 때문에 이러한 문제를 방지할 수 있는 것이다.
● Terraform은 선언적 언어(Declarative Language) 방식의 코드로서 선언적 언어는 최종 상태를 달성하기 위해 단계별로 지정하는 절차적 방식과 다르게 최종 상태를 어떻게 구현할 것인지 작성하는 것이다.
따라서 Terraform은 최종 상태를 어떻게 구현할 것인지를 작성하는 것이므로 마지막 상태 정보를 갖고 있다. 그래서 업데이트할 경우 업데이트 사항과 마지막 상태를 비교하여 업데이트된 내용만 적용하도록 동작이 처리되어 더욱 효율적으로 동작한다고 할 수 있다.
'Terraform' 카테고리의 다른 글
[Terraform] 3. Resource Group 생성 (0) | 2022.09.17 |
---|---|
[Terraform] 2. Terraform 환경 구성(Windows, VS Code, Azure) (0) | 2022.09.14 |