DevOps 패턴

단일 위치에서 코딩하고, 로컬 데이터 센터, 프라이빗 클라우드 또는 퍼블릭 클라우드에 있을 수 있는 개발, 테스트 및 프로덕션 환경에서 여러 대상에 배포합니다.

컨텍스트 및 문제점

애플리케이션 배포 연속성, 보안 및 안정성은 조직에 필수적이며 개발 팀에 중요합니다.

앱은 일반적으로 각 대상 환경에서 실행하기 위해 코드를 리팩터링해야 합니다. 즉, 앱이 완전히 이식할 가능성이 없습니다. 각 환경을 통해 이동하므로 업데이트하고, 테스트하고, 유효성을 검사해야 합니다. 예를 들어 개발 환경에서 작성된 코드는 테스트 환경에서 작동하고 최종적으로 프로덕션 환경에 있는 경우 다시 작성하도록 다시 작성해야 합니다. 또한 이 코드는 구체적으로 호스트에 연결됩니다. 이렇게 하면 앱을 유지 관리하는 비용과 복잡성이 증가합니다. 각 앱 버전은 각 환경에 연결됩니다. 복잡성 및 중복은 보안과 코드 품질의 위험을 증가시킵니다. 또한 실패한 호스트 복원을 제거하거나 추가 호스트를 배포하여 수요를 늘릴 때 코드를 즉시 재배포할 수 없습니다.

해결 방법

DevOps 패턴을 사용하면 여러 클라우드에서 실행되는 앱을 빌드, 테스트 및 배포할 수 있습니다. 이 패턴은 연속 통합 및 지속적인 업데이트의 결합을 제공합니다. 연속 통합을 사용하면 팀 멤버가 버전 제어 변경 내용을 커밋할 때마다 코드가 빌드되고 테스트됩니다. 지속적인 업데이트는 빌드에서 프로덕션 환경으로 각 단계를 자동화합니다. 이러한 프로세스는 함께 다양한 환경에서 배포를 지원하는 릴리스 프로세스를 만듭니다. 이 패턴을 사용하여 코드를 초안한 다음, 동일한 코드를 온-프레미스 환경, 다른 프라이빗 클라우드 및 퍼블릭 클라우드에 배포할 수 있습니다. 환경의 차이에는 코드를 변경하는 대신 구성 파일을 변경해야 합니다.

DevOps pattern

온-프레미스, 프라이빗 클라우드 및 퍼블릭 클라우드 환경에서 일관된 개발 도구 세트를 사용하여 연속 통합 및 지속적인 업데이트를 구현할 수 있습니다. DevOps 패턴을 사용하여 배포된 앱과 서비스는 교환할 수 있으며, 온-프레미스 및 퍼블릭 클라우드 기능과 기능을 활용하여 이러한 위치에서 실행할 수 있습니다.

DevOps 릴리스 파이프라인을 사용하면 다음과 같은 작업을 할 수 있습니다.

  • 단일 리포지토리에 대한 코드 커밋을 기반으로 새 빌드를 시작합니다.
  • 사용자 승인 테스트를 위해 새로 빌드된 코드를 퍼블릭 클라우드에 자동으로 배포합니다.
  • 코드에서 테스트가 통과되면 프라이빗 클라우드에 자동으로 배포합니다.

문제 및 고려 사항

DevOps 패턴은 대상 환경에 관계 없이 배포 간에 일관성을 유지하기 위한 것입니다. 그러나 기능은 클라우드 및 온-프레미스 환경에 따라 다릅니다. 다음 사항을 고려합니다.

  • 배포의 함수, 엔드포인트, 서비스 및 기타 리소스를 대상 배포 위치에서 사용할 수 있나요?
  • 구성 아티팩트가 여러 클라우드에서 액세스할 수 있는 위치에 저장되나요?
  • 배포 매개 변수는 모든 대상 환경에서 작동하나요?
  • 모든 대상 클라우드에서 리소스 특정 속성을 사용할 수 있나요?

자세한 내용은 클라우드 일관성을 위한 Azure Resource Manager 템플릿 개발을 참조하세요.

또한 이 패턴을 구현할 방법을 결정할 때 다음 사항을 고려합니다.

확장성

