Skip to content

장현서 [Sprint 8] AWS 배포 및 CI/CD 심화 구현 - #135

Open
totobabo01 wants to merge 8 commits into
codeit-bootcamp-spring:장현서from
totobabo01:release
Open

장현서 [Sprint 8] AWS 배포 및 CI/CD 심화 구현#135
totobabo01 wants to merge 8 commits into
codeit-bootcamp-spring:장현서from
totobabo01:release

Conversation

@totobabo01

@totobabo01 totobabo01 commented Aug 12, 2026

Copy link
Copy Markdown
Collaborator

요구사항

기본

  • AWS ECS Fargate 기반 애플리케이션 배포
  • Amazon RDS PostgreSQL 연동
  • Amazon S3 BinaryContent 저장소 연동
  • ECS Task Role을 통한 S3 접근 권한 구성
  • Amazon ECR Public에 Docker 이미지 Push
  • ECS Task Definition 및 Service 구성
  • GitHub Actions 기반 자동 배포 구성
  • GitHub OIDC를 통한 AWS IAM Role 인증
  • /actuator/health를 통한 애플리케이션 상태 확인
  • 실제 ECS 환경에서 메시지 및 파일 업로드 기능 검증

심화

  • Docker Multi-stage Build 적용
  • Docker 이미지 최적화 및 레이어 캐시 활용
  • PR 및 main 브랜치 Push 시 CI Workflow 실행
  • GitHub Actions에서 전체 테스트 자동 실행
  • JaCoCo를 통한 테스트 커버리지 리포트 생성
  • Codecov를 통한 테스트 커버리지 측정
  • README에 Codecov Coverage Badge 추가
  • 실제 AWS S3 연동 테스트를 CI 환경에서 조건부 제외하도록 구성
  • release 브랜치 Push 기반 CD Workflow 구성
  • GitHub Actions Variables를 활용한 AWS/ECS 설정 분리
  • GitHub OIDC Trust Policy에 release 브랜치 허용
  • Docker 이미지에 latest 태그와 Git Commit SHA 태그 적용
  • Amazon ECR Public에 두 이미지 태그 Push
  • 배포 전 ECS Service Desired Count를 0으로 변경
  • 신규 ECS Task Definition Revision 등록
  • 새로운 Task Definition을 ECS Service에 적용
  • 배포 후 Desired Count를 1로 복구
  • ECS Task RUNNING 및 실제 배포 성공 검증

주요 변경사항

  • GitHub Actions CI Workflow를 추가하여 main 대상 Pull Request 및 main Push 시 자동으로 테스트가 실행되도록 구성했습니다.
  • Gradle에 JaCoCo를 적용하고 XML Coverage Report를 생성하도록 설정했습니다.
  • Codecov Action을 연동하여 GitHub Actions에서 생성된 JaCoCo Coverage Report가 자동 업로드되도록 구성했습니다.
  • Codecov에서 main 브랜치 기준 테스트 커버리지가 정상적으로 집계되는 것을 확인했습니다.
  • README에 Codecov Coverage Badge를 추가했습니다.
  • 실제 AWS S3 API를 사용하는 AWSS3TestRUN_AWS_S3_TESTS=true 환경에서만 실행되도록 설정하여 CI 환경에서 AWS Profile 부재로 테스트가 실패하지 않도록 개선했습니다.
  • 로컬 환경에서는 RUN_AWS_S3_TESTS=true 설정 후 실제 S3 연동 테스트가 정상적으로 통과하는 것을 확인했습니다.
  • CD Workflow 실행 기준 브랜치를 main에서 release로 변경했습니다.
  • AWS Region, ECR Repository URI, ECS Cluster, ECS Service, ECS Task Definition 정보를 GitHub Actions Repository Variables로 분리했습니다.
  • AWS Access Key / Secret Key를 저장하지 않고 GitHub OIDC를 통해 AWS IAM Role을 Assume하도록 구성했습니다.
  • AWS IAM Trust Policy에 main, release 브랜치의 GitHub OIDC 접근을 허용했습니다.
  • Docker 이미지 빌드 시 Git Commit SHA 태그와 latest 태그를 동시에 생성하도록 수정했습니다.
  • 동일 Docker 이미지를 Amazon ECR Public에 SHA 및 latest 태그로 Push하도록 구성했습니다.
  • 새로운 이미지 배포 전에 ECS Service Desired Count를 0으로 조정하고, 신규 Task Definition 적용 후 다시 1로 복구하도록 배포 프로세스를 구성했습니다.
  • 현재 Task Definition을 기반으로 새로운 이미지 URI가 적용된 신규 Revision을 자동 생성하도록 구성했습니다.
  • release 브랜치 Push를 통해 실제 GitHub Actions CD Workflow를 실행하고 배포 성공을 확인했습니다.
  • Amazon ECS에서 신규 Task Definition discodeit-task:7이 적용되고 Task가 정상적으로 RUNNING 상태가 되는 것을 확인했습니다.
  • Amazon ECR Public에서 동일 이미지에 Git Commit SHA 태그와 latest 태그가 모두 생성된 것을 확인했습니다.

테스트 및 검증

  • GitHub Actions CI Test 성공
  • main 브랜치 Push CI Test 성공
  • JaCoCo Coverage Report 생성 성공
  • Codecov Coverage Upload 성공
  • Codecov main 브랜치 커버리지 정상 집계
  • README Codecov Badge 적용 확인
  • 로컬 실제 AWS S3 연동 테스트 성공
  • GitHub Actions Release CD Workflow 성공
  • GitHub OIDC AWS 인증 성공
  • Amazon ECR Public 이미지 Push 성공
  • SHA / latest 이미지 태그 생성 확인
  • ECS 신규 Task Definition Revision 생성 확인
  • ECS Service 배포 상태 SUCCESS 확인
  • ECS Desired Task 1 / Running Task 1 확인
  • ECS 컨테이너 discodeit-app RUNNING 확인
  • /actuator/health 정상 응답 확인

스크린샷

  • Codecov Coverage 결과 화면
image

멘토에게

  • CI 환경에서는 로컬 AWS Profile을 사용할 수 없기 때문에 실제 AWS S3 통합 테스트는 RUN_AWS_S3_TESTS=true 환경변수가 설정된 경우에만 실행되도록 구성했습니다.
  • GitHub Actions의 AWS 인증은 장기 Access Key / Secret Key 방식 대신 GitHub OIDC와 IAM Role을 사용하도록 구성했습니다.
  • CD는 release 브랜치 Push를 기준으로 실행되며, Docker 이미지는 latest와 Git Commit SHA를 모두 태그로 사용합니다.
  • ECS 배포 과정에서 기존 Service Desired Count를 0으로 내린 후 신규 Task Definition을 적용하고 다시 Desired Count를 1로 복구하도록 구성했습니다.
  • 실제 release 브랜치 Push를 통한 ECR Push 및 ECS 재배포까지 정상 동작하는 것을 확인했습니다.

@totobabo01 totobabo01 changed the title [Sprint 8] AWS 배포 및 CI/CD 심화 구현 장현서 [Sprint 8] AWS 배포 및 CI/CD 심화 구현 Aug 12, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant