지난 글에서는 AWS 네트워크(ALB, VPC, 서브넷, SG)까지 살펴봤다.
이제 드디어 개발자가 main에 Push → AWS에서 자동으로 배포되는 “전체 자동 배포 파이프라인”을 정리해본다.
내가 이번 프로젝트에서 구축한 방식 그대로이며, 실무에서 가장 많이 쓰는 구조기도 하다.
전체 흐름 요약
개발자가 main에 Push
↓
GitHub Actions 실행 (deploy.yml)
↓
Docker 이미지 생성
↓
ECR에 Push
↓
ECS(Fargate) 서비스 업데이트
↓
Fargate가 새 컨테이너 실행
↓
ALB 헬스체크 → 정상 컨테이너에만 트래픽 연결
이제 단계별로 설명해보자.
개발자가 main에 Push
그냥 평소처럼 코드를 작성하고
main 브랜치에 push 한다.
그러면 GitHub Actions가 자동으로 실행된다.
GitHub Actions 실행 (deploy.yml)
/.github/workflows/deploy.yml 에서는 배포 전체 로직이 정의된다.
액션이 실행되면 자동으로:
- 레포지토리 코드 checkout
- AWS IAM credential 로 로그인
- Docker build
- ECR 로그인
- 이미지 push
- ECS에게 “새 버전으로 배포해라” 요청
이 과정을 GitHub Actions가 우리 대신 수행해주는 것이다.
Docker 이미지 생성
Actions가 서버 환경(ubuntu)에서 다음 명령을 실행한다:
docker build -t {ECR}/gitfit:SHA .
docker tag {ECR}/gitfit:SHA {ECR}/gitfit:latest
여기서 중요한 포인트는 이미지에 두 가지 태그가 붙는다는 것.
- latest → 최신 배포 버전
- ${GITHUB_SHA} → 특정 커밋 기반 이미지 (정확한 재현 가능)
이건 지난 “태그 전략”에서 설명했듯 실무에서 매우 중요하다.
ECR에 Docker 이미지 Push
Docker 이미지를 만들었다면
AWS ECR에 업로드한다:
docker push repo:SHA
docker push repo:latest
이제 AWS는 새 컨테이너 이미지를 보관하고 있는 상태가 된다.
ECS(Fargate) 서비스 업데이트 요청
Actions가 다음 명령을 실행한다:
aws ecs update-service --force-new-deployment
이 말은 “ECS야, 새로운 이미지로 다시 배포해!”라고 신호를 보내는 것이다.
그럼 ECS는 다음을 자동으로 수행한다:
- 새로운 Task Definition 생성
- Task Definition에 최신 이미지 적용
- Fargate에 “새 컨테이너 띄워라” 요청
Fargate가 실제 컨테이너 실행
Fargate는 “컨테이너 실행 엔진”이다. 새 Task를 실행하기 위해:
- ECR에서 최신 이미지 pull
- Task Definition의 환경변수(env_vars) 적용
- CPU/메모리 할당
- Spring Boot 실행 (예: 포트 80으로)
ALB가 헬스체크
Fargate가 새 컨테이너를 띄우면
ALB는 계속 헬스체크를 한다.
헬스체크 URL 예:
/actuator/health
상태가 “UP”이면:
- 요청을 새 컨테이너로 전달
상태가 “DOWN”이면: - 트래픽 전달 X
- ECS가 자동 복구
이 구조 덕분에 무중단 배포가 이루어진다.
유저는 그냥 API 호출하면 끝
이제 /api/... 로 요청이 오면:
사용자 → ALB → Healthy ECS Task → Spring Boot → RDS
이렇게 전체 배포 흐름이 자동으로 완성된다.
마무리
여기까지가 우리가 구축한 전체 배포 파이프라인이다.
✔ GitHub Actions → CI
✔ Docker → 이미지
✔ ECR → 이미지 저장
✔ ECS(Fargate) → 컨테이너 운영
✔ ALB → 트래픽 관리
이것을 한번 서비스 아키텍처로 끄적여봤다.

이게 맞을진 모르겠지만,,, 일단 이런 서비스아키텍처로 표현해보면 이렇다!
이 모든 것을 코드 한 번으로 만들 수가 있다!! 바로 terraform이다 다음포스팅에서 다뤄보겠다!
'개발 > infra' 카테고리의 다른 글
| [infra/terraform] aws 네트워크 구조 - ALB, VPC, 서브넷, 보안그룹 (0) | 2025.11.21 |
|---|---|
| [infra/terraform] ECR이란? (0) | 2025.11.21 |
| [infra/terraform] ec2와 ecs, fargate (0) | 2025.11.19 |
| [infra/terraform] 도커가 뭘까? (0) | 2025.11.19 |