
저는 CI/CD 환경을 GitHub Actions, Docker, AWS ECR를 활용해 구축한 경험이 있습니다.
프로젝트는 MSA(Microservices Architecture) 구조로 구성되어 있었으며, 각 서비스는 API Gateway 를 통해 연결하였으며, 컨테이너 기반의 Kubernetes(Pod)를 사용해 배포했습니다.
push 또는 pull request 이벤트 발생 시 GitHub Actions 가 트리거되도록 설정
각 서비스별로 빌드, 테스트, Docker 이미지 생성, ECR 에 푸시하는 워크플로우 작성
# product
- name: build and push docker product images to ecr
env:
REGISTRY: ***.dkr.ecr.amazonaws.com
REPOSITORY: ***/product
run: |
docker build -t $REGISTRY/$REPOSITORY:latest \
-f ./product/Dockerfile ./product
docker push $REGISTRY/$REPOSITORY:latest
- name: eks kubectl apply
run: |
kubectl apply -f .product/k8s/product-depl.yml
kubectl rollout restart deployment product-deployment
(임의의 값으로 변경한 코드입니다.)
Docker 로 각 서비스 별 이미지 생성 후, AWS ECR 에 저장
API Gateway를 통해 각 서비스(Pod) 간의 통신을 설정
서비스별로 분리된 컨테이너 이미지를 Kubernetes 환경에서 실행하고, Gateway를 통해 엔드포인트를 통합 관리
GitHub Actions 와 Docker 의 자동화를 통해 수작업 배포 과정을 제거하여 효율성을 향상시켰으며, 빌드와 테스트를 자동화하여 코드 품질을 유지하며 안정성을 확보하였습니다.
또, MSA 구조와 Kubernetes 를 활용해 개별 서비스의 독립 배포 및 확장성을 확보해 코드의 유연성을 강화하였습니다.