Azure DevOps 소개

마이크로소프트의 통합 DevOps 플랫폼 이해하기

Azure DevOps의 핵심 개념과 구조를 알아보고, 각 서비스 구성 요소의 역할과 특징을 이해한다. 개발팀이 효율적으로 협업하고 CI/CD 파이프라인을 구축하는 방법을 소개한다.

Engineering
DevOps
저자

Kwangmin Kim

공개

2024년 01월 01일

1 Azure DevOps 개요

Azure DevOps는 마이크로소프트에서 제공하는 클라우드 기반의 통합 DevOps 플랫폼이다. 소프트웨어 개발 생명주기(SDLC) 전반에 걸쳐 개발팀이 효율적으로 협업하고, 코드를 관리하며, 지속적인 통합과 배포(CI/CD)를 수행할 수 있도록 지원한다.

1.1 DevOps란?

DevOps는 Development(개발)과 Operations(운영)의 합성어로, 개발팀과 운영팀 간의 협업을 강화하여 소프트웨어 개발과 배포 과정을 자동화하고 효율화하는 문화와 방법론이다.

1.1.1 DevOps의 핵심 원칙

  • 협업: 개발팀과 운영팀 간의 원활한 소통과 협력
  • 자동화: 반복적인 작업의 자동화를 통한 효율성 향상
  • 지속적 통합: 코드 변경사항의 빈번한 통합과 테스트
  • 지속적 배포: 안정적이고 신속한 소프트웨어 배포
  • 모니터링: 시스템과 애플리케이션의 지속적인 모니터링

2 Azure DevOps 서비스 구조

Azure DevOps는 5개의 핵심 서비스로 구성되어 있으며, 각 서비스는 독립적으로 사용하거나 통합하여 활용할 수 있다.

2.1 Azure Boards (작업 관리)

프로젝트 계획, 작업 추적, 버그 관리를 위한 애자일 프로젝트 관리 도구이다.

2.1.1 주요 기능

  • Work Items: 사용자 스토리, 작업, 버그, 에픽 등의 작업 항목 관리
  • Kanban Boards: 시각적인 작업 흐름 관리
  • Sprint Planning: 스프린트 계획 및 백로그 관리
  • Dashboards: 프로젝트 진행 상황 대시보드
  • Query: 복잡한 작업 항목 검색 및 필터링

2.1.2 작업 항목 계층 구조

Epic (에픽)  
├── Feature (기능)  
│   ├── User Story (사용자 스토리)  
│   │   ├── Task (작업)  
│   │   └── Bug (버그)  
│   └── Test Case (테스트 케이스)  
  • Epic: 프로젝트의 최상위 목표
  • Feature: 프로젝트의 주요 기능
  • User Story: 기능을 구현하기 위한 작업
  • Task: User Story를 구현하기 위한 작업
  • Bug: 버그 수정 작업
  • Test Case: 테스트 케이스

2.2 Azure Repos (소스 코드 관리)

Git 기반의 버전 관리 시스템으로, 소스 코드의 저장, 관리, 협업을 지원한다.

2.2.1 주요 기능

  • Git Repositories: 무제한 프라이빗 Git 저장소
  • Pull Requests: 코드 리뷰 및 병합 관리
  • Branch Policies: 브랜치 보호 정책 설정
  • Code Search: 전체 코드베이스에서 빠른 검색
  • Wiki: 프로젝트 문서화

2.2.2 브랜치 전략 예시

# GitFlow 브랜치 전략  
main (운영)  
├── develop (개발)  
   ├── feature/user-login (기능 개발)  
   ├── feature/payment-system (기능 개발)  
   └── release/v1.2.0 (릴리스 준비)  
└── hotfix/critical-bug (긴급 수정)  

2.3 Azure Pipelines (CI/CD)

지속적 통합과 지속적 배포를 위한 자동화 파이프라인 서비스이다.

2.3.1 주요 기능

  • Build Pipelines: 소스 코드 빌드 자동화
  • Release Pipelines: 배포 자동화
  • Multi-platform: Windows, Linux, macOS 지원
  • Container Support: Docker 컨테이너 빌드 및 배포
  • Integration: 다양한 도구 및 서비스와 통합

2.3.2 파이프라인 구조

# azure-pipelines.yml 예시  
trigger:  
  branches:  
    include:  
    - main  
    - develop  

pool:  
  vmImage: 'ubuntu-latest'  

stages:  
- stage: Build  
  jobs:  
  - job: BuildJob  
    steps:  
    - task: NodeTool@0  
      inputs:  
        versionSpec: '16.x'  
    - script: |  
        npm install  
        npm run build  
      displayName: 'Build Application'  

