본문 바로가기

DevOps/Ansible

[Ansible] IaC 개념

IaC개념

  • 코드를 통한 인프라 환경 배포 및 관리
  • 자동화 언어로 원하는 구성을 정의한다.

기존의 시스템 관리 방식은 편집기나 명령어를 이용해서 각각 세팅, 즉 수동관리를 해 왔었는데 한계가 있다. 특히 관리대상이 많아질수록 오타나 오류같은게 빈번하며 제한적이었다. 또한 일괄 구성이 힘들어 한번에 모든 시스템에 똑같은 설정을 해야한다. 한명이 관리하면 모르겠지만 여러명이 관리하게 되면 일괄적인 작업에 어려움이 생겼다.

 

이러한 문제점이 대두가 되어 자동화 방식을 필요로 하게 된 것이다.

IaC 특징

  • 인프라 환경의 규모 확대
  • AWS의 EC2와 같은 클라우드 환경의 출현 

-> 인스턴스에 서비스를 배포하는데 있어서 매번 새로 설정하는게 힘들기에 자동화가 필요하다. 내가 배포하는 시스템을 사용자들이 안정적으로 사용해야하므로 수동값으로 불안정한 것보다 안정적인게 필요함.

  • 서비스 방식의 변화
  • 반복적인 작업 요구

-> 하나의 로드 밸런서 안에서 똑같은 시스템을 적용해야하므로 필요하다.

  • 인프라에 대한 빠른 배포 및 버전 관리 필요

-> 사용자들이 점점 빠른 배포 및 버전 업을 원하다보니 쉬운 관리 방식이 필요하다. IaC가 그래서 필요하다

IaC 장점

  • 비용 및 시간 절감 : 하나하나 만드는 것 보다 하나를 설정해서 배포하면 되니 간단.
  • 오류 및 보안 정책 위반 등의 위험요인 제거 : 수동방식보다 오류가 훨씬 줄어듬.
  • 텍스트파일로 표현 시 버전 관리가 쉬움
  • 자동으로 빌드/리빌드 가능

스크립트와 IaC

  • 스크립트의 한계점
  • 할 수 있는 일이 제한적 (ex : if for) 와 같은 약속된 구문정도만 반복수행 정도이다 보니 조건이나 각 시스템별로 조건을 다르게 한다는지에 대한 작업에 대해 유연하지 못하다.
  • 약식 수행은 가능하나 구조적인 경우에는 복잡해진다.
  • 멱등성(Idempotence)의 부재 

멱등성이란?

한번 실행하던 열번, 스무번 실행하던 간에 결과가 항상 동일하다는 뜻이다. 하지만 스크립트는 멱등성이 존재하지 않는다. 실행할 때 마다 같은 명령어를 반복 실행하는 방법이다 보니 기존에 했던 방법이라면 오류가 발생하거나 값이 겹치거나 문제가 생겨 동작이 안되거나 또는 사용자를 추가하면 UID가 증가하여 설정이 달라져 문제가 발생한다. 단순 스크립트로는 한계가 있기에 IaC가 생긴것이다.

즉, 구조적이며 안정적이며 효율적인 코드를 약속해서 쓰기위해 IaC가 나타난것이다.