티스토리 뷰
💡 본 글은 원문을 번역 및 정리한 글입니다.
IaC (Infrastructure as Code)
배경
인프라의 규모가 커지면서, 몇 개의 대규모 인스턴스가 아니라 여러 개의 소규모 인스턴스를 동시에 관리하게 되었다. 이러한 특성으로 인프라를 유지하고 구성하는 것이 중요해지면서 코드로서의 인프라 즉, IaC (Infrastructure as Code) 가 나오게 되었다.
정의
IaC (Infrastructure as Code) 는 인프라를 코드화하고 유지하기 위한 소프트웨어 기반 IT 방법론이다. 별도의 하드웨어나 운영체제를 일일이 구성하는 것 대신 코드로서 인프라를 만들어 개발자와 운영 팀이 리소스를 자동으로 관리, 모니터링 및 프로비저닝을 할 수 있다. 코드로서 인프라는 프로그래밍이 가능한 인프라 또는 소프트웨어로 정의된 인프라 라고 한다.
코드로서 인프라는 IT 절차를 자동화하는데 사용되는 프로그래밍 스크립트와 유사한 개념으로 볼 수 있는데, 스크립트는 각기 다른 서버에서 반복적으로 실행되는 태스크를 자동화 한다면, IaC는 다양한 프로비저닝 및 배포 활동을 구축하기 위해 코드를 사용한다.
코드 기반 인프라 자동화는 소프트웨어 개발 프로세스와 비슷하다. 이 프로세스에서는 Production에 승인될 때까지 개발팀이 코드 버전을 엄격하게 모니터링하고 테스트를 반복 수행하며, 배포를 제한한다.
작동 방법
IaC로 immutable infrastructure(변하지 않는 인프라)라는 개념이 인기를 얻기 시작했다. 불변의 인프라라는 것은 현재의 인프라를 계속 수정하고 업데이트하는 대신, 애플리케이션이 바뀔 때마다 수정사항이 반영된 공통 이미지로 구성된 새 이미지로 대체되는 것을 말한다.
IaC 구성 파일은 재사용 가능한 코드로 작성되고 컴파일되어 메인 레포지토리에 저장되는 경우가 많다. 로컬 또는 Github 등에 보관할 수 있어 IT 운영 및 개발 팀이 쉽게 접근할 수 있다.
원칙
1) 시스템을 쉽게 복제할 수 있음
인프라의 모든 부분을 빠르고 안정적으로 재구축할 수 있어야 한다. 즉, 적은 노력으로 새로운 서비스와 환경을 프로비저닝할 수 있도록 하는 것이다.
2) 일회용 시스템
변경사항을 적절하게 관리할 수 있다면, 실행 중인 인프라의 장애에 대한 서비스 복원력을 높이고 업그레이드 및 수정작업을 쉽게 수행할 수 있다. 리소스를 쉽게 생성, 파괴, 교체, 크기 조정 및 마이그레이션하여 동적으로 인프라를 구성한다. 시간이 지나면서 인프라도 점차 변화할 것이라는 가정 하에 시스템을 구축해야 한다.
3) 일관된 시스템
앞서 말한 특징 등으로 간단하게 동일한 인프라를 여러 개 만들 수 있다.
4) 반복 가능한 프로세스
인프라의 모든 작업들은 재현 가능해야 한다.
5) 항상 변화하는 디자인
초기에 아무리 광범위한 요구사항을 포괄한 상세한 설계를 한다해도 시스템을 실제로 사용하면서 요구사항은 지속적으로 변할 수 밖에 없다. 기존 시스템을 계속 수정하고 변경하는 건 복잡하고 비용이 많이 들기 때문에 변화에 더 잘 대처할 수 있어야 한다.
장점
속도
스크립트를 실행하는 것만으로 인프라를 구축할 수 있도록 하여 프로세스 자동화에 상대적으로 짧은 시간이 걸린다. 이 작업으로 개발에서 QA, Production 까지 전체 개발 라이프사이크를 보다 효율적으로 수행할 수 있도록 한다.
책임
Infrastructure as Code 구성 파일은 소스 코드 파일처럼 버전을 지정할 수 있어 투명하게 변화를 관리할 수 있다. 버전을 관리하면서 뚜렷하고 명확한 책임을 확립하는데 도움을 준다.
일관성
수동으로 인프라를 처리하면서 발생할 수 있는 위험이 줄어든다. 즉, 일관되지 않은 오류나 누락이 없어 불필요한 문제가 줄어든다.
비용 절감 및 ROI 향상
IaC를 통해 기업은 인프라 공급 및 확장에 필요한 시간, 노력 및 전문 인력을 대폭 절감하여 클라우드 컴퓨팅 기반의 비용 구조를 최대한 활용할 수 있다. 개발자들은 배포 자체보다 좀더 필요한 솔루션 설계에 집중할 수 있습니다.
이탈 방지 보호
IaC가 없으면 특정 엔지니어에게 프로비저닝을 할당하여 생산을 극대화하는 경우가 많다. 하지만, 이 경우 해당 담당자가 퇴사하면 다른 사람이 일일이 프로세스를 재구성해야 하는데 IaC는 이러한 문제를 줄여준다.
DevOps와의 Alignment
코드로 인프라가 작성되기 때문에 애플리케이션의 CI / CD 파이프라인에서 동일한 버전 제어, 테스트 자동화 및 기타 단계를 수행할 수 있다. IaC를 컨테이너와 혼합하면 애플리케이션을 인프라와 쉽게 분리할 수 있기 때문에 테스트, 프로덕션 등 다양한 환경을 만들 수 있다.
결론
DevOps는 코드로서의 인프라스트럭처에 크게 의존한다. IaC는 클라우드 컴퓨팅의 잠재력을 최대한 보여주고, 수동 인프라 관리와 관련된 오류를 최소화하며, 소프트웨어 개발 라이프사이클의 민첩성을 향상시킬 수 있다.
참고자료
'CS > Cloud, Intra' 카테고리의 다른 글
[k8s] 쿠버네티스 (Kubernetes) 이해하기 - 배경 및 특징 (0) | 2023.06.20 |
---|---|
[EC2] ssh 를 사용하여 Linux EC2 인스턴스 접속 시 에러 : Permissions 0664 for '.pem' are too open. (0) | 2022.08.22 |
[AWS] 그림으로 이해하는 AWS 구조와 기술 - 1장. AWS 기초, 클라우드 시장 (0) | 2022.08.07 |