개요
AWS 환경의 대표적인 컨테이너 서비스인 ECS와 EKS 기반의 3 -Tier 아키텍쳐를 구축하고 CI/CD 자동화 파이프라인을 구성해 각 환경을 비교해볼 예정이다.
- 공통 구성요소
- Terraform 활용 IaC 기반 인프라 구성
- Spring Boot 애플리케이션은 JAR + Docker 방식으로 패키징
내장 tomcat을 사용해서 별도의 WAS 없이 자체적으로 구동된다. - CI/CD는 GitHub Actions, Jenkins, ArgoCD, CodeDeploy 등 상황에 맞게 구성
- Github 레파지토리 : 백엔드, 프론트엔드 프로젝트 및 Terraform 코드 저장소로 활용
- NAT : 프라이빗 서브넷에 위치한 리소스가 인터넷 접근이 필요할 때의 경로
상세 아키텍쳐
1. AWS ECS + Fargate 기반 3-Tier 아키텍쳐
AWS Management & 서버리스 서비스를 최대한 활용할 예정이다.
주요 목표는 3-Tier 아키텍쳐 구성하기 및 애플리케이션 배포환경 자동화
- WEB
- S3 + CDN(CloudFront) 활용 정적 캐싱
- Application
- ECS (Fargate): 서버리스 방식으로 컨테이너 애플리케이션 실행
- SpringBoot
- Database
- RDS (PostgreSQL): 백엔드 데이터베이스로 활용
- CI/CD
- Github Actions : CI
Github에 변경 사항이 발생되면 Github Actions는 자동으로 이벤트를 트리거하여 배포를 진행
빌드된 도커 이미지를 Amazon ECR에 업로드 - 별도 CD 툴 불필요 (ECS 자체에서 Rolling 업데이트를 지원해준다.)
- Github Actions : CI
- 기타
- ECR : Docker 이미지 저장소
- Route53 & ACM : 도메인 연결 및 HTTPS 인증서 발급 및 관리
- ALB : 클라이언트 요청 라우팅
[아키텍쳐 구성도 추가 예정]
2. EKS 기반 3-Tier 아키텍쳐
이 단계에서는 위에서 구축한 3-Tier 아키텍쳐에 대한 이해를 바탕으로
K8s 환경 구성 및 인프라 변경 관리를 GitOps 기반으로 자동화하는 것에 집중할 것이다.
또한 평소에 익숙하게 사용해온 Github Actions & CodeDeploy 대신 Jenkins와 ArgoCD를 사용해 볼 예정이다.
- WEB
- S3 + CDN(CloudFront) 활용 정적 캐싱
- ALB Ingress Controller를 통해 HTTP/HTTPS 요청을 EKS 내 서비스로 라우팅
- Application
- EKS
- SpringBoot : Docker 이미지로 빌드된 앱을 kubernetes deployment로 배포
- Database
- RDS (PostgreSQL): 백엔드 데이터베이스로 활용
- CI/CD
- Jenkins : CI. Docker 이미지 빌드 및 ECR 푸시
- Helm + ArgoCD:
- 기타
- ECR : Docker 이미지 저장소
- Route53 & ACM : 도메인 연결 및 HTTPS 인증서 발급 및 관리
- ALB + Ingress Controller : 외부 요청을 Ingress → Kubernetes 서비스로 전달
[아키텍쳐 구성도 추가 예정]
CI/CD 파이프라인 구조
1. 개발자의 Git push (main 브랜치 등으로)
2. Github Actions / Jenkins Webhook 트리거
- Github Actions
- 미리 설정된 Github Actions 워크플로우 (main.yml)을 자동으로 트리거
- Jenkins
- 미리 설정된 webhook을 통해 jenkins 서버로 업데이트 전송
3. CI
- Github Actions
- Github Actions Runner가 최신 소스 코드를 가져온다.
- Springboot 애플리케이션을 JAR 파일로 빌드한다.
- Dockerfile을 사용해 Docker 이미지를 생성한다.
- ECR에 푸시
- Jenkins
- 미리 정의된 job 설정 (github repository, URL, branch, 자격증명 등)에 따라 jenkins 워크스페이스에 최신 소스 코드 다운로드
- Springboot 애플리케이션을 JAR 파일로 빌드한다.
- Dockerfile을 사용해 Docker 이미지를 생성한다.
- ECR에 푸시
- (EKS 환경에서) 빌드된 새로운 도커 이미지의 태그/uri등을 Helm chart 내의 이미지 버전 정보에 반영
4. CD
- ECS
- ECR 이미지 변경이 감지되면 ECS의 Rolling Update 수행
- 새로운 Task definition에 따라 새로운 컨테이너 점진적으로 시작하고, 기존 컨테이너 종료 & 트래픽 라우팅
- ArgoCD (EKS 환경에서)
- 감지된 변경 사항을 바탕으로 EKS 클러스터에 배포된 deployment, service, ingress 등의 리소스를 자동으로 업데이트
- Ingress 리소스가 업데이트되면 ALB Ingress Controller는 새로운 설정에 따라 ALB를 업데이트하거나 새로운 ALB를 프로비저닝해 새로운 버전의 pod로 라우팅
'DevOps' 카테고리의 다른 글
AWS 컨테이너 서비스 3-Tier w/테라폼 & CI/CD 구성하기 - (3) Terraform으로 AWS 아키텍쳐 구성하기 (ECS) (1) | 2025.06.06 |
---|---|
AWS 컨테이너 서비스 3-Tier w/테라폼 & CI/CD 구성하기 - (2) 데모 애플리케이션 개발 (1) | 2025.06.02 |