또 다른 E2E 솔루션이 제공되었습니다. 이번에는 CI/CD, AWS EventBridge 및 ECS Fargate와 함께

발행: (2025년 12월 15일 오전 09:07 GMT+9)
5 min read
원문: Dev.to

Source: Dev.to

Solution Overview

한 해를 마무리하며 최신 엔드‑투‑엔드(E2E) 프로젝트를 만들었습니다. 사이드 프로젝트이지만 업무에 큰 도움이 될 것입니다. 우리는 서드‑파티 시스템에서 문서를 업로드하는 서비스를 운영하고 있습니다. 이 통합은 인증이 필요하고, 시스템은 매월 비밀번호를 교체하도록 강제합니다. 비밀번호가 만료되면 업로드와 다운로드가 실패하고, 이는 곧 운영 이슈로 이어집니다.

수동 업데이트와 누군가가 교체를 잊어버리는 위험을 없애기 위해 전체 과정을 자동화하는 스크립트를 만들었습니다.

해결책은 Selenium과 헤드리스 Chromium을 사용하는 Python 워커입니다. 일정에 따라 실행되며 완전한 CI/CD 파이프라인을 기반으로 합니다. main 브랜치에 푸시될 때마다 GitHub Actions가 OIDC를 통해 AWS IAM 역할을 가정(액세스 키 없음)하고 Docker 이미지를 빌드해 Amazon ECR에 푸시합니다. 이후 워크플로우는 새로운 ECS 태스크 정의 리비전을 등록해 컨테이너 이미지만 업데이트합니다.

Architecture Design

CI/CD

  • GitHub Actions: main에 푸시될 때 트리거됩니다.
  • OIDC 인증: 정적 자격 증명 없이 AWS IAM 역할을 가정합니다.
  • Docker 빌드 & 푸시: 이미지가 빌드되어 Amazon ECR에 저장됩니다.
  • 태스크 정의 업데이트: 업데이트된 이미지로 새로운 ECS 태스크 정의 리비전을 등록합니다.

Execution (EventBridge)

  • Amazon EventBridge가 29일마다 태스크를 트리거합니다.
  • 이 스케줄 덕분에 비밀번호 교체가 월간 만료 전에 이루어집니다.

ECS Cluster

  • 태스크는 ECS Fargate에서 퍼블릭 서브넷의 퍼블릭 IP와 아웃바운드 트래픽 허용 설정으로 실행됩니다.
  • 트리거되면 Fargate가 컨테이너를 시작하고 automation.py를 실행해 Selenium과 Chromium, Chromedriver를 구동, 시스템에 로그인해 비밀번호를 교체한 뒤 종료합니다.
  • 성공 시 태스크는 자동으로 종료 코드 0을 반환합니다.
  • 예외가 발생하면 로그가 CloudWatch에 전송되고, 오류가 Slack 알림 채널에 보고됩니다.

Architecture Decisions

AWS Lambda 대신 ECS Fargate를 선택한 것은 의도적인 결정이었습니다. Lambda에서 Selenium과 Chromium을 실행하려면 보통 커스텀 레이어와 세밀한 튜닝이 필요하고, 메모리, 패키지 크기, 실행 시간 제한에 쉽게 부딪히게 됩니다. Fargate를 사용하면 전체 환경이 Docker 이미지에 패키징되어 예측 가능한 런타임 동작과 유연한 CPU/메모리 할당을 제공하므로 이러한 워크로드를 훨씬 쉽게 운영할 수 있습니다.

결국 이것은 간단한 배치 워커입니다: 일정에 따라 실행되고, 하나의 작업을 수행한 뒤 종료됩니다. 헤드리스 브라우저 자동화에 있어 이 접근 방식이 더 직관적이고 신뢰성이 높았습니다.

Back to Blog

관련 글

더 보기 »