[IaC] 가변적, 불변적 인프라스트럭처와 Terraform 상태유지

BoongDev·2023년 5월 12일
0

IaC

목록 보기
1/1

Immutable Infrastructure (불변적 인프라스트럭처)

불변적 인프라스트럭처는 애완동물과 가축에 대한 비유로 자주 설명 합니다.

애완동물은 이름을 붙이며, 아프면 병원에 데려가고 가족처럼 보살펴줍니다.

하지만 가축은 이름이 아닌 태그를 붙이고, 전염병이 있을 경우에는 처분하게 됩니다.

불변적 인프라스트럭처의 정의는 서버가 설치된 이후 절대 변경되지 않는 형태의 인프라다.

여기서 수정은 기존의 서버를 제거하고 새롭게 만드는 것을 의미

멱등성의 법칙이 적용된다.

  • 멱등성 법칙 : 같은 작업을 여러 번 해도 결과가 동일하다. 한번 설정된 서버는 수정 없이 파기되므로 멱등성을 보장한다.

특징

  • 각 서버의 버전은 서로 독립적이며 두 가지 버전을 실행할 수 없다
  • 변경이 필요할 때 새 버전의 서버를 생성하기 때문에 버전 문제를 추적이 가능하다.
  • 각 서버의 구성이 일관되기 때문에 다른 서버를 테스트하고 롤아웃하기 쉽다
  • 서버가 동일하게 유지되므로 예측 가능성을 높일 수 있다.
  • 클라우드 기술과 같은 상호 의존적인 환경에 적합하다

단점

  • 데이터 저장소를 로컬 디스크에 복사하지 않고 외부화해야 한다.
  • 기존 서버는 수정할 수 없어 문제 발생 시, 동일 구성의 서버에 대해 점검이 필요하다.

Mutable Infrastructure (가변적 인프라스트럭처)

웹 서버를 만들고 기존의 변경 가능한 인프라에 배포했을 경우, 문제 발생시 서버를 쉽게 변경할 수 있다. 기존 데이터를 새 시스템으로 옮길 필요없이 기존 버전에 변경 사항을 적용한다.

특징

  • 변경 필요시 처음부터 서버를 구축할 필요가 없다.
  • 개별 서버에 대한 업데이트를 롤 아웃하여 프로세스 업데이트를 더 빠르게 할 수 있다.
  • 각 서버를 개별 수준에서 이해할 수 있기 때문에 문제를 진단하기 쉽다.

단점

  • 각 서버의 구성이 고유하기 때문에 각 서버를 진단, 관리하는 것이 더 어려워진다. (Configure Draft)
  • 서버에 대한 변경사항이 문서화되지 않기 때문에 추적이 어렵고 진단이 불가능하다.
  • DNS 오류, 네트워크 연결 불량과 같은 여러 이유로 업데이트가 실패할 수 있다
  • 업데이트 추적 문제로 디버깅에 시간이 많이 걸린다. 문제에 대한 이해도 없이 여러 버전의 업데이트로 끝날 수 있다.

차이

  • 불변적 인프라는 자동 배포를 지원한다.
    • 이 유형의 인프라는 주로 가상화를 중심으로 구축되기 때문에, 하드웨어와 소프트웨어 프로비저닝 및 디프로비저닝에 대해 걱정할 필요가 없다
  • 클라우드에서는 리소스 생성을 위한 모든 프로세스를 문서화할 수 있다
  • 데브옵스는 종속성을 제한해야 시간이 절약된다.
    • 자동화된 테스트 및 배포를 지원하는 파이프라인을 생성할 때 수동 검증은 시간이 많이 소요되므로 새로운 어플리케이션을 더 빨리 시작하는 것을 방해한다. 변경할 수 없는 인프라를 사용하여 시나리오를 재현하고 자동으로 재해복구도 가능하다.

불변적 인프라는 장점으로 인프라의 안정성과 신뢰성이 향상되며, 변동성이 줄어들어 관리 및 유지보수가 용이해집니다. 또한, 인프라를 버전 관리하고 롤백이 가능하게 되므로 실수로 발생한 문제를 빠르게 수정할 수 있습니다.


Terraform 상태유지

  1. Terraform 코드 작성: Terraform을 사용하여 인프라를 정의하는 코드를 작성합니다. 이 코드는 실제 인프라 구성을 선언적으로 기술하며, 원하는 상태를 나타냅니다.
  2. Terraform 초기화: terraform init 명령을 사용하여 Terraform 작업을 위한 초기화를 수행합니다. terraform init 명령은 Terraform 프로젝트를 초기화하고 필요한 백엔드 구성 및 모듈 등의 의존성을 설정합니다.
  3. 계획 수립: terraform plan 명령을 사용하여 Terraform 코드를 분석하고 변경 사항을 예측적으로 계획합니다. 이 단계에서 Terraform은 기존 인프라 상태와 코드의 상태를 비교하고 필요한 변경 사항을 탐지합니다.
  4. 변경 사항 적용: terraform apply 명령을 사용하여 Terraform 코드에 정의된 변경 사항을 실제 인프라에 적용합니다. Terraform은 변경 사항을 적용하기 전에 변경 내용을 사용자에게 미리 알리며, 사용자의 승인을 받습니다.
  5. 상태 관리: Terraform은 인프라의 상태를 추적하고 관리합니다. 인프라 상태 파일에는 현재 인프라 구성이 기록되며, 다음 실행에서 변경 사항을 탐지하고 적용하는 데 사용됩니다.

이러한 과정을 통해 Terraform은 선언적인 코드를 사용하여 인프라의 최신 상태를 유지하고, 변경이 필요한 경우 변경 사항을 감지하고 적용하여 인프라를 업데이트합니다.

profile
욕심 많은 주니어 개발자입니다.

0개의 댓글