본문 바로가기

IaC

코드형 인프라(IaC)는 무엇인가?

반응형
Thumbnail

코드형 인프라(Infrastructure as Code, IaC)란 무엇일까요? 쉽게 말해 코드를 작성 및 실행하여 인프라를 생성, 배포, 수정, 정리하는 것을 말합니다. 오늘은 코드형 인프라는 무엇인지, 장/단점, 그리고 코드형 인프라 도구에는 어떤 것들이 있는지 알아보겠습니다.

 

코드형 인프라(IaC) 개요

코드형 인프라의 역사

시스템 관리자들은 1990년대부터 스크립트를 사용하여 인프라를 관리해 왔지만 IaC 관행은 2000년대 말까지 완전히 통합되지 않았다. 그리고 이때부터 데브옵스의 선구자 앤드류 클레이 세퍼, 셰프(Chef)의 공동 창업자 아담 제이콥, 퍼펫(Puppet)의 설립자 루크 케이니스 등이 이 용어를 사용하기 시작했다.

코드형 인프라란?

앞서 전달한 것 처럼 코드를 작성 및 실행하여 인프라를 생성, 배포, 수정, 정리하는 것을 말합니다. 즉, 수동 프로세스가 아닌 코드를 통해 인프라를 관리하고 프로비저닝(provisioning)하는 것을 코드형 인프라(Infrastructure as Code, IaC)라고 합니다.

코드형 인프라 장/단점?

장점

  • 일관성: 수동 구성 중에 자주 발생하는 오류를 줄일 수 있다. 또한 구성 드리프트(configuration drift)를 제거한다.
  • 비용 절감: 필요한 인력이 줄어들고 새 하드웨어를 구입할 필요가 없어 비용이 크게 절감된다.
  • 효율성: 시스템 구성, 유지 보수 및 관리가 간소화된다. 이를 통해 탄력적인 인프라를 구축할 수 있다.
  • 배포 속도 향상: 인프라를 기다리지 않고 애플리케이션을 구축할 수 있으며, 새로운 소프트웨어를 신속하게 출시할 수 있다.
  • 유효성 검증: 검증 수행, 자동화된 테스트, 정적 분석 프로그램에 코드를 전달하여 오류 발생 위험을 줄일 수 있다.

단점

  • 러닝 커브: 새로운 도구와 언어를 익히고 팀원들이 함께 협업하는 데 필요한 지식을 쌓는 데 시간이 걸릴 수 있다.
  • 복잡성 증가: 설정 및 배포 프로세스를 자동화할 수 있지만, 너무 복잡하게 작성된 코드는 유지보수와 협업을 어렵게 만들 수 있다.

코드형 인프라 종류

코드형 인프라 도구 범주

코드형 인프라 도구에는 다섯 가지 범주가 있습니다.

 

1. 애드훅 스크립트

애드훅 스크립트(Ad hoc script)는 특정 작업을 수행하기 위해 임시로 작성된 스크립트를 말한다.

소규모 일회성 작업에는 적합하지만, 장기적으로는 관리와 유지보수에 어려움을 준다.

예) 배시(Bash)

 

2. 구성 관리 도구

소프트웨어 및 시스템 구성 요소의 상태를 정의하고 유지하는 데 사용되는 도구입니다.

일관성을 유지하고 관리자가 자동화된 방식으로 시스템을 구성할 수 있도록 지원한다.

예) 셰프(Chef), 퍼핏(Puppet), 앤서블(Ansible), 솔트스택(SaltStack)

 

3. 서버 템플릿 도구

설정 및 의존성 있는 프로그램들을 특정 시점에 OS와 함께 '스냅숏(snapshot)'하여 템플릿 이미지화하는 것을 말한다.

예) 도커(Docker), 패커(Packer), 베이그런트(Vagrant)

 

4. 오케스트레이션 도구

여러 시스템, 서비스, 프로세스, 또는 작업 간에 효율적으로 상호 작용하도록 조정하고 관리하는 도구이다.

예) 쿠버네티스(Kubernetes), 도커 스웜(Docker Swarm), 메소스(Mesos)

 

5. 프로비전 도구

서버 인프라 자체를 생성(구성)하기 위한 도구로써 인프라에 관한 거의 모든 부분을 프로비저닝할 수 있다.

예) 테라폼(Terraform), 클라우드포메이션(CloudFormation), 오픈스택 히트(OpenStack Heat)

 

코드형 인프라 도구 비교

1. 구성 관리 vs 프로비저닝

둘은 명확하게 구분하기가 애매할 수 있다.

 

  • 구성 관리: 소프트웨어 및 시스템 구성 요소의 상태를 정의하고 유지하는 데 사용되는 도구
  • 예) 셰프, 퍼핏, 앤서블, 솔트스택
  • 프로비저닝: 서버 인프라 자체를 생성(구성)하기 위한 도구
  • 예) 테라폼, 클라우드포메이션, 오픈스택 히트

2. 가변 인프라 vs 불변 인프라

  • 가변 인프라: 서버를 수동으로 수정할 수 있다. 서버에 로그인하여 구성을 변경하고 패키지를 설치/수정할 수 있다.
  • 예) 셰프, 퍼핏, 앤서블, 솔트스택
  • 불변 인프라: 서버가 설치된 이후 절대 변경되지 않는 형태의 인프라 패러다임이다. 서버에 변경이 필요한 경우에는 아예 새로운 서버(이미지)를 구축한다.
  • 예) 테라폼, 도커, 패커

3. 절차적 언어 vs 선언적 언어

  • 절차적인 언어: 원하는 상태까지 코드가 단계적으로 실행되는 형태
  • 예) 셰프, 앤서블
  • 선언적인 언어: 최종적인 형태만 정의하면 알아서 실행되는 형태
  • 예) 테라폼, 클라우드포메이션, 퍼핏, 솔트스택, 오픈스택 히트

코드형 인프라 도구 표 (출처: 테라폼 업앤러닝)

참고자료

테라폼 업앤러닝

https://www.ciokorea.com/news/218904

https://www.hpe.com/kr/ko/what-is/infrastructure-as-code.html