IaC(Infrastructure as Code)

IaC 개요

cwchoiit 2024. 3. 5. 09:56
728x90
반응형
SMALL
728x90
SMALL

 

IaC (Instrastructure as Code)

네트워크, 로드밸런서, 저장소, 서버 등의 인프라 자원을 사람의 손으로 수동 설정이 아닌 코드를 이용하여 프로비저닝하고 관리하는 것을 IaC라고 한다. 대표적인 IaC 도구로 Terraform, CloudFormation, Pulumi, Azure ARM Template 등이 있다.

 

혼동을 주는 개념의 형상 관리라는 개념이 있다.

형상 관리 (Configuration Management)

서버 운영체제 상에 필요한 소프트웨어를 설치하고 원하는 설정으로 관리하는 것(예: 리눅스 기반 운영체제 위에 Nginx를 설치하고 프록시를 세워 웹 서버를 띄우고 웹 서버를 띄우기 위해 필요한 패키지들을 설치하고 관리하는 과정)을 말하는데 이를 코드로 작업하게 되면 Configuration as Code 라고도 불린다. 대표적인 형상 관리 도구로 Ansible, Puppet, Chef, Salt Stack 등이 있다.

 

이 두개의 차이점과 올바르게 바라보는 시선은..

정확히 이 두 개는 뭐가 다른걸까? IaC 도구도 형상 관리에 기여하고 반대도 마찬가지인데 왜 이런 다른 언어로 표현될까?

간단하게 말하자면, 도구가 어떤것을 해결하기 위해 만들어졌냐에 따라 달라진다. 예를 들어, 형상 관리 도구인 Ansible은 운영체제 상에 필요한 패키지들을 설치하고 필요한 설정들을 관리하기 위해 만들어진 도구이다. IaC 도구인 Terraform은 인프라 관리를 코드로 하기 위해 나온 도구이다. 그러나 시간이 지나면서 Terraform이 지원하는 기능이 점점 많아지고 그 기능이 형상 관리 도구가 가지는 기능까지 포함하게 되면서 혼동이 일어나게 됐다. 반대로 Ansible도 마찬가지이다. 

 

그래서, "이 두개의 다른 도구가 가장 핵심적으로 다루는 도메인이 어떤 것인가?"에 초점을 두면 될 것 같다.

인프라 관리에 가장 최적화 된 도구는 Ansible이 아닌 Terraform이다. 형상 관리에 대한 문제를 가장 잘 해결할 수 있는 도구는 Ansible이다. 그래서 하나의 도구로 모든 문제를 해결하는 All-in-One이 아니라 각 도메인 별로 해결할 수 있는 도구를 잘 선택해서 활용하는 게 중요하다.

 

코드로 관리한다는 것은

사람이 수동으로 처리하는 것을 코드로 작성하여 관리한다는 것이고 이는 휴먼 에러 방지, 재사용성, 일관성을 높인다.

이런 코드로 관리함은 또 하나의 파생적 장점을 가져다 주는데 소프트웨어 개발처럼 Git과 같은 버전 관리 시스템을 활용할 수 있게 된다. 이는 코드 리뷰, 변경 내용 추적, 버전 관리, 협업을 할 수 있게 해준다.

 

이렇게 코드로 관리하고 설정하는 것을 두가지 형태로 나눌 수 있는데 선언형 설정(Declarative Configuration)과 절차형 설정(Imperative Configuration)이다. 선언형 설정은 특정 상태에 어떤 작업을 지정하고 어떤 작업은 수행하지 않는 선언을 하므로써 설정을 하는 것이고 절차형 설정은 순차적으로 명령어를 수행한다는 것과 같은데 예를 들면 리눅스 기반 운영체제 서버에 들어가고 패키지를 업데이트하고 원하는 패키지를 설치하고 등등이 있다.

 

이러한 개념을 토대로 이제 Terraform과 Ansible에 대한 공부를 시작해보자.

 

728x90
반응형
LIST

'IaC(Infrastructure as Code)' 카테고리의 다른 글

AWS + Terraform (Module)  (0) 2024.03.06
AWS + Terraform  (2) 2024.03.05
Terraform 소개 및 간단하게 다루어보기  (0) 2024.03.05
패커(Packer), Ansible 설치 및 설정  (0) 2024.03.05
Terraform 설치 및 설정하기  (2) 2024.03.05