데브옵스/DevOps

IaC, 코드로 인프라 관리하기

룰루르루 2025. 3. 8. 21:36

 

안녕하세요~ IT의 아는 것을 넓혀가는 룰루르루입니다!
오늘은 "IT 인프라를 코드로 정의하는 방식, IaC"에 대해 정리해보았습니다.
과거 방식과 비교하면서, IaC가 왜 중요한지 하나씩 알아보겠습니다!!
혹시 잘못된 정보가 있거나 보완할 점이 있다면 댓글로 알려주시면 감사하겠습니다! 😊

 


IaC(Infrastructure as Code)란?

수동 프로세스 및 설정 대신 코드를 사용하여 컴퓨팅 인프라를 프로비저닝하는 것을 의미
시스템이 동작할 인프라 아키텍처(서버, 네트워킹, 운영 체제, 스토리지 등의 리소스)와 그 작동 방식을 구성 파일로 정의해 가상화된 리소스를 제어하는 방식

🎯 IaC의 핵심 개념

코드로 인프라를 정의 (YAML, JSON, HCL 등)
자동화 도구를 활용해 빠르고 일관된 배포 가능
서버, 네트워크, 스토리지를 포함한 인프라 전체 관리 가능


🏗️ 기존 인프라 관리 방식은 어땠을까요?

모든 애플리케이션 환경에는 운영 체제, 데이터베이스 연결, 스토리지 같은 다양한 인프라 구성 요소가 필요합니다.

하지만 과거에는 이를 설정하는 방식이 상당히 번거로웠습니다.

 

1️⃣ 스크립트 및 수동 프로세스

  • 인프라 변경 사항을 문서로 정리하여 관리
  • 프로비저닝은 운영자가 직접 수행하고, 구성 과정은 스크립트를 활용
  • 여전히 자동화되지 않아 반복 작업이 많고, 휴먼 에러가 발생할 가능성이 존재

2️⃣ 가상화 기반 인프라

  • 하이퍼바이저(VMware, KVM 등)를 이용해 서버 가상화
  • 템플릿 이미지, 스냅샷을 활용하여 운영 환경을 쉽게 복제
  • 이미지 변경 시 수작업이 필요하고, 일부 구성 과정은 역시 수동 설정이 필요

과거에는 이런 방식의 작업에도 관리해야 할 인프라가 적었기 때문에 괜찮았지만, 흔히 말하는 4차 산업 혁명 이후에는 다뤄야 할 데이터도 많아졌고, 그에 따라 관리해야 할 인프라의 구성 요소도 증가하고 복잡해졌습니다.

즉, 빠르게 변화하는 환경 속에서 기존의 전문 인력들이 모든 인프라를 수동으로 관리하기에는 어려움이 있었고, 효율적인 관리 방법이 필요했습니다.


🌟 IaC 도입의 이점은 무엇인가요?

💰 비용 절감 및 빠른 복제

  • 동일한 코드로 여러 환경을 동일하게 재현 가능
  • 필요할 때만 리소스를 생성하여 비용 절감
  • 인프라 구성의 자동화는 개발자가 인프라를 기다리거나, 운영자가 구성하고 관리하는 시간 비용도 절감한다.
    -> 인프라를 구성하는 코드만 이해할 수 있으면 개발자도 인프라를 구성, 관리 할 수 있게 되었다.

🛠️ 구성 오류 감소 및 버전 관리

  • 사람이 직접 설정하는 대신 코드 기반으로 관리하여 실수 방지
  • 버전 관리 시스템(Git 등)과 결합하여 구성 변경 내역 추적 가능
  • 버전 관리를 통해 업데이트 이후 오류가 있는 경우 안정적인 구성 파일로 롤백하여 신속한 해결이 가능하다.

🔥 IaC 도구의 동작 방식

📌 선언적(Declarative) 방식

  • 사용자가 최종 상태를 정의하면 IaC 도구는 자동으로 적용
  • "이렇게 구성되어 있어야 한다"
  • 예) Terraform, CloudFormation

