AWS에서 제공하는 관리형 서비스로 애플리케이션 배포와 확장성 관리를 간소화 한 것
개발자가 서버 인프라의 세부 설정에 신경 쓰지 않고도 웹 애플리케이션 및 서비스를 쉽게 배포하고 관리할 수 있도록 해주는 PaaS(Platform as a Service)
프로비저닝, 로드 밸런싱, 자동 스케일링, 모니터링 등 다양한 인프라 관리 작업을 자동화 한다.
코드를 업로드하기만 하면 애플리케이션 배포에 필요한 환경을 자동으로 설정, 구성 및 관리한다.
나는 이전 게시글들을 통해 대략적인 구조를 세팅하면서 Elastic Beanstalk으로 환경을 만든 뒤 배포를 했었다.
1. 프로비저닝(Provisioning)
: 필요한 컴퓨팅 리소스(서버, 네트워크, 소프트웨어)를 준비하고 설정하는 과정이다.
필요한 하드웨어를 구성하고 소프트웨어를 설치 및 설정하여 시스템이나 서비스가 작동할 준비를 하는 것을 포함하며 자동화하거나 수동으로 할 수 있다.
2. 로드 밸런싱(Load Balancing)
: 네트워크 트래픽이나 애플리케이션 요청을 여러 서버에 균등하게 분배하는 기술이다.
단일 서버 과부하 방지 및 자원의 효율적 사용으로 전체 시스템의 가용성과 성능을 향상시킨다.
3. 자동 스케일링(Auto Scaling)
: 컴퓨팅 리소스(서버의 수)를 확장하거나 축소하는 기능으로 사용량이 증가할 때 자동으로 리소스를 추가하고, 사용량이 감소할 때 리소스를 줄여 비용을 절감한다.
4. 모니터링(Monitoring)
: 시스템이나 네트워크의 성능을 지속적으로 관찰하고 기록하는 과정이다.
신속하게 문제를 감지하고 대응할 수 있으며, 시스템의 성능을 최적화하고 유지 관리 계획을 수립하는 데 필요한 데이터를 제공한다.

Web Server Environments - AWS Elastic Beanstalk
위 링크를 통해 더 자세하게 알 수 있다.
Environment를 위해 만든 AWS 리소스 하나에는 Elastic Load Balancer(다이어그램의 ELB), Auto Scaling 그룹, 하나 이상의 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스가 포함된다는 것과 함께 개념에 대해 알려주니 한 번 읽어보는 것도 좋다.
간단하게 말하면 애플리케이션을 실행하는 모든 리소스를 환경으로 관리 가능하다.
Host Manager(HM)
: 소프트웨어 구성 요소가 각 Amazon EC2 인스턴스에서 실행된다.

내가 배포할 때 github-action을 활용해서 했었는데 그것과 관련해서 RDS 세팅부터 사용했던 deploy.yml에 대해 설명하겠다.
우선 내가 했던 백엔드 deploy.yml에 대해서 github에 올려둔 것을 함께 확인할 수 있도록 올린다.
위와 같이 deploy.yml을 활용해서 했었는데
env:
RDS_HOSTNAME: ${{ secrets.RDS_HOSTNAME }}
RDS_PORT: ${{ secrets.RDS_PORT }}
RDS_DB_NAME: ${{ secrets.RDS_DB_NAME }}
RDS_USERNAME: ${{ secrets.RDS_USERNAME }}
RDS_PASSWORD: ${{ secrets.RDS_PASSWORD }}
SECRET_KEY: ${{ secrets.SECRET_KEY }}
TOKEN_SECRET: ${{ secrets.JWT_SECRET }}
여기에 secrets. 과 같은 형태로 해서 GitHub에서 Repository -> Settings 에서

Actions에서 New repository secret 버튼을 통해 정의할 수 있다.
등등 여러가지 본인의 프로젝트에서 적용하면서 비밀로 해야 하는 것들을 저장해두고 환경 변수를 통해 나타낼 수 있다.
추가로 Elastic Beanstalk 을 만들 때도 그 변수를 정의해줘야 하는 것들이 있는데 그것 또한 고려해서 작성하겠다.
나는 MariaDB를 사용했었는데 세팅하는 과정을 적어보자면
1. 표준 생성
2. MariaDB

