Close

Infrastructure as Code

IaC(코드형 인프라)로 복잡한 인프라를 관리하는 방법

Ian Buchanan 얼굴 사진
Ian Buchanan

수석 솔루션 엔지니어


IaC(코드형 인프라)는 DevOps 소프트웨어 개발, 클라우드 인프라 리소스 관리 등의 모범 사례를 지원하는 IT 인프라 관리 프로세스입니다.

2000년대 중반에 하드웨어 가상화가 부상하면서 클라우드 인프라 호스팅이라는 새로운 기회가 생겨났습니다. 클라우드 호스팅 공급자는 동적 IaaS(서비스형 인프라) 플랫폼을 이용할 수 있도록 지원하기 시작했습니다. IaaS 플랫폼이 성장하고 더 복잡한 인프라 자산을 제공하기 시작하면서 기존 시스템 관리 역할의 복잡성도 커졌습니다. 복잡한 클라우드 인프라를 빠르게 구성하고 관리하는 방법을 찾는 것이 시급한 문제로 대두되었습니다.

IaC(코드형 인프라), 즉, 코드로 인프라를 모델링한다는 아이디어는 CI/CD의 성공으로 인해 한층 더 추진력을 얻었습니다. DevOps는 Git 리포지토리에 코드를 커밋한 다음 기능 브랜치와 풀리퀘스트 워크플로를 적용하는 방법이 얼마나 생산적인지를 입증했습니다. 이러한 워크플로가 소프트웨어 개발에 불러온 자동화는 클라우드 시스템 관리의 새로운 복잡성을 줄이는 데 도움이 되었습니다.

코드형 인프라란 무엇입니까?


코드형 인프라는 DevOps 소프트웨어 개발, 클라우드 인프라 리소스 관리 등의 모범 사례를 지원하는 IT 인프라 관리 프로세스입니다. 적용 가능한 인프라 리소스에는 가상 컴퓨터, 네트워크, 부하 분산 장치, 데이터베이스 및 기타 네트워크 애플리케이션 등이 있습니다.

IaC는 조직의 인프라 리소스를 텍스트 파일로 코드화해 주는 구성 관리 방식입니다. 인프라 파일은 Git과 같은 버전 제어 시스템에 커밋됩니다. 버전 제어 리포지토리를 사용하면 CI/CD의 기본 종속성인 기능 브랜치 및 풀리퀘스트 워크플로를 사용할 수 있습니다.

코드형 인프라는 클라우드 인프라 호스팅 플랫폼, 특히 IaaS 플랫폼의 등장 덕분에 가능해졌습니다. IaaS를 통해 온디맨드 프로비저닝은 물론, 인프라 구성 파일에 커밋된 속성에 대한 템플릿이 지정된 원격 API를 통해 클라우드 리소스를 요청할 수 있습니다. IaC의 자동화 기능은 구성 파일을 가져와 원격 IaaS API에 대해 실행할 수 있습니다.

팀이 인프라 구성을 버전 제어에 커밋한 후에는 인프라 변경 사항에 CI/CD 사례를 적용할 수 있습니다. 인프라 업데이트는 DevOps 워크플로를 따를 수 있습니다. 팀원이 구성 텍스트 파일 중 하나를 편집한 경우 풀리퀘스트 및 코드 검토 워크플로를 사용하여 편집한 내용의 정확성을 감사하고 확인할 수 있습니다. 또한 DevOps 지원 코드형 인프라 시스템은 자동 인프라 배포 및 롤백을 활용합니다.

관리자-클라우드 아이콘
관련 자료

IaaS(서비스형 인프라)

세 개의 고리 아이콘
솔루션 보기

Compass를 사용하여 컴포넌트 관리

코드형 인프라가 중요한 이유는 무엇입니까?


IaC는 “환경 드리프트” 문제를 해결하기 위해 발전했습니다. 클라우드 애플리케이션에는 일반적으로 릴리스 수명 주기 단계를 위한 별도의 배포 환경이 있습니다. 일반적으로 개발, 스테이징 및 프로덕션 환경이 있습니다. 해당 환경은 애플리케이션 서버, 부하 분산 장치 및 데이터베이스와 같이 네트워크로 연결된 리소스로 구성됩니다. 환경 드리프트는 서로 다른 환경 간의 인프라가 동기화되지 않을 때 발생합니다.

IaC가 없으면 인프라 관리가 무질서하고 취약해질 수 있습니다. 시스템 관리자는 원격 클라우드 공급자에 수동으로 연결하고 API 또는 웹 대시보드를 사용하여 새 하드웨어 및 리소스를 프로비저닝합니다. 수동 워크플로로는 애플리케이션 인프라를 종합적으로 확인할 수 없습니다. 관리자는 하나의 환경을 수동으로 변경하고 다른 환경을 변경하는 일을 잊어버릴 수 있습니다. 그러면 환경 드리프트가 일어납니다.

환경 드리프트는 비용이 많이 드는 비즈니스 낭비가 됩니다. 버그와 오류가 발생하는 이유는 팀이 스테이징 또는 개발 환경에 대해 빌드한 다음 배포 시 프로덕션 환경이 동기화되지 않음을 발견하기 때문입니다. 따라서 누락된 부분과 이유를 조사하려면 시간이 많이 걸립니다.

IaC 없이는 수동 인프라 관리 속도가 더뎌집니다. 환경 드리프트, 트래픽 급증 또는 기타 문제로 인해 인프라 변경이 필요하게 되면 시스템 관리자가 이에 대응하고 적응하는 데 시간이 얼마나 걸릴지 알 수 없습니다. 결국 중단과 고객 불만이 발생합니다. IaC를 사용하면 인프라가 구성 변경에 자동으로 적응하고 자동 확장 기능을 통해 트래픽 급증에 대응할 수 있습니다.

코드형 인프라는 수동 시스템 관리에 대한 더욱 강력한 감독 기능과 가시성을 제공합니다. 중앙 집중식 버전 제어 리포지토리에 커밋된 인프라 구성 파일을 사용하면 모든 팀원이 인프라 데이터를 보고 편집할 수 있습니다. 따라서 강력한 감사 기능을 사용할 수 있습니다. 예를 들어, 팀에서 PCI 컴플라이언스 감사를 받는 경우 인프라의 특정 부분에서 SSL 암호화를 사용하고 있는지 확인해야 합니다. IaC를 사용하면 SSL의 구성 방식을 빠르게 확인하고 코드를 실행하여 라이브 인프라가 구성 파일과 일치하는지 확인할 수 있습니다. 이를 통해 SSL이 사용되고 있는지 확인할 수 있습니다. 버전 제어 커밋 기록은 추가 또는 제거된 시점을 검토하는 로그 역할도 합니다.

코드형 인프라는 어떻게 작동합니까?


인프라 코드 이미지

코드형 인프라를 완벽하게 구현하려면 몇 가지 종속성이 필요합니다.

원격 액세스 가능한 호스팅 또는 IaaS 클라우드 호스팅 플랫폼

가장 중요한 종속성은 원격 액세스 가능한 호스팅입니다. 구성 관리 도구를 이용하려면 원격 호스트에 연결하고 수정해야 합니다. 원격 인프라가 자체 관리되는 경우, 팀은 구성 관리 도구에 액세스할 수 있는지 확인해야 합니다. IaaS 지원 클라우드 호스팅 플랫폼은 사용자가 온디맨드 방식으로 인프라 리소스를 자동으로 생성, 삭제 및 수정할 수 있도록 지원하는 API를 제공합니다. 구성 관리 도구에서 API에 액세스하여 작업을 추가로 자동화할 수도 있습니다. 인기 있는 IaaS 플랫폼에는 Digital Ocean, Amazon AWS, Microsoft Azure 등이 있습니다.

구성 관리 플랫폼

IaC를 완료하기 위해서는 다음으로 IaaS API에 연결하고 일반적인 작업을 자동화해 주는 도구 제품군이 필요합니다. 팀은 스크립트와 도구 세트를 만들 수 있습니다. 그러나 많은 작업과 향후 유지 보수가 필요하기 때문에 대체로 투자 대비 효과가 낮습니다. Terraform, Ansible, Salt Stack, Chef 등 이 문제를 해결해 주는 오픈 소스 구성 관리 플랫폼이 많이 있습니다.

버전 제어 시스템

구성 관리 플랫폼은 YAML과 같은 마크업 언어로 작성되어 사람과 기계가 읽을 수 있는 텍스트 파일을 사용하여 플랫폼이 실행할 작업 및 시퀀스를 선언합니다. 텍스트 파일은 애플리케이션 코드 파일처럼 취급되며 버전 제어 시스템 리포지토리에 저장할 수 있습니다. 버전 제어 시스템 리포지토리는 중앙 정보 출처 역할을 하며, 풀리퀘스트 및 코드 검토를 지원합니다. 가장 인기 있는 버전 제어 시스템은 Git입니다.

종속성이 있는 상태에서 개발자가 시스템에 새 애플리케이션 서비스를 추가하려고 하는 시나리오를 예로 들어 보겠습니다. 다음 시나리오는 IaC 워크플로를 보여 줍니다.

  1. 개발자는 구성 관리 플랫폼인 Terraform에서 YAML 구성 텍스트 파일을 편집합니다. 편집한 내용에 따라 새 호스팅 서버가 필요합니다.
  2. 개발자는 Git 리포지토리의 기능 브랜치에 편집 내용을 커밋합니다. 프로젝트의 Git 리포지토리는 Bitbucket에서 호스팅되므로, 개발자는 풀리퀘스트를 엽니다. 다른 팀원은 풀리퀘스트를 검토하고 새로운 인프라 변경 사항을 알게 됩니다. 팀원이 풀리퀘스트를 승인하면 개발자는 커밋을 리포지토리의 메인 브랜치에 병합합니다.
  3. 여기서 업데이트를 실행하려면 구성 플랫폼이 필요합니다. 업데이트는 개발자가 수동으로 트리거할 수 있습니다. 팀은 Bitbucket을 사용하고 있기 때문에 Bitbucket Pipelines에도 액세스할 수 있으며 이 단계를 파이프라인으로 자동화할 수 있습니다.
  4. 실행 시 Terraform은 팀의 IaaS와 상호 작용합니다. Terraform은 IaaS API에 대해 일련의 명령을 실행하여 예상되는 인프라 구성으로 IaaS를 최신 상태로 유지합니다.

결론...


IaC는 클라우드 IT 인프라 관리 자동화에 중점을 둔 매우 생산적인 구성 관리 방식입니다. IaC를 사용하면 프로젝트의 인프라 변경에 대한 CI/CD 자동화를 달성할 수 있습니다. IaC는 인프라 변경과 관련된 커뮤니케이션 및 투명성에 대한 다양하고 유용한 인사이트를 제공합니다. IaC에는 최신 호스팅 회사에서 제공하는 호스팅 플랫폼 및 자동화 도구와 같은 종속성 집합이 필요합니다.

Ian Buchanan
Ian Buchanan

Ian은 Java와 .NET 모두에 대한 폭 넓은 경험을 보유하고 있으며 대기업에서 애자일 방식의 전문가로 알려져 있습니다. 현재 그는 새롭게 부상하는 DevOps 문화와 지속적인 통합, 지속적인 제공 및 데이터 분석을 가능하게 하는 도구에 중점을 두고 있습니다. 자신의 경력에서 그는 라이프사이클의 모든 단계에서 엔터프라이즈 소프트웨어 개발 도구를 성공적으로 관리했습니다. 그는 생산성 개선과 탁월한 품질, 향상된 고객 만족으로 조직 차원의 프로세스를 개선했습니다. 그는 자체적인 방향과 자생적인 조직을 중시하는 다국적 팀을 구성했습니다. 언급하거나 코딩하지 않아도 Ian이 파서, 메타 프로그래밍 및 도메인별 언어를 열정으로 채우는 것을 볼 수 있습니다. @devpartisan로 Ian을 팔로우하세요.


이 문서 공유

여러분께 도움을 드릴 자료를 추천합니다.

이러한 리소스에 책갈피를 지정하여 DevOps 팀의 유형에 대해 알아보거나 Atlassian에서 DevOps에 대한 지속적인 업데이트를 확인하세요.

DevOps 일러스트레이션

Compass 커뮤니티

장애물 극복 일러스트레이션

자습서: 컴포넌트 만들기

맵 일러스트레이션

Compass 무료로 시작하기

DevOps 뉴스레터 신청

Thank you for signing up