- stage: Test  
  jobs:  
  - job: TestJob  
    steps:  
    - script: |  
        npm run test  
      displayName: 'Run Tests'  

- stage: Deploy  
  condition: and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/main'))  
  jobs:  
  - job: DeployJob  
    steps:  
    - task: AzureWebApp@1  
      inputs:  
        azureSubscription: 'Azure-Connection'  
        appName: 'my-web-app'  
        package: '$(System.DefaultWorkingDirectory)/**/*.zip'  

2.4 Azure Test Plans (테스트 관리)

수동 및 자동화 테스트를 계획하고 실행하기 위한 테스트 관리 도구이다.

2.4.1 주요 기능

  • Test Plans: 테스트 계획 및 스위트 관리
  • Test Cases: 상세한 테스트 케이스 작성
  • Test Execution: 수동 테스트 실행 및 결과 기록
  • Exploratory Testing: 탐색적 테스트 지원
  • Test Analytics: 테스트 결과 분석 및 리포팅

2.5 Azure Artifacts (패키지 관리)

패키지와 의존성을 관리하기 위한 패키지 저장소 서비스이다.

2.5.1 지원하는 패키지 타입

  • NuGet: .NET 패키지
  • npm: Node.js 패키지
  • Maven: Java 패키지
  • Python: Python 패키지
  • Universal Packages: 범용 패키지

2.5.2 패키지 피드 관리

# npm 패키지 발행 예시  
npm config set registry https://pkgs.dev.azure.com/{organization}/{project}/_packaging/{feed}/npm/registry/  
npm publish  

3 Azure DevOps 아키텍처

3.1 조직 구조

Azure DevOps는 계층적 구조로 조직되어 있다:

Organization (조직)  
├── Project A (프로젝트)  
│   ├── Repos (저장소)  
│   ├── Pipelines (파이프라인)  
│   ├── Boards (보드)  
│   ├── Test Plans (테스트 계획)  
│   └── Artifacts (아티팩트)  
├── Project B (프로젝트)  
└── Project C (프로젝트)  

3.2 보안 및 권한 관리

  • Azure Active Directory 통합: 기업 ID 관리 시스템과 연동
  • Role-based Access Control: 역할 기반 접근 제어
  • Security Groups: 보안 그룹을 통한 권한 관리
  • Branch Policies: 코드 품질 보장을 위한 브랜치 정책

4 실무 활용 사례

4.1 일반적인 DevOps 워크플로우

4.2 스프린트 기반 개발 프로세스

  1. 스프린트 계획: Azure Boards에서 백로그 관리 및 스프린트 계획
  2. 기능 개발: Azure Repos에서 feature 브랜치 생성 및 개발
  3. 코드 리뷰: Pull Request를 통한 코드 리뷰 및 품질 검증
  4. 자동화 테스트: Azure Pipelines에서 CI 파이프라인 실행
  5. 배포: CD 파이프라인을 통한 자동 배포
  6. 피드백: 사용자 피드백 수집 및 다음 스프린트 계획

4.3 멀티 환경 배포 전략

# 환경별 배포 전략  
stages:  
- stage: DeployDev  
  displayName: 'Deploy to Development'  
  jobs:  
  - deployment: DeployDev  
    environment: 'development'  

- stage: DeployStaging  
  displayName: 'Deploy to Staging'  
  dependsOn: DeployDev  
  condition: succeeded()  
  jobs:  
  - deployment: DeployStaging  
    environment: 'staging'  

- stage: DeployProd  
  displayName: 'Deploy to Production'  
  dependsOn: DeployStaging  
  condition: and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/main'))  
  jobs:  
  - deployment: DeployProd  
    environment: 'production'  

5 Azure DevOps vs 경쟁 도구

5.1 주요 경쟁 도구 비교

기능 Azure DevOps GitHub GitLab Jenkins
소스 관리 Azure Repos GitHub GitLab 외부 연동
CI/CD Azure Pipelines GitHub Actions GitLab CI/CD Jenkins
프로젝트 관리 Azure Boards GitHub Projects GitLab Issues 외부 연동
패키지 관리 Azure Artifacts GitHub Packages GitLab Package Registry 외부 연동
가격 사용자당 과금 사용자당 과금 사용자당 과금 오픈소스

5.2 Azure DevOps의 장점

  • 통합 플랫폼: 모든 DevOps 도구가 하나의 플랫폼에 통합
  • Microsoft 생태계: Azure, Office 365, Visual Studio와의 원활한 통합
  • 하이브리드 지원: 온프레미스와 클라우드 모두 지원
  • 확장성: 대규모 엔터프라이즈 환경에 적합
  • 보안: 엔터프라이즈급 보안 기능 제공

6 시작하기