배포 자동화 시스템은 DevOps 패턴의 핵심 제어 지점입니다. 구현은 다를 수 있습니다. 올바른 서버 크기를 선택하는 것은 예상된 워크로드 크기에 따라 달라집니다. VM은 컨테이너보다 크기를 조정하는 데 더 많은 비용이 듭니다. 그러나 크기 조정을 위해 컨테이너를 사용하려면 컨테이너와 함께 빌드 프로세스를 실행해야 합니다.

가용성

DevPattern의 컨텍스트에서 가용성이란 테스트 결과, 코드 종속성 또는 기타 아티팩트 등의 워크플로와 연결된 모든 상태 정보를 복원할 수 있다는 뜻입니다. 가용성 요구 사항을 평가하려면 두 가지 공통 메트릭을 고려합니다.

  • RTO(복구 시간 목표)는 시스템 없이 얼마나 오래 갈 수 있는지 지정합니다.

  • RPO(복구 지점 목표)는 서비스 중단으로 인해 시스템에 영향을 줄 경우 잃을 수 있는 데이터 양을 나타냅니다.

실제로 RTO와 RPO는 중복성과 백업을 의미합니다. 글로벌 Azure 클라우드에서 가용성은 Azure의 일부인 하드웨어 복구의 문제가 아니라 DevOps 시스템의 상태 유지를 보장하는 것입니다. Azure Stack Hub에서 하드웨어 복구를 고려할 수 있습니다.

배포 자동화에 사용되는 시스템을 디자인할 때 고려해야 할 또 다른 주요 사항은 액세스 제어 및 클라우드 환경에 서비스를 배포하는 데 필요한 권한을 적절하게 관리하는 것입니다. 배포를 생성, 삭제 또는 수정하는 데 필요한 권한은 무엇인가요? 예를 들어 Azure에서 리소스 그룹을 만들고 리소스 그룹에 서비스를 배포하기 위해 일반적으로 하나의 권한 세트가 필요합니다.

관리 효율

DevOps 패턴을 기반으로 하는 시스템의 디자인은 포트폴리오에서 각 서비스에 대한 자동화, 로깅 및 경고를 고려해야 합니다. 공유 서비스, 애플리케이션 팀 또는 둘 다를 사용하고 보안 정책 및 관리도 추적합니다.

프로덕션 환경 및 개발/테스트 환경을 Azure 또는 Azure Stack Hub의 별도 리소스 그룹에 배포합니다. 그런 다음, 각 환경의 리소스를 모니터링하고 리소스 그룹별 청구 비용을 롤업할 수 있습니다. 리소스를 하나의 집합으로 삭제할 수도 있습니다. 이러한 기능은 테스트 배포에서 유용합니다.

이 패턴을 사용해야 하는 경우

다음 경우에 이 패턴을 사용합니다.

  • 개발자의 요구 사항을 충족하는 한 환경에서 코드를 개발하고, 새 코드를 개발하기 어려울 수 있는 솔루션 관련 환경에 배포할 수 있습니다.
  • DevOps 패턴에서 연속 통합 및 지속적인 업데이트 프로세스를 수행할 수 있다면 개발자가 원하는 코드 및 도구를 사용할 수 있습니다.

이 패턴이 권장되지 않습니다.

  • 리소스, 구성, ID 및 보안 작업을 프로비저닝하는 인프라를 자동화할 수 없는 경우
  • 팀이 CI/CD(연속 통합/지속적인 개발) 접근 방식을 구현하는 하이브리드 클라우드 리소스에 액세스할 수 없는 경우

다음 단계

이 문서에서 소개하는 항목에 대한 자세한 내용은 다음을 참조하세요.

  • Azure DevOps 및 Azure Repos와 Azure Pipelines를 비롯한 관련 도구에 대해 자세히 알아보려면 Azure DevOps 설명서를 참조하세요.
  • 제품 및 솔루션의 전체 포트폴리오에 대해 자세히 알아보려면 Azure Stack 제품군 및 솔루션을 참조하세요.

솔루션 예제를 테스트할 준비가 되면 DevOps 하이브리드 CI/CD 솔루션 배포 가이드를 계속 진행하세요. 배포 가이드에서는 해당 구성 요소를 배포 및 테스트하는 방법에 대한 단계별 지침을 제공합니다. 하이브리드 CI/CD(연속 통합/지속적인 업데이트) 파이프라인을 사용하여 Azure 및 Azure Stack Hub에 앱을 배포하는 방법을 알아봅니다.