소프트웨어 개발의 효율성과 품질을 높이기 위해 CI/CD (Continuous Integration/Continuous Deployment)는 필수적인 요소로 자리 잡았습니다. 이 블로그에서는 CI/CD의 개념과 중요성, GitHub Actions를 활용한 CI/CD 환경 구축 방법, 그리고 AWS IAM을 통한 보안 관리까지 포괄적으로 다루어 독자가 스스로 처음부터 끝까지 자동 배포 환경을 구축할 수 있도록 안내합니다.
CI/CD는 소프트웨어 개발 및 배포 프로세스를 자동화하고 최적화하는 일련의 방법론과 도구를 의미합니다. CI는 Continuous Integration(지속적 통합), CD는 Continuous Delivery(지속적 전달) 또는 Continuous Deployment(지속적 배포)를 의미합니다.
CI/CD는 개발 주기의 효율성을 높이고, 오류를 조기에 발견하며, 소프트웨어의 품질을 향상시키는 데 기여합니다.
CI/CD 환경을 구축하는 주요 이유는 다음과 같습니다:
CI/CD의 일반적인 작동 과정은 다음과 같습니다:
GitHub Actions는 GitHub에서 제공하는 CI/CD 도구로, 개발자가 직접 워크플로우(workflows)를 정의하여 코드의 빌드, 테스트, 배포 과정을 자동화할 수 있게 해줍니다. 주요 특징은 다음과 같습니다:
GitHub Actions를 사용한 CI/CD의 일반적인 아키텍처와 흐름은 다음과 같습니다:
.github/workflows/
디렉토리에 YAML 파일로 워크플로우를 정의합니다.아키텍처 다이어그램 예시:
[GitHub Repository]
|
| (Push Event)
v
[GitHub Actions Workflow]
|
|-- [Checkout Code]
|-- [Install Dependencies]
|-- [Run Tests]
|-- [Build]
|-- [Deploy to AWS S3]
|-- [Invalidate CloudFront]
|
v
[Deployment Environment (AWS)]
IAM (Identity and Access Management)은 클라우드 서비스(AWS, Azure, GCP 등)에서 사용자, 그룹, 역할, 권한을 관리하는 서비스입니다. 주요 기능은 다음과 같습니다:
IAM의 중요성:
이제 GitHub Actions를 활용하여 CI/CD 환경을 구축하는 구체적인 단계를 살펴보겠습니다. 이 가이드를 따라하면 독자는 자신만의 자동 배포 파이프라인을 설정할 수 있습니다.
IAM 사용자 생성:
권한 설정:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:DeleteObject",
"s3:ListBucket",
"s3:PutObject",
"s3:Sync"
],
"Resource": [
"arn:aws:s3:::your-bucket-name",
"arn:aws:s3:::your-bucket-name/*"
]
},
{
"Effect": "Allow",
"Action": "cloudfront:CreateInvalidation",
"Resource": "arn:aws:cloudfront::your-account-id:distribution/your-distribution-id"
}
]
}
자격 증명 확인:
GitHub 저장소로 이동:
Settings > Secrets and variables > Actions로 이동:
Secrets 추가:
AWS_ACCESS_KEY_ID
와 AWS_SECRET_ACCESS_KEY
라는 이름으로 앞서 생성한 IAM 사용자의 Access Key와 Secret Key를 각각 추가합니다.이제 GitHub Actions 워크플로우 파일을 작성하여 CI/CD 파이프라인을 정의합니다.
워크플로우 파일 생성:
.github/workflows/
폴더를 생성합니다.deploy.yml
파일을 생성합니다.워크플로우 파일 내용 작성:
name: Deploy To S3 And Invalidate CloudFront
on:
push:
branches:
- main
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: GitHub Repository 가져오기
uses: actions/checkout@v3
- name: 의존성 설치
run: npm install
- name: 빌드하기
run: npm run build
- name: AWS 인증 설정
uses: aws-actions/configure-aws-credentials@v1
with:
aws-region: ap-northeast-2
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
- name: S3 기존 파일들 전체 삭제
run: |
aws s3 rm --recursive s3://wdohoon
- name: 빌드된 파일 S3에 업로드
run: |
aws s3 sync ./build s3://wdohoon
- name: CloudFront 무효화
run: |
aws cloudfront create-invalidation --distribution-id YOUR_DISTRIBUTION_ID --paths "/*"
설명:
main
브랜치에 푸시(push) 이벤트가 발생하면 워크플로우가 실행됩니다.deploy
잡은 ubuntu-latest
환경에서 실행됩니다.actions/checkout@v3
액션을 사용하여 저장소의 코드를 가져옵니다.npm install
명령어로 프로젝트의 의존성을 설치합니다.npm run build
명령어로 프로젝트를 빌드합니다.aws-actions/configure-aws-credentials@v1
액션을 사용하여 AWS 자격 증명을 설정합니다.aws s3 rm --recursive s3://wdohoon
명령어로 S3 버킷의 기존 파일을 모두 삭제합니다.aws s3 sync ./build s3://wdohoon
명령어로 빌드된 파일을 S3 버킷에 동기화합니다.aws cloudfront create-invalidation
명령어로 CloudFront 배포를 무효화하여 변경 사항을 반영합니다.주의사항:
YOUR_DISTRIBUTION_ID
를 실제 CloudFront 배포 ID로 교체해야 합니다.wdohoon
을 실제 사용 중인 버킷 이름으로 변경해야 합니다.워크플로우 파일 커밋 및 푸시:
deploy.yml
파일을 커밋하고, main
브랜치에 푸시합니다.git add .github/workflows/deploy.yml
git commit -m "Add CI/CD workflow for deploying to S3 and CloudFront"
git push origin main
GitHub Actions 실행 확인:
AWS S3 및 CloudFront 확인:
웹사이트 접근:
CI/CD는 소프트웨어 개발과 배포의 효율성을 크게 향상시킬 수 있는 중요한 방법론입니다. GitHub Actions는 이러한 CI/CD 프로세스를 손쉽게 구현할 수 있는 강력한 도구를 제공하며, IAM은 이러한 자동화된 프로세스가 안전하게 동작할 수 있도록 필수적인 보안 관리 기능을 제공합니다. 이 가이드를 따라 GitHub Actions를 활용한 CI/CD 환경을 구축하면, 고품질의 소프트웨어를 빠르고 안전하게 배포할 수 있습니다.
자동화된 배포 파이프라인을 통해 개발자는 코드 작성에 집중할 수 있으며, 배포 과정에서 발생할 수 있는 오류를 최소화할 수 있습니다. 또한, CI/CD를 통해 팀 간 협업이 원활해지고, 제품의 품질과 사용자 경험을 향상시킬 수 있습니다.
지금 바로 CI/CD 환경을 구축하여 효율적인 개발과 안정적인 배포를 경험해 보세요!
참고 자료: