환경 계획

완료됨

Azure 자산은 기본 구성, 조직 전체 리소스와 설정, 애플리케이션 워크로드를 비롯한 많은 구성 요소로 구성됩니다. 각각 다른 용도로 여러 환경에 걸쳐 자산을 분산했을 수도 있습니다.

이 단원에서는 모든 배포 및 구성에 일관되게 코드를 사용하는 경우의 이점에 대해 알아봅니다. 그런 다음, 각 환경에 적용할 수 있는 컨트롤 및 자동화 수준을 살펴봅니다. 또한 배포 프로세스의 각 단계를 통해 변경 내용이 어떻게 진행되는지, 선택한 배포 전략을 지원하는 데 필요한 컨트롤 및 거버넌스 유형을 살펴봅니다.

인프라를 코드로 정의

Azure 배포 및 구성은 애플리케이션, 가상 머신, 스토리지 서비스, 네트워킹보다 훨씬 더 많은 것을 다룹니다. 예를 들어, 다음 항목은 각각 해당 Azure 리소스를 사용하는 구성의 한 형태입니다.

  • 리소스 그룹, 구독, 관리 그룹을 만들어 리소스를 구성합니다.
  • Azure Policy 정의, 이니셔티브, 할당을 정의하고 적용하여 다른 리소스를 구성하는 방법을 제어합니다.
  • 사용자, 그룹, 워크로드 ID가 Azure 리소스에 액세스할 수 있도록 역할을 할당합니다.
  • 경고를 포함한 모니터링을 구성하여 Azure 리소스를 관찰하고 예상대로 작동하는지 확인합니다.

인프라를 코드로 처음 정의하기 시작할 때는 템플릿 또는 정의에서 정의할 수 있는 모든 항목을 인식하지 못할 수 있습니다. 하지만 자동화 사용에 익숙해짐에 따라 환경에 대한 모든 것을 코드로 정의하는 것이 좋습니다. 이렇게 하면 모든 Azure 구성에 대해 일관되고, 테스트되고, 승인된 프로세스를 사용할 수 있습니다. 또한 코드는 Git 리포지토리에서 버전 관리되고 추적되므로 시간이 지남에 따라 Azure 환경이 어떻게 변경되었는지 검토할 수 있습니다. Git 리포지토리를 사용하여 각 변경 내용의 기록을 추적할 수 있습니다.

예를 들어, Azure Monitor 경고를 구성해야 한다고 가정합니다. 처음에는 자동화를 사용하여 경고를 배포하는 것은 적절하지 않다고 생각할 수 있습니다. 그러나 경고는 Azure 구성의 중요한 부분입니다. 경고가 올바르게 만들어지지 않으면 중요한 프로덕션 문제에 대한 알림을 놓칠 수 있습니다. 코드에서 경고를 정의하면:

  • 팀 멤버가 경고와 구성을 검토할 수 있습니다.
  • 먼저 비프로덕션 환경에 경고를 배포하여 테스트할 수 있습니다.
  • Azure 구성의 변경 내용을 완전히 추적할 수 있습니다.

환경

인프라를 자동으로 배포하려는 경우 사용하려는 환경을 나열하면 도움이 됩니다. 많은 조직에는 각각 다른 특성을 가진 다양한 환경 유형이 있습니다. 예를 들면 다음과 같습니다.

  • 일부 환경에서는 프로덕션 코드를 실행하는 반면, 다른 환경에서는 동일한 코드의 비프로덕션 버전을 실행하지만 다른 구성을 사용할 수 있습니다.
  • 일부 환경은 수명이 길며 삭제할 수 없습니다. 다른 환경은 자동으로 만들어지고 더 이상 사용되지 않을 때 삭제되는 임시 환경입니다.
  • 일부 환경은 인프라 또는 소프트웨어 개발 팀에서 사용합니다. 다른 환경은 보안 팀에서 사용하거나 잠재 고객에게 제품을 시연해야 하는 경우 영업 팀에서도 사용합니다.

장난감 회사가 웹 사이트에 사용할 수 있는 환경을 고려합니다.

Diagram that shows the sequence of environments.

애플리케이션 또는 인프라에 대한 변경 내용을 적용하고 커밋하는 경우 파이프라인은 개발, 테스트, 스테이징이라는 일련의 비프로덕션 환경을 통해 변경 내용을 배포합니다. 정의된 팀 멤버가 배포를 계속하기 전에 구성을 확인하거나 파이프라인 로그를 볼 수 있도록 특정 지점에서 수동 승인 단계를 수행할 수도 있습니다. 그런 다음, 파이프라인은 결국 변경 내용을 프로덕션 환경에 배포합니다.

해당 환경 외에도 영업 팀에는 고객과 대화하는 데 사용하는 자체 데모 환경이 있습니다. 영업 팀은 프로덕션 환경의 복사본을 사용하여 데모 환경을 만듭니다. 보안 및 테스트 팀은 각각 침투 테스트 및 성능 테스트를 위해 프로덕션 환경의 임시 복사본을 만드는 경우가 있습니다.

