운영 중인 서비스를 Elastic Beanstalk으로 관리하게 되어 Elastic Beanstalk를 이용해 간단한Spring boot Application을 배포하고, CI/CD를 구축하는 과정을 기록하려고 한다.
Elastic Beanstalk이란?
Elastic Beanstalk은 AWS(Amazon Web Services)에서 제공하는 PaaS(Platform as a Service) 서비스다. 이를 통해 사용자는 웹 애플리케이션 및 서비스를 쉽게 배포, 관리, 그리고 확장할 수 있다. Elastic Beanstalk은 개발자가 애플리케이션 코드에 집중할 수 있도록 인프라 설정 및 관리를 자동화해준다.
주요 특징
-
자동화된 인프라 관리
- Elastic Beanstalk은 애플리케이션 실행에 필요한 리소스(EC2, S3, RDS 등)를 자동으로 생성, 설정, 그리고 연결한다.
- 인프라 설정과 관리를 사용자가 직접 수행할 필요 없이 Beanstalk이 이를 처리한다.
-
언어와 플랫폼 지원
- 다양한 언어와 플랫폼을 지원한다. (Java, .NET, PHP, Node.js, Python, Ruby, Go 등)
- Docker 컨테이너도 지원하여 더 많은 환경에서 활용 가능하다.
-
빠른 배포
- 애플리케이션 패키지(코드 및 설정)를 업로드하면 Elastic Beanstalk이 자동으로 애플리케이션을 실행할 환경을 구성한다.
-
확장성
- 사용량에 따라 리소스를 자동으로 확장하거나 축소한다(예: EC2 Auto Scaling, Elastic Load Balancing).
- 이를 통해 애플리케이션은 안정적으로 높은 트래픽을 처리할 수 있다.
-
모니터링
- Amazon CloudWatch와 통합되어 애플리케이션 상태를 실시간으로 모니터링할 수 있다.
- 대시보드에서 애플리케이션 성능, 상태, 그리고 문제를 쉽게 파악할 수 있다.
-
사용자 제어
- Elastic Beanstalk은 완전 자동화된 서비스이지만, 필요 시 세부 설정을 사용자 지정할 수 있다.
- EC2 인스턴스의 유형, 데이터베이스 설정, 네트워킹 등을 직접 설정 가능하다.
Elastic Beanstalk의 구조
-
애플리케이션(Application)
- 사용자가 배포하려는 전체 프로젝트다.
-
환경(Environment)
- 애플리케이션이 실행되는 실행 환경이다.
- Load Balancer가 있는 프로덕션 환경 또는 단일 EC2 인스턴스 환경을 설정할 수 있다.
-
애플리케이션 버전(Application Version)
- Elastic Beanstalk에서 관리하는 특정 애플리케이션 배포 패키지다.
-
환경 구성(Environment Configuration)
- Elastic Beanstalk 환경의 설정 세부사항이다(인스턴스 유형, 데이터베이스, 네트워킹 등).
사용 사례
-
웹 애플리케이션 배포
- 블로그, 전자 상거래 웹사이트 등 다양한 웹 애플리케이션을 빠르게 배포 및 확장 가능.
-
백엔드 API
- 모바일 앱 또는 웹 애플리케이션의 백엔드 서비스로 사용.
-
실험 및 프로토타이핑
- 새로운 기능을 빠르게 배포하고 테스트할 수 있는 환경 제공.
-
자동 확장 요구가 있는 애플리케이션
- 애플리케이션의 트래픽 증가에 따라 동적으로 확장이 필요한 경우 적합.
장단점
장점
- 간편성: 코드만 업로드하면 실행 환경이 자동으로 구성.
- 확장성: Auto Scaling과 Load Balancing이 내장되어 트래픽 증가를 처리 가능.
- 통합: AWS 서비스(S3, RDS, CloudWatch 등)와 원활히 연동.
- 유연성: 자동화된 설정을 기본으로 하되, 필요 시 사용자 정의 가능.
단점
- 복잡한 커스터마이징에 비적합: 자동화된 기능은 세부적인 사용자 설정에는 제한이 있을 수 있음.
- 학습 필요: Elastic Beanstalk의 자동화 및 설정 방식을 이해해야 최적의 활용이 가능.
Elastic Beanstalk는 사용하는 리소스 외 비용이 필요하지 않기 때문에 빠르게 애플리케이션을 배포하고 관리하고자 하는 사용자에게 특히 유용한 서비스다.