📌 명령적(Imperative) 방식

  • 사용자가 인프라의 리소스와 상태를 정의하면 IaC 도구는 상태에 맞는 단계를 하나씩 실행
  • "이 단계, 이 상태일때 순서대로 실행하라"
  • 예) Ansible, Chef, Puppet

🛠️ IaC 도구 비교: Terraform vs Ansible

Terraform과 Ansible은 DevOps에서 가장 많이 언급되는 IaC 도구들입니다.

IaC 도구는 목적에 따라 크게 두 가지로 나눌 수도 있는데, 마침 두 도구가 대표적인 예입니다.

  • 인프라를 프로비저닝하고 생성하기 위한 도구인 구성 조정 도구 또는 배포(Provisioning) 도
  • 프로비저닝 된 인프라의 소프트웨어와 시스템을 구성하고 관리하기 위한 도구인 구성 관리 도구
비교 항목 Terraform Ansible
관리 방식 선언적 절차적 (플레이북)
주요 목적 AWS, Azure, GCP 등 클라우드 환경의 인프라 배포 프로비저닝 된 서버에 대한 구성 자동화 및 설정 관리
상태 관리 상태 파일(State File) 을 이용한 유지 상태 관리 없음

 

물론, 프로비저닝 용도의 도구라 환경 구성을 못하거나, 구성 관리 도구라 프로비저닝을 못하는 것은 아닙니다.

예를들어 Ansible의 모듈 중에는 aws의 인프라를 프로비저닝 할 수 있는 amazon.aws 모듈이 존재합니다.

하지만 일반적으로 인프라를 프로비저닝 하는 경우, 상태 파일로 정의된 인프라와의 차이를 명확히 알 수 있는 선언적 방식을 많이 사용합니다.


DevOps에서의 IaC는 핵심적인 역할을 수행합니다.

IaC와 CI/CD 파이프라인과 결합해 어플리케이션 변경과 동시에 인프라 변경이 이루어지거나, 개발/테스트/운영 환경을 동일하게 구성해 일관성 있는 인프라 환경을 보장할 수 있습니다.

 

따라서 최신 IT 환경에서는 개발자에게도 코드를 통해 어떤 인프라가 구성될 것인지에 대한 이해와 필요한 인프라를 코드로 정의할 수 있는 능력이 요구됩니다.

 

다음 포스트에서는 IaC의 대표 도구인 Terraform과 Ansible에 대한 소개를 다뤄보겠습니다!

감사합니다~~


 

 

코드형 인프라란?- IaC 설명 - AWS

코드형 인프라(IaC)는 수동 프로세스 및 설정 대신 코드를 사용하여 컴퓨팅 인프라를 프로비저닝하고 지원하는 기능입니다. 모든 애플리케이션 환경에는 운영 체제, 데이터베이스 연결, 스토리

aws.amazon.com

 

코드형 인프라(IaC)란? 개념 및 인프라 프로비저닝 자동화 방법

코드형 인프라(Infrastructure as Code, IaC)란 수동 프로세스가 아닌 코드를 통해 인프라를 관리하고 프로비저닝하는 것을 뜻합니다. 사용 방법 및 장단점을 살펴 봅니다.

www.redhat.com

 

 

코드형 인프라(IaC)란? | 용어 해설

코드형 인프라(IaC)는 기업이 코드를 통해 IT 인프라 리소스를 빠르게 관리 및 구축하고, 일관성 개선 및 수동 프로세스 오류 감소의 효과를 얻는 데 도움이 됩니다. | HPE 대한민국

www.hpe.com

 

 

 

Terraform이란 무엇인가요? | IBM

Terraform은 프로그래머가 인프라를 안전하고 효율적으로 구축, 변경 및 버전 지정할 수 있는 도구입니다.

www.ibm.com

 

 

Ansible의 핵심 개념과 기본 기능을 효율적으로 학습하는 방법

Ansible은 IT 프로비저닝 및 구성 관리 등을 자동화하는 데 사용됩니다. 이 튜토리얼에서 Ansible 기본 개념을 배우고, 자동화 도구가 어떻게 작동하는지를 살펴보세요.

www.redhat.com