6.1 Azure DevOps 계정 생성

  1. Azure DevOps 웹사이트 방문
  2. Microsoft 계정으로 로그인 또는 새 계정 생성
  3. 조직(Organization) 생성
  4. 첫 번째 프로젝트 생성

6.2 기본 설정

# Azure CLI를 통한 DevOps 확장 설치  
az extension add --name azure-devops  

# 조직 설정  
az devops configure --defaults organization=https://dev.azure.com/{your-organization}  

# 프로젝트 생성  
az devops project create --name "MyProject"  

6.3 첫 번째 파이프라인 생성

  1. 저장소 연결: Azure Repos 또는 외부 Git 저장소 연결
  2. 파이프라인 템플릿 선택: 프로젝트 유형에 맞는 템플릿 선택
  3. YAML 파일 구성: azure-pipelines.yml 파일 작성
  4. 파이프라인 실행: 첫 번째 빌드 실행 및 결과 확인

7 결론

Azure DevOps는 소프트웨어 개발 생명주기 전반을 지원하는 강력하고 통합된 플랫폼이다. 특히 Microsoft 생태계를 사용하는 조직에서는 기존 도구들과의 원활한 통합을 통해 높은 생산성을 얻을 수 있다.

DevOps 문화를 도입하고자 하는 팀이나 기존 도구들의 통합을 원하는 조직에게 Azure DevOps는 훌륭한 선택이 될 수 있다. 각 서비스를 단계적으로 도입하여 점진적으로 DevOps 성숙도를 높여나가는 것이 성공적인 도입의 핵심이다.

8 학습 목차

8.1 실습 중심 학습이 필요한 영역

8.1.1 Azure Pipelines 심화

  • YAML 파이프라인 작성 실습
  • 다양한 빌드 에이전트 활용
  • 조건부 배포 및 승인 프로세스
  • 파이프라인 템플릿 및 재사용 가능한 구성

8.1.2 Infrastructure as Code (IaC)

  • ARM 템플릿 또는 Terraform 연동
  • Azure Resource Manager 통합
  • 환경별 인프라 자동 프로비저닝

8.2 고급 DevOps 개념

8.2.1 모니터링 및 관찰 가능성 (Observability)

  • Azure Monitor, Application Insights 연동
  • 로그 집계 및 분석
  • 성능 메트릭 수집 및 알림 설정
  • 분산 추적 (Distributed Tracing)

8.2.2 보안 DevOps (DevSecOps)

  • 보안 스캔 도구 통합
  • 취약점 관리 및 컴플라이언스
  • 시크릿 관리 (Azure Key Vault 연동)
  • 컨테이너 보안

8.3 실제 프로젝트 적용

8.3.1 마이크로서비스 아키텍처

  • 여러 서비스의 독립적인 파이프라인 관리
  • 서비스 간 의존성 관리
  • API 게이트웨이 및 서비스 메시 연동

8.3.2 컨테이너 및 쿠버네티스

  • Docker 컨테이너 빌드 및 배포
  • Azure Kubernetes Service (AKS) 연동
  • Helm 차트 관리

8.4 팀 협업 및 프로세스

8.4.1 브랜치 전략 심화

  • GitFlow, GitHub Flow 실제 적용
  • 코드 리뷰 프로세스 최적화
  • 자동화된 품질 게이트 설정

8.4.2 애자일 프로젝트 관리

  • Azure Boards 고급 활용: epic, feature, user story, task, bug, test case 등의 작업 항목 관리
  • 스프린트 계획 및 회고
  • 메트릭 기반 프로세스 개선

8.5 추천하는 다음 단계

현재 상황에 따라 다음 중 하나를 선택해서 진행하면 좋겠습니다:

8.5.1 초보자라면:

  1. 간단한 웹 애플리케이션으로 실습 - 실제 프로젝트 생성해서 전체 파이프라인 구축
  2. Azure Pipelines YAML 작성법 - 기본 빌드/배포 파이프라인 작성 실습
  3. Git 브랜치 전략 - 실제 협업 시나리오 연습

8.5.2 중급자라면:

  1. 멀티 환경 배포 전략 - Dev/Staging/Prod 환경 구성
  2. Infrastructure as Code - Terraform이나 ARM 템플릿 학습
  3. 컨테이너화 - Docker 및 Kubernetes 연동

8.5.3 고급자라면:

  1. DevSecOps 구현 - 보안 스캔 및 컴플라이언스 자동화
  2. 모니터링 및 관찰 가능성 - 전체 시스템 가시성 확보
  3. 대규모 조직 적용 - 엔터프라이즈 수준의 DevOps 거버넌스

Subscribe

Enjoy this blog? Get notified of new posts by email: