1. 클라우드 인프라 도입 배경 및 AWS 활용 계획
클라우드 도입은 초기 하드웨어 투자 비용을 절감하고 자원을 유연하게 확장할 수 있는 장점이 있다. 그러나 자원 관리 소홀 시 과도한 비용 발생 및 클라우드 사업자에 대한 의존이 단점으로 작용할 수 있다.
EC2 (Elastic Compute Cloud)
EC2는 Jenkins Master와 각 Agent를 구동하는 가상 서버로 사용된다. 워크로드에 따라 인스턴스 사양을 변경하여 성능과 비용의 최적화를 구현한다.
AMI (Amazon Machine Image)
AWS AMI를 통해 OS, 라이브러리 및 환경 설정 상태를 이미지로 보관한다. 이를 통해 서버 장애 시 즉각적인 복구가 가능하며 동일한 환경에서 모든 Agent가 동작하도록 보장한다.
ECR (Elastic Container Registry)
ECR은 빌드된 도커 이미지를 저장하는 중앙 저장소로 활용된다. 이는 Jenkins 파이프라인과 연동되어 검증된 이미지만을 안전하게 배포할 수 있는 신뢰 체인을 형성한다.
S3 (Simple Storage Service)
S3는 정적 웹 에셋, 빌드 로그, 파이프라인 결과물을 저장하는 데에 사용된다. 높은 내구성을 바탕으로 데이터를 안전하게 보존하며, 프론트엔드 배포를 위한 효율적인 스토리지 역할을 수행한다.
2. CI/CD 파이프라인 아키텍처 및 Agent 설계
본 파이프라인은 Jenkins Master-Agent 구조를 활용하여 환경 격리와 리소스 효율성을 극대화하도록 설계되었다.
Agent 용도별 분리
- jnlp: Docker 및 Terraform 클라이언트를 포함하여 인프라 제어와 통신을 담당한다.
- builder: 단위 테스트 및 빌드 전용 Agent로, 특정 런타임(Node.js 등)에 의존적인 작업을 격리한다.
- dind (Docker-in-Docker): 컨테이너 이미지 빌드를 위한 독립적 Docker 데몬 환경을 제공한다.
- tester: Selenium 등 무거운 테스트 도구를 실행하여 테스트 환경 독립성을 보장한다.
3. 단계별 상세 공정 및 설계 근거
📄 단계 1: 소스 코드 검증 및 단위 테스트 (CI)
- 주요 작업: SCM Checkout, Unit Test, Coverage Report (c8 활용)
- 목적 및 이유:
- 조기 발견 (Fail Fast): 코드 오류를 빌드 전 단계에서 조기에 발견하여 수정 비용을 절감한다.
- 정량적 품질 관리: c8을 활용한 코드 커버리지 측정으로 테스트 누락 구간을 수치화하고 품질 관리를 강화한다.
📄 단계 2: 빌드 및 컨테이너 패키징
- 주요 작업: Production Build, Docker Image Build, AWS ECR Push
- 목적 및 이유:
- 환경 일관성 확보: Docker 컨테이너를 사용하여 환경 간의 의존성 문제를 근본적으로 제거한다.
- Artifact 관리: ECR에 빌드된 이미지를 버전별로 저장하여 즉각적인 롤백이 가능하게 한다.
📄 단계 3: 스테이징 배포 (IaC)
- 주요 작업: Terraform을 활용한 AWS EC2 스테이징 환경 프로비저닝 및 배포
- 목적 및 이유:
- 인프라의 코드화 (IaC): 서버 설정을 코드로 관리하여 재현성을 높이고 수동 설정 실수를 방지한다.
- 검증 환경 분리: Production과 동일한 조건에서 사전 테스트를 수행하여 배포 리스크를 줄인다.
📄 단계 4: 인수 테스트 및 자원 회수
- 주요 작업: Selenium 기반 E2E 테스트, 스테이징 리소스 삭제(destroy)
- 목적 및 이유:
- 사용자 관점 검증 (E2E): 실제 사용자 시나리오를 브라우저 수준에서 검증한다.
- 비용 최적화: 테스트 이후 임시 AWS 리소스를 삭제하여 불필요한 비용 발생을 방지한다.
📄 단계 5: 프로덕션 릴리즈 및 스모크 테스트
- 주요 작업: 최종 배포 및 서비스 정상 작동 확인
- 목적 및 이유: 배포 직후 핵심 기능을 점검하여 서비스 가용성을 확정한다.
4. 기대 효과
- 클라우드 네이티브 환경 최적화: AWS 서비스를 적재적소에 활용하여 인프라 관리 효율성을 증대할 수 있다.
- 배포 속도 및 안정성: IaC 및 자동화된 테스트를 통해 배포 주기를 단축하고 오류를 줄인다.
- 유연한 장애 대응: AMI와 ECR에 저장된 이미지를 활용해 재난 복구 및 롤백 능력을 강화할 수 있다.
'Programmers' 카테고리의 다른 글
| [85일차]컴퓨터의 언어부터 설계까지: 정보의 표현과 구조적 이해 (0) | 2026.01.21 |
|---|---|
| [84일차]모니터링 시스템과 전체 회고 (1) | 2026.01.19 |
| [82일차]Selenium 개요 및 구성 요소 및 테스트 예시 (0) | 2026.01.15 |
| [81일차]웹 기반 문서 편집기 제작 프로젝트 - 단위 테스트 (0) | 2026.01.14 |
| [80일차]웹 기반 문서 편집기 제작 프로젝트 설계 (0) | 2026.01.12 |