코드로서의 인프라 – 무엇이 존재하고 무엇이 그렇지 않은지 원칙
게시 됨: 2020-04-23전통적으로 조직은 IT 인프라를 설정하기 위해 항상 수동 기술을 사용했습니다. 이것은 아주 오랫동안 계속되어 왔습니다. 몇 년 전까지만 해도 자동화가 도입되어 일을 더 쉽고, 효율적이며, 정확하게 만들었습니다. 그 전에는 서버 랙킹 및 스태킹과 관련된 작업을 사람이 수행했습니다.
씬뿐만 아니라 하드웨어도 호스팅해야 하는 애플리케이션과 이를 위해 사용되는 OS의 요구 사항 및 사양에 맞춰 수동으로 구성했습니다. 하드웨어에 애플리케이션을 배포하여 작업이 완료되었습니다. 이 단계까지 애플리케이션을 시작할 수 없습니다.
목차
인프라를 설정하는 프로세스는 종종 길고 복잡했습니다.
모든 일이 예정된 시간과 계획대로 진행되기 위해서는 제대로 관리해야 할 일이 많았다. 아무 것도 우연에 맡기지 않고 적절하게 처리되도록 하기 위해 극복해야 할 과제가 있었습니다. 먼저 필요한 하드웨어를 찾는 것이 중요했습니다. 그리고 제조사에 지금 재고가 없으면 아무것도 할 수 없습니다. 올바른 하드웨어를 구입하는 데 몇 달이 걸리는 경우가 많았습니다. 특정 사양에 맞춘 제품은 제조업체의 생산 시설에서 나오는 데 더 많은 시간이 걸렸습니다.
다양한 업무를 수행할 적임자를 고용하는 것도 매우 중요하면서도 동시에 매우 지루한 일이었습니다. 인프라의 물리적 설정을 위해 네트워크 엔지니어가 필요했습니다. 이것은 하드웨어의 전체 설정 및 유지 관리 작업 중 하나일 뿐입니다. 이 모든 것이 간접비와 관리 비용에 크게 기여했습니다. 이건 아니었어요.
이 하드웨어를 저장할 데이터 센터를 구축하려면 공간이 필요합니다. 데이터 센터에는 유지 관리가 필요합니다. 따라서 HVAC, 전기, 유지 보수 및 보안의 형태로 비용이 발생했습니다. 일반적으로 애플리케이션을 확장하고 높은 트래픽을 원활하게 처리하는 데 많은 시간이 걸렸습니다.
기업은 프로세스를 설정하는 동안 많은 어려움에 직면했습니다.
하드웨어 설정 프로세스는 계속해서 시간이 많이 소요되는 프로세스임을 기억하십시오. 과거에는 애플리케이션을 실행하는 데 사용된 하드웨어가 작동을 시작하는 데 걸리는 시간으로 인해 최적의 성능을 발휘할 수 있는 애플리케이션이 많지 않았습니다. 이것은 많은 기업들이 원하는 방식으로 고객에게 서비스를 제공할 수 없었고 그들이 상상했던 기간 내에 제품과 서비스를 출시할 수 없었기 때문에 좋은 징조가 아니었습니다.

