WEB(Django) CI/CD 아키텍처 (v2)
1. 개요
이 아키텍처는 CI/CD 파이프라인을 통해 소스코드 변경 시 애플리케이션을 자동으로 빌드, 배포, 서비스 갱신하는 과정을 설명합니다.
개발자가 GitHub에 코드를 푸시하면 GitHub Actions가 Docker 이미지를 빌드하여 Amazon ECR에 저장하고, Amazon ECS를 통해 새로운 이미지를 기반으로 Django 컨테이너를 무중단으로 배포합니다.
Slack 알림을 통해 배포 상태를 실시간으로 확인할 수 있습니다.
2. 주요 컴포넌트
2.1 GitHub
- 역할: 소스코드 버전 관리 및 변경 사항 감지
- 주요 동작:
- 개발자의 코드 푸시를 감지하여 GitHub Actions를 트리거합니다.
2.2 GitHub Actions
- 역할: CI/CD 파이프라인의 중심 도구
- 주요 동작:
- Docker 이미지를 빌드하고 Amazon ECR에 저장
- 새로운 이미지를 배포하도록 ECS에 알림
- 배포 결과를 Slack으로 전송
2.3 Amazon ECR (Elastic Container Registry)
- 역할: Docker 이미지를 저장하는 AWS의 컨테이너 이미지 레지스트리
- 주요 동작:
- GitHub Actions에서 푸시된 Docker 이미지를 안전하게 저장
- ECS에서 이미지를 가져가 사용할 수 있도록 제공
2.4 Amazon ECS (Elastic Container Service)
- 역할: 컨테이너 기반 애플리케이션의 실행 및 관리
- 주요 동작:
- 새로운 Docker 이미지로 Task Definition 업데이트
- Django 애플리케이션 컨테이너를 실행
- ECS Agent가 컨테이너의 상태를 지속적으로 모니터링
- 기존 컨테이너를 종료하기 전에 새로운 컨테이너를 실행하여 무중단 배포를 지원
2.5 ECS EC2 Container
- 역할: ECS 클러스터에서 실행되는 컨테이너 인스턴스입니다.
- 주요 동작:
- Docker Compose를 사용하여 Django 컨테이너를 무중단으로 배포하고 실행합니다.
- 각 Django 컨테이너는 요청을 처리하며, Docker Compose를 통해 점진적으로 업데이트됩니다.
2.6 Docker Compose
- 역할: 여러 컨테이너를 정의하고 동시에 실행
- 주요 동작:
- Django 애플리케이션의 여러 인스턴스를 실행하여 확장성과 가용성을 보장
- 각 컨테이너를 순차적으로 업데이트하여 서비스 중단 없이 새로운 기능을 배포
2.7 Slack
- 역할: 배포 상태를 알림으로 전달
- 주요 동작:
- 배포 성공 또는 실패 상태를 실시간으로 팀에게 공유
- 팀원들은 알림을 통해 신속하게 상황을 파악하고 대응
3. 배포 흐름
3.1 소스코드 푸시 및 GitHub Actions 트리거
- 개발자가 GitHub 저장소에 소스코드를 푸시합니다.
- GitHub는 변경 사항을 감지하고 GitHub Actions 워크플로우를 실행합니다.
3.2 Docker 이미지 빌드 및 저장
- GitHub Actions는 소스코드를 기반으로 Docker 이미지를 빌드합니다.
- 생성된 Docker 이미지를 Amazon ECR에 저장합니다.
3.3 ECS를 통한 무중단 배포
- Amazon ECS는 새로운 Docker 이미지를 기반으로 Task Definition을 업데이트하고 컨테이너를 배포합니다.
- 기존 컨테이너를 종료하기 전에 새로운 컨테이너가 실행되며, 요청을 점진적으로 새로운 컨테이너로 라우팅합니다.
- ECS Agent가 컨테이너 상태를 모니터링하고 실행 상태를 유지합니다.
3.4 Slack 알림 전송
GitHub Actions는 배포 완료 또는 실패 결과를 Slack으로 전송합니다.
성공 알림: 배포가 성공적으로 완료되었음을 알립니다.
실패 알림: 실패 원인과 함께 팀에 알림을 보냅니다.
4. 무중단 배포 전략
점진적 업데이트:
ECS와 Docker Compose를 활용하여 새로운 컨테이너를 먼저 실행한 후, 기존 컨테이너를 종료합니다.
이를 통해 요청이 새로운 컨테이너로 라우팅되는 동안 서비스 중단이 발생하지 않습니다.컨테이너 상태 모니터링:
ECS Agent는 새로운 컨테이너가 정상적으로 실행되는지 확인하며, 오류가 발생할 경우 기존 컨테이너를 유지하여 가용성을 보장합니다.롤백 지원:
새로운 컨테이너에서 문제가 발생하면 즉시 이전 상태로 롤백할 수 있습니다.
5. 주요 기술 스택
기능 | 기술 |
---|---|
소스코드 관리 | GitHub |
CI/CD 파이프라인 | GitHub Actions |
컨테이너 레지스트리 | Amazon ECR |
컨테이너 오케스트레이션 | Amazon ECS |
인프라 | Amazon EC2 |
컨테이너화 | Docker |
웹 프레임워크 | Django |
알림 시스템 | Slack |
6. 요약
해당 아키텍처는 무중단 배포를 중심으로 설계된 CI/CD 파이프라인입니다.
GitHub Actions와 AWS 서비스를 활용하여 Docker 이미지를 자동으로 빌드하고 Amazon ECR과 ECS로 배포하며, 무중단 배포를 통해 서비스 가용성을 유지합니다.
Slack을 통해 실시간 알림을 제공함으로써 팀원들이 배포 상태를 즉각적으로 확인할 수 있습니다.
자동화된 프로세스는 개발 효율성을 높이고 배포 안정성을 유지하는 데 기여합니다.
'MLOps & DevOps' 카테고리의 다른 글
[Github Actions] GitHub Actions - AWS Credentials 설정 (0) | 2024.12.25 |
---|---|
[CI/CD] Docker, EC2, ECR, CodeDeploy, Github Actions를 활용한 배포 자동화 (0) | 2024.12.24 |
[CI/CD] Github Actions 기본 문법 정리 (0) | 2024.12.22 |
[MLOps] MLFlow - ML CI/CD 파이프라인 구축 (0) | 2024.12.16 |
[DevOps] Django - CI/CD 파이프라인 자동화 (0) | 2024.12.16 |
배움에 즐거움을 느끼는 마네의 연구소입니다. 이미지 출처 : https://www.instagram.com/hoseobiiiiiii._.0410/
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!