웹사이트 검색

구성 관리 소개


소개

보다 광범위한 주제인 구성 관리(CM)는 시간이 지남에 따라 무결성을 유지하는 방식으로 시스템의 변경 사항을 체계적으로 처리하는 프로세스를 의미합니다. 이 프로세스가 IT 산업에서 시작된 것은 아니지만 이 용어는 서버 구성 관리를 지칭하는 데 광범위하게 사용됩니다.

자동화는 서버 구성 관리에서 필수적인 역할을 합니다. 도구의 특정 언어 및 기능을 사용하여 스크립트를 프로비저닝하여 이전에 정의한 바람직한 상태에 도달하도록 서버를 만드는 데 사용되는 메커니즘입니다. 실제로 자동화는 서버 구성 관리의 핵심이며 구성 관리 도구를 자동화 도구 또는 IT 자동화 도구라고도 부르는 것이 일반적입니다.

구성 관리 도구에 의해 구현된 자동화 기능을 설명하는 데 사용되는 또 다른 일반적인 용어는 서버 오케스트레이션 또는 IT 오케스트레이션입니다. 중앙 컨트롤러 기계.

시중에는 다양한 구성 관리 도구가 있습니다. Puppet, Ansible, Chef 및 Salt가 인기 있는 선택입니다. 각 도구에는 고유한 특성이 있고 약간 다른 방식으로 작동하지만 시스템의 상태가 프로비저닝 스크립트에 설명된 상태와 일치하는지 확인하는 동일한 목적에 따라 구동됩니다.

서버 구성 관리의 이점

일반적으로 구성 관리를 사용하려면 수동 시스템 관리보다 더 많은 초기 계획과 노력이 필요하지만 가장 단순한 서버 인프라를 제외한 모든 것이 제공되는 이점으로 인해 개선될 것입니다. 몇 가지 예를 들자면:

새 서버의 빠른 프로비저닝

새 서버를 배포해야 할 때마다 구성 관리 도구는 프로비저닝 프로세스의 전부는 아니더라도 대부분을 자동화할 수 있습니다. 자동화는 지루한 작업을 인간이 할 수 있는 것보다 더 빠르고 정확하게 수행할 수 있게 해주기 때문에 프로비저닝을 훨씬 더 빠르고 효율적으로 만듭니다. 예를 들어 웹 서버를 수동으로 배포하는 데 적절하고 철저한 문서가 있더라도 구성 관리/자동화를 사용하면 몇 분이 걸리는 데 비해 몇 시간이 걸릴 수 있습니다.

중요한 이벤트에서 빠른 복구

빠른 프로비저닝에는 또 다른 이점이 있습니다. 바로 중요한 이벤트로부터의 빠른 복구입니다. 알 수 없는 상황으로 인해 서버가 오프라인 상태가 되면 시스템을 제대로 감사하고 실제로 무슨 일이 일어났는지 알아내는 데 몇 시간이 걸릴 수 있습니다. 이와 같은 시나리오에서 대체 서버를 배포하는 것은 일반적으로 영향을 받는 서버에서 자세한 검사가 수행되는 동안 서비스를 다시 온라인으로 전환하는 가장 안전한 방법입니다. 구성 관리 및 자동화를 통해 빠르고 안정적인 방식으로 이를 수행할 수 있습니다.

더 이상 Snowflake 서버 없음

언뜻 보기에 수동 시스템 관리는 서버를 배포하고 신속하게 수정하는 쉬운 방법으로 보일 수 있지만 종종 대가가 따릅니다. 시간이 지남에 따라 프로세스가 자동화되지 않은 경우 서버에 무엇이 설치되었고 어떤 변경이 이루어졌는지 정확히 알기가 매우 어려워질 수 있습니다. 수동 핫픽스, 구성 조정 및 소프트웨어 업데이트는 서버를 고유한 눈송이로 만들어 관리하기 어렵고 복제하기 더 어렵게 만들 수 있습니다. 구성 관리 도구를 사용하면 새 서버를 가져오거나 기존 서버를 업데이트하는 데 필요한 절차가 프로비저닝 스크립트에 모두 문서화됩니다.

서버 환경을 위한 버전 제어

서버 설정을 일련의 프로비저닝 스크립트로 변환하면 일반적으로 소프트웨어 소스 코드에 사용하는 많은 도구와 워크플로를 서버 환경에 적용할 수 있습니다.

Git과 같은 버전 제어 도구를 사용하여 프로비저닝에 대한 변경 사항을 추적하고 레거시 버전의 스크립트에 대해 별도의 분기를 유지할 수 있습니다. 또한 버전 제어를 사용하여 프로비저닝 스크립트에 대한 코드 검토 정책을 구현할 수 있습니다. 여기서 모든 변경 사항은 풀 요청으로 제출되고 수락되기 전에 프로젝트 리더의 승인을 받아야 합니다. 이 방법은 인프라 설정에 추가적인 일관성을 추가합니다.

복제된 환경

구성 관리를 사용하면 정확히 동일한 소프트웨어 및 구성으로 환경을 복제하는 것이 간단해집니다. 이를 통해 프로덕션, 개발 및 테스트 서버로 다단계 생태계를 효과적으로 구축할 수 있습니다. 동일한 프로비저닝 스크립트로 구축된 개발용 로컬 가상 머신을 사용할 수도 있습니다. 이 관행은 응용 프로그램을 프로덕션에 배포하거나 다른 컴퓨터 설정(다른 운영 체제, 소프트웨어 버전 및/또는 구성)을 사용하는 동료 간에 공유할 때 자주 발생하는 환경 불일치로 인해 발생하는 문제를 최소화합니다.

구성 관리 도구 개요

CM 도구에는 고유한 용어, 철학 및 생태계가 있지만 일반적으로 많은 특성을 공유하고 비슷한 개념을 가지고 있습니다.

대부분의 구성 관리 도구는 컨트롤러/마스터 및 노드/에이전트 모델을 사용합니다. 기본적으로 컨트롤러는 프로비저닝 스크립트에 정의된 일련의 지침 또는 작업을 기반으로 노드 구성을 지시합니다.

아래에서 대부분의 서버 구성 관리 도구에 있는 가장 일반적인 기능을 찾을 수 있습니다.

자동화 프레임워크

각 CM 도구는 프로비저닝 스크립트를 작성하는 데 사용할 수 있는 특정 구문 및 기능 세트를 제공합니다. 대부분의 도구에는 해당 언어를 기존 프로그래밍 언어와 유사하지만 단순화된 방식으로 만드는 기능이 있습니다. 변수, 루프 및 조건은 보다 다양한 프로비저닝 스크립트를 쉽게 생성할 수 있도록 제공되는 공통 기능입니다.

멱등성 동작

구성 관리 도구는 이전에 실행된 작업을 반복하지 않도록 리소스 상태를 추적합니다. 패키지가 이미 설치된 경우 도구는 다시 설치를 시도하지 않습니다. 목표는 각 프로비저닝 실행 후에 시스템을 여러 번 실행하더라도 원하는 상태에 도달(또는 유지)하는 것입니다. 이것이 바로 이러한 도구가 멱등성 동작을 갖는 것으로 특징지어지는 것입니다. 그러나이 동작은 모든 경우에 반드시 적용되는 것은 아닙니다.

시스템 현황

구성 관리 도구는 일반적으로 프로비저닝 중인 시스템에 대한 자세한 정보를 제공합니다. 이 데이터는 팩트라고 하는 전역 변수를 통해 사용할 수 있습니다. 여기에는 네트워크 인터페이스, IP 주소, 운영 체제 및 배포와 같은 것들이 포함됩니다. 각 도구는 서로 다른 사실 세트를 제공합니다. 이를 사용하여 프로비저닝 스크립트 및 템플릿을 여러 시스템에 보다 적합하게 만들 수 있습니다.

