CI/CD (Continuous Integration, Continuous Delivery/Deployment)

아로롱·2025년 1월 2일

동상이농

목록 보기
5/5

CI / CD

  • CI (Continuous Integration, 지속적 통합): 개발자가 작성한 코드를 중앙 저장소에 자주 병합하며, 자동화된 빌드와 테스트를 통해 코드의 품질을 지속적으로 검증하는 프로세스.
    • 주요 목표: 코드 충돌 방지, 문제 조기 발견, 개발 속도 향상
  • CD (Continuous Delivery/Deployment, 지속적 배포/전달)
    • Continuous Delivery: 코드가 빌드 및 테스트를 거쳐 프로덕션에 배포할 준비가 된 상태를 자동화
    • Continuous Deployment: 배포 과정까지 완전히 자동화하여 코드 변경이 즉시 프로덕션에 반영

💻 사용 경험

저는 CI/CD 환경을 GitHub Actions, Docker, AWS ECR를 활용해 구축한 경험이 있습니다.
프로젝트는 MSA(Microservices Architecture) 구조로 구성되어 있었으며, 각 서비스는 API Gateway 를 통해 연결하였으며, 컨테이너 기반의 Kubernetes(Pod)를 사용해 배포했습니다.

GitHub Actions

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 을 활용한 이미지 관리

Docker 로 각 서비스 별 이미지 생성 후, AWS ECR 에 저장

API Gateway 및 MSA 연결

API Gateway를 통해 각 서비스(Pod) 간의 통신을 설정
서비스별로 분리된 컨테이너 이미지를 Kubernetes 환경에서 실행하고, Gateway를 통해 엔드포인트를 통합 관리

💡

GitHub ActionsDocker 의 자동화를 통해 수작업 배포 과정을 제거하여 효율성을 향상시켰으며, 빌드와 테스트를 자동화하여 코드 품질을 유지하며 안정성을 확보하였습니다.
또, MSA 구조와 Kubernetes 를 활용해 개별 서비스의 독립 배포 및 확장성을 확보해 코드의 유연성을 강화하였습니다.

profile
Dilige, et fac quod vis

0개의 댓글