3. 인스턴스 식별자는 편한대로 마스터 사용자 이름, 마스터 암호는 작성하고 꼭 기억해두기
4. VPC : 새 VPC 생성
5. DB 서브넷 그룹 : 새 DB 서브넷 그룹 생성
default vpc보단 vpc를 새로 만들어서 하는 것이 좋다.
퍼블릭 액세스 : 예 로 바꿔준 뒤 그대로 생성하면 된다.규칙 추가 -> 유형 : MYSQL/Aurora -> 소스 Anywhere-IPv4위 과정을 추가하면 3306 포트를 추가해주게 된다.
RDS 세팅은 이게 끝이다.
나는 위의 deploy.yml에서
RDS_DB_NAME : learnsmatedbRDS_USERNAME : intbyte이런 식으로 github secrets에 넣어뒀었다.
RDS 계정을 통해 접근해 DB 활용에 어려움을 느낄까봐 추가한다.
우선 본인의 RDS 마스터 사용자 계정, 암호를 통해 접근한 뒤SHOW databases; -- mysql 데이터베이스로 계정 정보 확인하기 USE mysql; -- 기본 적으로 제공되는 mysql database SELECT * FROM user; -- mysql database에서 user를 확인해 계정이 추가된 것을 확인한다. -- 2) 데이터베이스 생성 후 계정에 권한 부여 CREATE DATABASE learnsmatedb; -- swcamp 계정의 권한 확인하기 SHOW GRANTS FOR 'intbyte'@'%'; GRANT ALL PRIVILEGES ON learnsmatedb.* TO 'intbyte'@'%'; -- learnsmatedb에 대한 모든 권한 부여 SHOW GRANTS FOR 'intbyte'@'%'; USE learnsmatedb;이런 형태로 권한이 주어졌는지 일단 확인한 뒤 활용할 수 있다.
Procfile
web: appstart
build.gradle 수정 : 하나의 jar 파일만 생성 가능하도록 하는 설정이다.
jar {
enabled = false
}
유의해야할 점
나는 deploy.yml을 보면 프로젝트 파일과 내가 deploy.yml을 해둔 파일과 위치가 달라서
Learnsmate라는 프로젝트와 같은 위치에.github패키지가 있다.
그래서 프로젝트 안에 없기 때문에working-directory: LearnsMate라는 코드를 deploy.yml 곳곳에 작성해둔 것을 확인할 수 있을 것이다.
나와 다르게 프로젝트 안에 넣어둔 경우에는 deploy.yml을 다르게 작성해야 한다.
반드시Generate deployment package부분에서 본인의 위치에 맞게 deploy.zip을 생성하게끔 유의하며 사용하자.
application_name: intbyte-env
environment_name: Intbyte-env
나는 이런 식으로 했었다.
aws-elasticbeanstalk-service-role 권한

aws-elasticbeanstalk-ec2-role 권한

위와 같이 권한을 세팅해주면 된다.
ap-northeast-2a 로 된 서브넷 2개 선택EC2 보안 그룹 : elb 이름으로 만들었던 보안 그룹 선택 (나는 intbyte-sg-elb로 만들었었다.)
인스턴스 유형 : 일단은 t3.micro로 하되 늘리고 싶으면 나중에 늘릴 수 있다.
근데 바꾸게 되면 대상 그룹에서 해제가 된다.. 난 이것 때문에 프로젝트 발표 직전에 뭐가 문제인지 열심히 찾았었는데 해제가 되니까 다시 세팅해주면 잘 될 것이다.
환경 속성 : 이건 안 건드려도 된다.
나중에 smtp로 이메일 인증을 하기 위해서 그 때는 여기에 추가를 해줘야 한다. 내 deploy.yml을 자세히 보면 SMTP 에 관해서도 환경 변수로 정의를 해뒀는데 그것과 마찬가지로 Elastic Beanstalk 만들 때 환경 변수에도 추가해주면 된다.
위 9가지 과정을 하게 되면 1개를 만든 것이다.
근데 우리는 가용 영역이 a인 것과 c인 것을 만들 것이기 때문에 6번 과정에서 ap-northeast-2c 인 것들로 하나를 더 만들자.
deploy.yml에도 2개로 만들었었다. 그걸 참고해서 만들면 될 것이다.
이제 프론트엔드 관련해서도 Elastic Beanstalk을 만들건데
프론트엔드와 백엔드는 다른 vpc 영역에 속한다. 그래서 vpc부터 새로 만들어야 한다.
VPC 등 선택, 이름과 Ipv4 CIDR 블록 기입기존에는
VPC만을 눌러서 각각 만들어줬었지만 해당 선택을 하면 이 VPC에 맞춰 여러 가지 서브넷, 인터넷 게이트웨이, 라우팅 테이블과 같은 것들을 만들어준다.

프로젝트 이름에 맞춰서 구분되게끔 위와 같이 해준 뒤
가용 영역 수 : 2

백엔드 VPC도 a, c로 했으니 프론트엔드 또한 a, c로 해야 한다.
퍼블릭 서브넷 수 : 2
프라이빗 서브넷 수 : 0
NAT 게이트웨이 : 없음
위 5가지를 한 뒤 생성해주면 프론트엔드 VPC가 생성이 된다.
이제 프론트엔드 Elastic Beanstalk을 만들어보자.
application_name: intbyte-v-env
environment_name: Intbyte-v-env
나는 이런 식으로 했었다.
ap-northeast-2a, ap-northeast-2c 둘 다 선택나머지는 따로 선택할 것은 없다.
Procfile
web: npm install express && npm start
package.json 수정 : 주석으로 처리해둔 부분에 추가했다고 표시를 한 것
실행할 때는 주석 부분을 삭제해야 한다.
{
"name": "veb_proj",
"version": "0.0.0",
"private": true,
"type": "module",
"scripts": {
"dev": "vite",
"build": "vite build",
"preview": "vite preview",
"start": "node server.js" // server.js 웹 서버 실행
},
"dependencies": {
"express": "^4.19.2", // express dependency 추가
"vue": "^3.5.12"
},
"devDependencies": {
"@vitejs/plugin-vue": "^5.1.4",
"vite": "^5.4.10"
}
}