
1. 문제 인식
- 사용자가 늘어나면 트래픽 요구량이 증가하고, 반대로 줄어들 때도 있음.
- 온디맨드 확장/축소(Auto Scaling)이 필요함.
- 단일 서버(EC2 1대)로 운영하면 서버 장애 시 서비스 중단 위험 → 로드밸런서 + 다중 EC2 인스턴스 구조가 필요함.
2. 기본 흐름 정리
- 개발자 로컬 → GitHub Push
- Spring Boot 프로젝트 (
프로젝트E
)와 테스트 코드 작성. git push
하면 GitHub 저장소에 코드 반영.
- GitHub Actions (CI/CD 파이프라인)
- 푸시 이벤트(Trigger) 발생 → 자동 실행.
- 단계:
- 테스트 실행: 단위 테스트로 코드 안정성 검증.
- 빌드 (Jar 생성): Spring Boot 실행 가능한
jar
파일 생성. - 배포 (Deploy): AWS 환경에 jar 업로드 및 실행.
- AWS 배포 구조
- 로드밸런서(Load Balancer)가 클라이언트 요청을 여러 EC2 인스턴스에 분산.
- 특정 EC2 장애 발생 시, 로드밸런서가 다른 인스턴스로 자동 라우팅 → 무중단 서비스.
- 사용자가 많아지면 EC2 인스턴스를 복제(스케일 아웃), 줄어들면 축소(스케일 인).
3. 핵심 개념
🔹 CI/CD (지속적 통합 & 지속적 배포)
- CI: 코드 푸시 → 자동 테스트 & 빌드 → 품질 보장.
- CD: 빌드된 산출물(Jar)을 자동으로 서버에 배포.
- 개발자는
git push
만 하면 됨 → 나머지는 자동화.
🔹 무중단 배포 & 로드밸런싱
- 로드밸런서는 항상 정상 인스턴스에만 트래픽 전달.
- 신규 버전 배포 시 롤링 배포 방식으로 교체 → 서비스 끊김 없음.
- 특정 인스턴스 장애 발생해도 사용자 입장에서는 문제없이 서비스 사용 가능.
🔹 확장성 (Scalability)
- 오토 스케일링 그룹(ASG) 활용하면 트래픽 증가 시 EC2 자동 증설, 감소 시 자동 축소.
- 예: 동시 접속자 100명 → EC2 인스턴스 3개로 분산 처리.
4. 그림으로 요약 (업로드한 다이어그램 설명)
- 왼쪽: 개발자 → GitHub Push
- 중앙: GitHub Actions에서 Test → Build(Jar) → Deploy 자동 실행
- 오른쪽(AWS): 로드밸런서 + 다중 EC2 인스턴스 구조
- 장애난 EC2는 제외되고
- 나머지 EC2 인스턴스가 트래픽을 이어받아 무중단 서비스 보장
5. 앞으로 확장 포인트
- DB까지 붙이고, Blue/Green 배포 방식도 적용 가능.
- Docker & ECS(Fargate) → 컨테이너 기반 자동화로 발전 가능.
- CloudWatch + Auto Scaling → 실시간 트래픽 대응.
Share article