개발 팀에도 자체 환경 세트가 있습니다. 개발 팀에는 해당 멤버가 새 기능을 탐색하거나 Azure 서비스로 실험할 때 사용할 샌드박스가 있습니다. 또한 개발 팀은 검토하고 병합하는 각 GitHub 끌어오기 요청에 대한 PR 검토 환경을 만듭니다.

제어된 환경

이러한 환경 중 일부에서는 변경 내용을 검토하고 적용하는 공식적인 프로세스를 요구하는 것이 좋습니다. 이 유형의 환경을 제어된 환경이라고 합니다. 프로덕션 환경은 항상 제어되어야 합니다. 일부 비프로덕션 환경에도 컨트롤을 적용하는 것이 좋습니다. 이렇게 하면 프로덕션 배포 전에 컨트롤이 적용하는 모든 제한 사항을 잘 이해하고 테스트할 수 있습니다.

반면, 제어되지 않는 환경에는 공식적인 컨트롤이 많지 않거나 없습니다. 이 환경은 다른 환경과 동일한 코드 및 유사한 구성을 포함할 수 있지만 더 많은 실험과 임시 구성 변경을 허용합니다. 제어되지 않는 환경에서 사용자는 Azure Portal을 사용하거나 Azure CLI/Azure PowerShell 명령을 직접 실행하여 구성을 수정할 수 있습니다. 또한 조직의 승인된 프로세스를 사용하지 않고 리소스를 만들 수도 있습니다. 프로덕션 환경과 같은 제어된 환경에 적용할 수 있으려면 먼저 제어되지 않는 환경에서 변경한 내용을 코드로 캡처해야 합니다.

참고

경우에 따라 환경은 실제로 여러 물리적 환경 또는 배포를 나타낼 수 있습니다. 예를 들어 끌어오기 요청 검토를 위한 임시 환경을 만드는 경우 팀에 여러 끌어오기 요청이 열려 있기 때문에 동시에 여러 개의 별도 환경이 활성화될 수 있습니다. 그러나 환경을 계획하려는 경우 환경에는 동일한 특성과 컨트롤이 포함되기 때문에 환경을 동일한 것으로 간주할 수 있습니다.

팀과 의논한 후에는 제어된 환경과 제어되지 않는 환경을 지정합니다. 또한 각 환경을 소유하는 사용자를 결정합니다.

환경 이름 Description 소유자 수명 컨트롤 수준
개발 여러 개발자의 변경 내용을 단일 환경으로 통합합니다. 운영 팀 수명이 김 제어
테스트 변경 내용에 대한 수동 및 자동화된 테스트를 실행하기 위한 환경입니다. 운영 팀 수명이 김 제어
스테이징 프로덕션 유사 구성을 사용하여 프로덕션 전에 변경 내용이 배포되는 최종 비프로덕션 환경입니다. 운영 팀 수명이 김 제어
생산 프로덕션 워크로드를 실행합니다. 운영 팀 수명이 김 제어
데모 영업 팀에서 새 고객에게 제품을 시연하는 데 사용됩니다. 영업 팀 수명이 김 제어되지 않음
성능 테스트 성능 및 스트레스 테스트를 실행하기 위해 프로덕션 환경의 복제본으로 동적으로 만들어진 다음, 테스트가 완료되면 삭제됩니다. 테스트 팀 수명이 짧음 제어되지 않음
침투 테스트 침투 및 보안 테스트를 실행하기 위해 프로덕션 환경의 복제본으로 동적으로 만들어진 다음, 테스트가 완료되면 삭제됩니다. 보안 팀 수명이 짧음 제어되지 않음
PR 검토 팀 멤버가 애플리케이션이나 인프라를 변경하기 위해 만드는 각 끌어오기 요청에 대해 동적으로 만들어집니다. 끌어오기 요청이 닫히면 환경이 삭제됩니다. 개발 팀 수명이 짧음 제어되지 않음
개발 샌드박스 실험 또는 탐색을 위해 개발 팀 멤버가 만든 다음, 더 이상 필요하지 않은 경우 삭제됩니다. 개발 팀 수명이 짧음 제어되지 않음

이전 환경 목록은 예제일 뿐입니다. 자체 조직에서 사용하는 환경, 해당 환경의 수명, 환경에 필요한 컨트롤 수준을 결정해야 합니다.

나중에 추가하고 손상된 코드를 많이 수정하는 대신 배포 초기에 해당 프로세스를 적용할 때 인프라 코드를 린팅, 테스트, 검토하는 것이 훨씬 더 쉽습니다.

마찬가지로, 보안 컨트롤이 처음부터 존재하는 경우, 일부 비프로덕션 환경에 적용되는 경우 보안 컨트롤을 훨씬 더 쉽게 사용할 수 있습니다. 이렇게 팀은 제어된 환경 내에서 작업하는 데 익숙해집니다.

학습 경로 전체에서 이러한 개념 중 일부를 점진적으로 도입했습니다. 가능한 한 빨리 배포 프로세스에 이러한 요소를 추가하는 것이 좋습니다.

각 환경의 격리

각 환경을 분리하고 가능한 한 자체 포함되도록 하는 것이 중요합니다. 각 환경에 전용 Azure 구독을 사용하면 도움이 될 수 있지만 환경을 분리된 상태로 유지하도록 주의해야 합니다.

환경 간 이동 방지 예를 들어, 프로덕션 환경의 가상 네트워크를 비프로덕션 환경의 가상 네트워크에 피어링하지 마세요. 피어링하면 누군가가 비프로덕션 환경 내에서 프로덕션 데이터를 실수로 변경하거나 중요한 프로덕션 데이터를 비프로덕션 환경으로 유출하기 쉽습니다.

검사 및 게이트

배포 프로세스가 진행됨에 따라 배포에 대한 신뢰도를 높이기 위해 일련의 검사를 실행해야 합니다. 배포가 진행되는 각 환경에 적합한 검사를 결정해야 합니다.

일반적으로 인프라에 대한 검사에는 다음이 포함됩니다.

  • 코드 검토.
  • 검토 중인 코드를 임시 환경에 배포하고 환경에 대한 자동화 또는 수동 테스트 실행
  • 린팅.
  • 사전 실행 유효성 검사.
  • 수동 테스트.
  • 수동 승인.
  • 자동화된 기능 테스트.
  • 자동화된 스모크 테스트.
  • 다음 환경으로 진행하기 전에 이전 환경의 상태 신호 기다리기.

이러한 검사 중 일부는 각 제어된 환경 등에 대해 배포 프로세스 내에서 여러 번 실행할 수 있습니다.

배포 프로세스를 디자인할 때는 얼마나 작거나 분명한지에 관계없이 수행해야 하는 모든 단계를 나열합니다. 최대한 자세하게 설명합니다. 처음에는 모든 것을 자동화하지 않을 수도 있지만 이 사례를 따르면 나중에 자동화된 배포 프로세스에 대한 청사진을 만드는 데 도움이 됩니다.

게이트는 배포를 계속하기 위해 성공해야 하는 자동 또는 수동 검사입니다.

수동 작업

코드 검토 및 배포 프로세스 중에 가능한 한 많은 검사를 자동화하는 것이 좋습니다. 그러나 조직에서는 프로덕션 또는 기타 제어된 환경에 배포하기 위해 수동 승인이 필요할 수 있습니다.

배포에 수동 승인 게이트를 사용하는 경우 다음 권장 사례를 따릅니다.

  • 배포를 승인할 수 있는 사용자를 명확하게 정의합니다. 개별 사용자를 지정하는 대신 Microsoft Entra 그룹을 사용하여 승인자를 정의합니다. 나중에 승인자 목록을 쉽게 변경할 수 있습니다.
  • 긴급 배포를 위한 프로세스를 포함합니다. 일반 승인자를 사용할 수 없는 경우 배포를 승인할 수 있는 사용자를 계획합니다. 한밤중이나 휴가 기간에 긴급 배포를 수행해야 할 수 있습니다.
  • 사용자 개입을 배포 승인 또는 거부로만 제한합니다. 자동화할 수 없는 단계가 있는 경우 아니면 사용자가 배포 작업을 실행하도록 요구하지 마세요.

거버넌스

Azure는 다음을 포함하여 환경을 관리하는 데 도움이 되는 도구와 기능을 제공합니다.

  • Azure Policy - 조직의 요구 사항에 맞지 않는 방식으로 구성된 리소스를 검색합니다. 또한 리소스가 규정을 준수하지 않는 방식으로 생성되거나 다시 구성되는 것을 방지하는 데 도움이 됩니다.
  • 잠금 - 중요한 리소스의 변경 또는 삭제를 방지합니다.
  • 관리 그룹 - Azure 구독을 구성하고 환경 전체에서 역할 기반 액세스 제어 및 정책을 일관되게 구성하는 데 도움이 됩니다.
  • Azure Monitor - 리소스의 메트릭과 로그를 기록하고, 리소스를 대시보드에 표시하고, 리소스가 예상 값에서 벗어날 때 자동으로 경고합니다.

Azure 자산을 빌드하는 경우 Azure 랜딩 존을 사용하는 것이 좋습니다. 랜딩 존을 사용하면 처음부터 환경에 거버넌스를 빌드할 수 있습니다. 대부분의 랜딩 존에는 환경을 구성하는 데 도움이 되는 미리 빌드된 Bicep 및 Terraform 파일이 포함됩니다. 요약 부분에서 자세한 정보 링크를 제공합니다.