이러한 회사는 하드웨어 설정이 느려서 발생하는 트래픽 급증을 처리하기 위해 더 많은 서버 사용을 프로비저닝해야 하는 경우가 있었습니다. 이것은 이들 서버의 대부분이 대부분의 시간 동안 할 일이 별로 없다는 것을 의미했습니다. 그러나 전체 용량에 사용되지 않은 서버를 유지 관리하는 비용은 완전히 사용되지 않았다고 해서 내려간 것이 아닙니다.
이제 앞에서 언급했듯이 하드웨어가 수동으로 배포되므로 설정이 일관되지 않을 가능성이 상당히 높습니다. 이것은 종종 응용 프로그램에 잘 작동하지 않는 불일치로 이어졌습니다.
클라우드 컴퓨팅 소개
클라우드 컴퓨팅은 전부는 아니지만 위에서 언급한 대부분의 문제를 처리할 수 있었습니다. 이제 하드웨어를 랙에 쌓고 쌓을 필요가 없습니다. 하드웨어 수동 설정과 관련된 비용은 더 이상 존재하지 않습니다. 또한 오늘날 현실 세계에는 문제를 해결하는 데 도움이 되는 많은 클라우드 컴퓨팅 응용 프로그램이 있습니다. 이제 데이터베이스, 서버 및 기타 인프라를 쉽게 회전할 수 있습니다.
애플리케이션의 가용성과 확장성에 관해서는 문제가 없습니다. 그러나 아직 한 가지 문제가 남아 있습니다. 클라우드 컴퓨팅을 위한 인프라를 수동으로 설정하는 것과 관련된 구성 일관성을 유지하는 문제는 여전히 존재합니다. 여기서 IaC(Infrastructure as Code)가 등장합니다.
코드로서의 인프라란 무엇입니까?
IaC 또는 IaC로서의 인프라는 네트워크, 연결 토폴로지, 가상 머신 등을 포함하여 클라우드 인프라의 다양한 측면을 관리하기 위해 설명 모델을 사용하는 것입니다. 위에서 언급한 설명 모델의 버전은 DevOps 팀에서 소스 코드에서 사용하는 버전과 동일합니다.
IaC 모델은 동일한 소스 코드를 사용하여 동일한 바이너리를 생성할 수 있다는 DevOps 원칙에 따라 작동합니다. IaC가 적용될 때마다 동일한 환경이 생성됩니다. IaC는 중요한 DevOps 기술로 간주됩니다. 원하는 결과를 달성하기 위해 지속적인 전달과 결합됩니다.
IaC는 일회성 스크립트를 사용하거나 인프라를 수정하기 위해 구성을 변경해야 하는 요구 사항을 없애줍니다. 대신 코드 개발에 사용되는 동일한 구조와 규칙을 통해 운영 인프라를 관리합니다.
목표는 시스템 엔지니어, 관리자 및 기타 운영자가 코드 개발 단계에서 바로 새 시스템을 구성하도록 하지 않는 것입니다. IaS를 사용하면 작성된 코드가 새 시스템의 상태에서 필요한 변경 사항을 가져올 수 있습니다. 해당 코드가 실행되면 기계는 사람의 개입 없이 원하는 상태로 이동해야 합니다.

IaC를 통해 DevOps 팀은 개발 단계의 매우 초기 단계에서 애플리케이션 테스트를 시작할 수 있습니다. 이러한 팀은 이 모델을 사용하여 신뢰할 수 있고 온디맨드 방식으로 테스트하기 위해 이러한 환경을 설정합니다. IaC는 또한 여러 배포 문제를 해결하는 데도 사용됩니다. IaC가 작동하는 방식을 기반으로 클라우드는 종종 환경을 구축하고 중단합니다. 여기 에서 DevOps 아키텍처 자습서에 대해 자세히 알아볼 수 있습니다 . 여기에서 이 주제에 대해 자세히 알아볼 수 있습니다.
IaC가 아닌 것은 무엇입니까?
IaC를 네트워킹 원칙의 대안으로 생각하는 사람들이 있습니다. 이는 매우 큰 오해입니다. 이러한 개념은 제대로 이해하기 위해 시간을 들이지 않은 사람들에게만 유사하게 나타날 수 있습니다. 이러한 개념을 철저히 살펴보고 나면 그들 사이에 존재하는 분명한 차이점을 찾는 데 어려움이 없을 것입니다.
이 두 개념을 모두 사용하여 인프라를 구축할 수 있지만 네트워크 라우팅, 네트워크 아키텍처, 네트워크 트래픽 및 네트워크 구성이 작동하는 방식을 알아야 합니다. 이는 IaC에서도 중요한 역할을 하는 네트워킹 기본 사항입니다. 혼란은 이 두 개념의 혼합 원칙으로 끝나지 않습니다.
또한 많은 사람들은 IaC를 개발로 전환하여 운영을 중복화한다고 생각합니다. 글쎄, 이것은 진실과 거리가 멀다. 운영은 모든 조직에서 항상 중요한 역할을 합니다.
몇 년 전만 해도 네트워킹에는 구성 스크립트를 작성하고 인프라와 네트워크를 수동으로 구성하는 작업이 포함되었습니다. 많은 사람들은 여전히 IaC가 이러한 구성 관리에 DevOps 방법론을 사용하는 것 외에는 아무것도 아니라고 생각합니다. 이는 사실이 아닙니다. IaC는 구성 스크립트까지 자동화합니다. 코드를 사용하여 구성할 수 있고 확장할 수 있는 시스템의 사용을 촉진합니다.
변경 및 변경 불가능한 인프라
IaC를 사용하여 인프라를 자동화할 때 내려야 하는 가장 큰 결정 중 하나는 변경 가능한 인프라를 프로비저닝할지 아니면 변경할 수 없는 인프라를 프로비저닝할지 선택하는 것입니다. 이 둘이 어떻게 다른지 봅시다.
가변 인프라는 프로비저닝된 후 업데이트되거나 변경될 수 있습니다. 즉각적인 보안 문제 또는 응용 프로그램 또는 개발 요구 사항 고려와 관련된 문제를 포함하여 여러 문제를 처리하기 위해 임시 사용자 지정에 필요한 유연성을 제공합니다.
이 인프라는 버전이나 배포 간의 일관성을 허용하지 않는다는 단점이 있습니다. 버전 추적은 변경 가능한 인프라에서도 상당히 어렵습니다.
이것이 대부분의 사람들이 IaC를 사용하여 변경할 수 없는 인프라를 프로비저닝하는 이유 중 하나입니다. 일단 프로비저닝되면 업데이트하거나 변경할 수 없습니다. 변경할 수 없는 인프라를 수정하는 유일한 방법은 교체하는 것입니다. 변경할 수 없는 인프라는 해당 인프라보다 더 실용적이고 실행 가능합니다.
이를 통해 IaC는 논리적 경로를 선택하여 제공할 수 있는 모든 이점을 제공할 수 있습니다. 구성 드리프트를 없애고 테스트 및 배포 환경을 보다 일관되게 만듭니다. 변경할 수 없는 인프라에서는 버전을 유지 관리하고 추적하는 것조차 그리 어렵지 않습니다.
IaC의 원리
IaC를 적절하게 활용하는 기술을 알고 있는 회사는 많지 않습니다. 즉, 기존의 구조에 맞추는 전술적 노하우를 가진 회사는 극소수에 불과하다.
따라서 이를 구현하는 잘못된 방법도 있습니다. IaC가 마지막 세대 및 레거시 도구와 함께 작동하도록 하는 것은 많은 잘못된 방법 중 하나입니다. 이러한 문제를 처리하는 데 도움이 될 수 있는 특정 원칙이 있습니다.

