TIL

8_5.MSA 애플리케이션 배포 자동화 CI/CD 구축 실습

꿀승 2025. 2. 17. 16:43
728x90
반응형
SMALL

학습내용

  1. CI/CD
  2. 배포 전략
  3. Git Actions 실습

학습정리

1. CI/CD

  • CI (Continuous Integration, 지속적 통합)
    • 개념
      • 개발자가 코드를 변경하면, 이를 자동으로 빌드 및 테스트 후 리포지토리에 병합
      • 코드 품질을 유지하면서 빠르게 개발 및 협업 가능
    • 주요 기능
      • 자동 빌드
      • 자동 테스트
      • 코드 병합
  • CD (Continuos Deployment, 지속적 배포)
    • 개념
      • 테스트 성공 시 자동으로 배포
    • 주요 기능
      • 자동 배포
      • 버전 관리
      • 환경별 배포
  • 주요도구
    • GitHub Actions, GitLab CI/CD, Jenkins, CircleCI 등

2. 배포전략

  • Blue-Green 배포 전략

    • 개념

      • 두 개의 환경(Blue=현재 운영 중, Green=새 버전)을 동시에 유지
      • Green(새 버전)으로 전체 트래픽 전환
      • 문제가 있으면 다시 Blue(이전 버전)로 롤백
    • Blue-Green 배포 프로세스

      • 기존 서비스 Blue(운영 중)
      • 새로운 버전 Green(배포 완료, 트래픽 없음)
      • 트래픽을 Blue → Green으로 변경 (즉시 배포)
      • 문제가 발생하면 다시 Blue로 트래픽 전환 (빠른 롤백)
    • 배포 예제 (Nginx 로드 밸런서)

      events { }
      
      http {
          upstream blue {
              server app-blue:80;
          }
      
          upstream green {
              server app-green:80;
          }
      
          server {
              listen 80;
      
              location / {
                  proxy_pass http://blue;  # 초기에는 Blue 환경으로 설정, green으로 변경
              }
          }
      }
  • Canary 배포전략

    • 개념

      • 새 버전을 일부 사용자(10~20%)에게만 배포
      • 문제가 없으면 점진적으로 전체 배포 진행
      • 장애 발생 시, Canary 버전을 롤백하여 안정적인 이전 버전 유지
    • Canary 배포 프로세스

      • 기존 서비스(Stable)와 새로운 서비스(Canary) 공존
      • 일부 트래픽만 Canary 버전으로 유도 (예: 10%)
      • 문제 발생 시 Canary를 롤백, 이상 없으면 점진적으로 확장
      • 최종적으로 Canary가 100% 트래픽을 처리하면 기존 버전 종료
    • 배포 예제 (Nginx 로드 밸런서)

      # 보통 8:2로 많이 사용하지만 테스트를 통해서 수치 변경
      upstream stable {
          server stable-app:80;
      }
      
      upstream canary {
          server canary-app:80;
      }
      
      server {
          listen 80;
      
          location / {
              set $canary_ratio 20;
              if ($request_uri ~ "^/api") {
                  set $canary_ratio 50;
              }
      
              random split_clients $canary_ratio%: $canary {
                  0%: stable;
                  *: canary;
              }
      
              proxy_pass http://$canary;
          }
      }
      

3. Git Actions

  • 개념

    • GitHub에서 제공하는 CI/CD(Continuous Integration/Continuous Deployment) 자동화 도구
    • 코드 변경시 자동화 된 빌드,테스트,배포 가능
    • YAML 기반 설정 파일 사용
  • 주요 개념

    • Workflow: 자동화 작업의 전체 프로세스
    • Job: 워크플로우 내에서 실행되는 단위 작업
    • Step: Job 내에서 실행되는 개별 명령
    • Runner: Workflow를 실행하는 환경 (GitHub 제공 또는 자체 호스팅 가능)
  • YAML 파일 구조

    # 사용방법 
    #github repository에서 .github/workflows/ 디렉토리 안에 해당 yaml 저장하여 설정
    name: CI Pipeline
    
    # 이벤트를 정의하는 부분 
    on:
      push:
        branches:
          - main
      pull_request:
        branches:
          - main
    # 여러 개의 작업 단위 실행 가능
    jobs:
      build:
        runs-on: ubuntu-latest
        # 개별 명령어 실행
        steps:
          - name: Checkout repository
            uses: actions/checkout@v3 # GitHub Marketplace에서 제공하는 액션 활용
    
          - name: Run a simple command
            run: echo "Hello, GitHub Actions!"

ps. 이번 시간엔 CI/CD에 대해 학습하였는데 전체적인 흐름은 알게 되었는데
자세한 사용방법이나 다양한 설정에 대해서 추후 다시 깊게 공부 해야 할 것 같다.

728x90
반응형
LIST