템플릿 시스템

대부분의 CM 도구는 구성 파일 및 서비스 설정을 용이하게 하는 데 사용할 수 있는 내장 템플릿 시스템을 제공합니다. 템플릿은 일반적으로 다양성을 극대화하는 데 사용할 수 있는 변수, 루프 및 조건을 지원합니다. 예를 들어 템플릿을 사용하여 Apache 내에서 새 가상 호스트를 쉽게 설정하는 동시에 여러 서버 설치에 대해 동일한 템플릿을 재사용할 수 있습니다. 템플릿에는 하드 코딩된 정적 값만 있는 대신 NameServerDocumentRoot와 같이 호스트에서 호스트로 변경될 수 있는 값에 대한 자리 표시자가 포함되어야 합니다.

확장성

프로비저닝 스크립트는 특정 서버의 요구 사항에 따라 매우 전문화될 수 있지만 유사한 서버 설정이 있거나 여러 서버 간에 공유할 수 있는 설정의 일부가 있는 경우가 많습니다. 대부분의 프로비저닝 도구는 프로비저닝 설정의 작은 부분을 모듈이나 플러그인으로 쉽게 재사용하고 공유할 수 있는 방법을 제공합니다.

타사 모듈 및 플러그인은 특히 PHP 웹 서버 설치와 같은 일반적인 서버 설정을 위해 인터넷에서 쉽게 찾을 수 있습니다. CM 도구는 주변에 강력한 커뮤니티가 구축되는 경향이 있으며 사용자는 사용자 정의 확장을 공유하도록 권장됩니다. 다른 사용자가 제공하는 확장 프로그램을 사용하면 많은 시간을 절약할 수 있을 뿐만 아니라 선택한 도구를 사용하여 다른 사용자가 일반적인 문제를 어떻게 해결했는지 알 수 있는 훌륭한 방법이기도 합니다.

구성 관리 도구 선택

시중에는 다양한 기능 세트와 복잡성 수준을 가진 다양한 CM 도구가 있습니다. 인기 있는 선택으로는 Chef, Ansible 및 Puppet이 있습니다. 첫 번째 과제는 필요에 맞는 도구를 선택하는 것입니다.

선택하기 전에 고려해야 할 몇 가지 사항이 있습니다.

인프라 복잡성

대부분의 구성 관리 도구에는 컨트롤러 시스템과 컨트롤러 시스템에서 관리할 노드로 구성된 최소 계층 구조가 필요합니다. 예를 들어 Puppet은 각 노드에 에이전트 애플리케이션을 설치하고 컨트롤러 시스템에 마스터 애플리케이션을 설치해야 합니다. 반면 Ansible은 노드에 추가 소프트웨어를 설치할 필요가 없는 분산 구조를 가지고 있지만 프로비저닝 작업을 실행하기 위해 SSH를 사용합니다. 소규모 프로젝트의 경우 단순화된 인프라가 더 적합해 보일 수 있지만 확장성 및 보안과 같은 측면을 고려하는 것이 중요하며 이는 도구에서 적용되지 않을 수 있습니다.

일부 도구에는 더 많은 구성 요소와 이동 부품이 있을 수 있으므로 인프라의 복잡성이 증가하여 학습 곡선에 영향을 미치고 전체 구현 비용이 증가할 수 있습니다.

학습 곡선

이 문서의 앞부분에서 언급한 것처럼 CM 도구는 때때로 DSL(도메인 특정 언어)을 사용하는 사용자 지정 구문과 자동화를 위한 프레임워크를 구성하는 기능 집합을 제공합니다. 기존의 프로그래밍 언어와 마찬가지로 일부 도구는 마스터하기 위해 더 높은 학습 곡선이 필요합니다. 인프라 요구 사항은 도구의 복잡성과 투자 수익을 얼마나 빨리 확인할 수 있는지에 영향을 미칠 수도 있습니다.