1. 쉬운 시스템 재현성: IaC는 많은 노력과 많은 시간을 들이지 않고도 인프라의 모든 부분을 재현하는 데 사용할 수 있습니다. IaC는 프로세스에 수반되는 불확실성을 제거합니다. 새로운 환경과 서비스를 프로비저닝하는 것은 IaC를 사용하여 훨씬 더 자신 있게 수행할 수 있는 것입니다.
2. 유연성 향상: 인프라가 애플리케이션에서 발생하는 문제에 대한 솔루션을 제공하지 않으면 문제가 발생합니다. 이러한 문제는 네트워크 호환성, 구성 및 스토리지를 포함하여 다양한 문제와 관련될 수 있습니다. IaC는 이와 관련된 문제에 대해 유연한 솔루션을 제공할 수 있습니다.
3. 다이내믹한 디자인: IaC는 변화할 수 있는 디자인을 강조한다는 원칙을 따릅니다. 일정 기간 동안 시스템이 겪을 수 있는 변경 사항을 말하기는 쉽지 않습니다. 업그레이드든 수정이든, 필요할 때마다 변경할 수 있는 인프라를 갖는 것이 이 점에서 너무 경직된 인프라보다 항상 낫습니다.
결론
IaC를 사용하는 DevOps 팀은 본질적으로 안정적인 환경을 빠르게 프로비저닝할 수 있습니다. 환경을 수동으로 구성할 필요가 없으므로 프로세스의 일관성이 향상됩니다. 누락된 종속성 또는 구성 드리프트는 이 모델을 사용하여 인프라를 배포할 때 존재하지 않는 런타임 문제입니다.
클라우드 컴퓨팅 머신 러닝에 대해 자세히 알아보려면 IIIT-B & upGrad의 머신 러닝 및 AI PG 디플로마를 확인하세요. 이 디플로마는 일하는 전문가를 위해 설계되었으며 450시간 이상의 엄격한 교육, 30개 이상의 사례 연구 및 과제를 제공합니다. IIIT-B 동문 자격, 5개 이상의 실용적인 실습 캡스톤 프로젝트 및 최고의 기업과의 취업 지원.