비용

대부분의 CM 도구는 고급 기능 및 서비스에 대한 유료 구독과 함께 무료 또는 오픈 소스 버전을 제공합니다. 일부 도구는 다른 도구보다 더 많은 제한이 있으므로 특정 요구 사항과 인프라가 어떻게 성장하는지에 따라 결국 이러한 서비스에 대한 비용을 지불해야 할 수 있습니다. 금전적 측면뿐만 아니라 선택한 도구로 팀이 속도를 높이는 데 필요한 시간과 관련하여 교육을 잠재적인 추가 비용으로 고려해야 합니다.

고급 툴링

앞에서 언급했듯이 대부분의 도구는 지원, 확장 및 고급 도구를 포함할 수 있는 유료 서비스를 제공합니다. 특정 요구 사항, 인프라 규모 및 이러한 서비스를 사용할 필요가 있는지 여부를 분석하는 것이 중요합니다. 예를 들어 관리 패널은 이러한 도구에서 제공하는 공통 서비스이며 중앙 지점에서 모든 서버를 관리하고 모니터링하는 프로세스를 크게 촉진할 수 있습니다. 아직 그러한 서비스가 필요하지 않더라도 향후 필요할 수 있는 옵션을 고려하십시오.

커뮤니티 및 지원

사용자는 일반적으로 자신의 지식과 확장(모듈, 플러그인 및 프로비저닝 스크립트)을 다른 사용자와 공유하는 것을 좋아하기 때문에 강력하고 환영하는 커뮤니티는 지원 및 문서화를 위한 리소스가 매우 풍부할 수 있습니다. 이것은 학습 곡선을 가속화하고 유료 지원 또는 교육으로 인한 추가 비용을 피하는 데 도움이 될 수 있습니다.

널리 사용되는 도구 개요

아래 표는 오늘날 시장에서 가장 인기 있는 세 가지 구성 관리 도구인 Ansible, Puppet 및 Chef 간의 주요 차이점에 대한 간략한 개요를 제공합니다.

Ansible Puppet Chef
Script Language YAML Custom DSL based on Ruby Ruby
Infrastructure Controller machine applies configuration on nodes via SSH Puppet Master synchronizes configuration on Puppet Nodes Chef Workstations push configuration to Chef Server, from which the Chef Nodes will be updated
Requires specialized software for nodes No Yes Yes
Provides centralized point of control No. Any computer can be a controller Yes, via Puppet Master Yes, via Chef Server
Script Terminology Playbook / Roles Manifests / Modules Recipes / Cookbooks
Task Execution Order Sequential Non-Sequential Sequential

다음 단계

지금까지 구성 관리가 서버에서 작동하는 방식과 구성 관리 인프라를 구축하기 위한 도구를 선택할 때 고려해야 할 사항을 살펴보았습니다. 이 시리즈의 후속 가이드에서는 세 가지 인기 있는 구성 관리 도구인 Ansible, Puppet 및 Chef를 직접 체험해 볼 것입니다.

이러한 도구를 직접 비교할 수 있는 기회를 제공하기 위해 각 도구에서 완전히 자동화해야 하는 서버 설정의 간단한 예를 사용할 것입니다. 이 설정은 간단한 웹 페이지를 호스팅하기 위해 Apache를 실행하는 Ubuntu 18.04 서버로 구성됩니다.

결론

구성 관리는 프로세스 자동화를 위한 프레임워크를 제공하고 시스템 환경에 대한 변경 사항을 추적함으로써 시간이 지남에 따라 서버의 무결성을 크게 향상시킬 수 있습니다. 이 시리즈의 다음 가이드에서는 Ansible을 도구로 사용하여 실제로 구성 관리 전략을 구현하는 방법을 살펴보겠습니다.