AWS (Amazon Web Services)에는 웹사이트를 배포할 수 있는 다양한 환경을 제공한다.
너무나 다양해서 뭐가 뭔지 혼란이 올 지경이다. AWS를 완전히 섭렵하는데에는 상당한 시간이 걸릴 듯 하다.
개인적으로 느끼기에 EC2
라는 서비스가 가장 많이 사용되는 듯 하며, EC2의 사용이 복잡하다는 점을 보완해주는 Elastic Baenstalk
이라는 서비스도 존재한다.
이 글에서는 Elastic Baenstalk
의 간략한 개념과, 배포 방법에 대해서 공유하려한다.
전문적인 글은 아니고, 초보자의 관점에서 어떻게 배포할 수 있는지에 대해 초점을 맞추어 작성되었으며, 때문에 다소 부족한 설명이나 잘못된 내용이 있을 "수" 있다는 점 양해바란다.
Elastic Baenstalk
이름이 장황하다. 이 이름 자체의 의미는 무엇일까?
찾아보니 "Elastic"
은 확장성
과 유연성
을 의미하며, "Beanstalk"
은 식물에서 줄기와 잎을 지지하는 구조물
을 의미한다고 한다.
왜 이런 이름을 붙였을까?
Elastic Baenstalk
는 개발자가 애플리 케이션을 쉽게 배포하고 확장할 수 있도록 해주는 Paas(Platform as a Service)서비스
이다. 개발자가 애플리케이션 코드를 업로드하면, Elastic Baenstalk는 배포, 프로비저닝, 로드 밸런싱, 확장, 모니터링 등을 자동으로 처리해준다.
이처럼 클라우드에서 웹 애플리케이션을 배포하고 운영하는 데 필요한 기본 구조물을 제공하므로, 개발자들은 애플리케이션 코드에 집중할 수 있다. 이러한 특성으로 인해 Elastic Baenstalk 이라는 이름이 붙어진듯 하다.
EC2 (Elastic Compute Cloud)
는 Baenstalk와 마찬가지로 "Elastic"으로 시작하지만, 뒤에 C로 시작되는 단어가 두번이나 등장하기 때문에 "C2"를 붙여 EC2 라고 불린다.
이는 가상의 서버를 제공하는 IaaS(Infrastructure as a Service)서비스
이다. EC2는 가상 머신(인스턴스)의 생성, 시작, 정지 및 삭제와 같은 모든 작업을 직접 수행해야 한다.
EC2를 사용하면 소프트웨어 에플리케이션을 실행할 수 있는 가상 서버를 프로비저닝 할 수 있으며, 더 많은 인스턴스를 추가하여 수평 확장도 가능하다.
따라서 EC2는 개발자나 시스템 관리자가 전체 인프라를 직접 제어하고 애플리케이션을 배포하고 관리하는 데 사용된다.
요약하자면, Elastic Beanstalk는 개발자가 애플리케이션 코드를 업로드하면 AWS가 배포 및 관리를 자동화하는 PaaS 서비스
서비스이며, EC2는 가상 서버를 직접 관리해야 하는 IaaS 서비스
이다.
+ S3 란?
S3는 Simple Storage Service의 줄임말이다.
이는 객체 스토리지 서비스라고도 불리며, 이를 통해 사용자는 이미지, 비디오, 문서 등과 같은 다양한 형식의 데이터를 안전하게 저장하고 검색할 수 있다.
Amazon S3는 클라우드에서 데이터 저장에 최적화 되어 있으며, 큰 용량의 데이터를 안정적으로 처리할 수 있다.
배포를 하는 방법은 EB CLI를 사용해서 멋있게(?) 하는 방법도 있지만, 여기에서는 Elastic Beanstalk 콘솔홈에서 만드는 방법으로 설명하겠다.
asw 사이트에 들어가면 회원가입을 하고 로그인을 한다.
콘솔 홈
에서 Elastic Beanstalk
을 검색
로그인을 하면 아래와 같은 콘솔 홈으로 들어와진다. 상단 검창에 Elastic Beanstalk
를 검색한다.
좌측 햄버거(목록)아이콘
클릭, 애플리케이션
클릭, 애클리케이션 생성
클릭
애플리케이션과 환경의 관계는, 하나의 애플리케이션 아래에 여러 환경이 존재할 수 있는 구조이다. 따라서 애플리케이션을 먼저 생성한 후 환경을 만들어주어야한다. (나는 미리 만들어둔게 있어서 하나가 있지만 처음한다면 비어있을 것이다.)
추가설명 )
애플리케이션은 여러가지 환경에서 동작할 수 있다.
예를들면 하나의 앱이 실서버라는 환경, 개발서버라는 환경과 같은 여러 환경에서 동작한다. 이처럼 애플리케이션 아래에 여러 환경이 존재할 수 있는 구조이다.
즉 환경은 앱의 코드가 탑재돼서 동작하는 구체적인 서버라고 한다면, 앱은 그 환경들을 그룹핑하는 폴더라고 할 수 있다. - 생활코딩
애플리케이션의 이름을 입력한다. 설명 및 태그는 생략해도 무방하다. 생성
버튼 클릭.
애플리케이션이 생성되었고, 자동으로 환경 설정화면으로 넘어간다. 우측 상단 새 환경 생성
클릭
환경구성
환경 티어 : 웹 서버 환경 선택
.
(웹서버 환경
은 보통 웹앱을 동작 시킬 때 사용하고, 작업자 환경
은 백엔드에서 돌아가는 크론잡과 같은 작업들을 할 때 사용한다.)
애플리케이션 정보 : 설정한 앱 이름이 입력되어있음, 태그 추가 필요 없음.
환경 정보 : 작성하지 않고 있는 그대로 두어도 무방.
플랫폼 :
- 플랫폼 유형 => 관리형 플랫폼 선택
- 플랫폼 => 본인이 사용하는 언어환경 선택
(나는 node)
- 플랫폼 브랜치 => 제약사항이 없는 이상 최신버전 선택
- 플랫폼 버전 => 제약사항이 없는 이상 최신버전 선택
애플리케이션 코드 : 바로 소스코드를 올려버릴 수 있지만, 올리기전에 일단 환경부터 만들어보자. 샘플 에플리케이션 선택
프리셋 : 프로젝트가 규모가 크지 않은 이상 단일 인스턴스 선택
(규모있는 프로젝트고, 로드밸런스 같은 것을 이용해서 여러개의 컴퓨터가 병렬적으로 작동하도록 하고싶다면 "고가용성" 선택)
서비스 액세스 구성
서비스 역할 : 기존 서비스 역할 사용
기존 서비스 역할 : 초기값 그대로 사용
이 중 EC2 키페어
, EC2 인스턴스 프로파일
은 처음 앱을 만들 경우에는 아무 것도 없을 수 있다.
이때 없다고 그냥 다음으로 넘어가게되면 배포시 오류가 발생한다. (저같은 과오를 겪지 않으시길 바랍니다..)
때문에 각각 생성 해주어야한다.
EC2 키페어 생성 튜토리얼
EC2 인스턴스 프로파일 생성 튜토리얼
가상머신 키 페어가 왜 필요한가?
환경을 만들면 그 환경은 AWS의 컴퓨팅 서비스인 EC2인스턴스가 결국에 만들어진다. 그 인스턴스에 접속을 해서 직접 커맨드라인으로 컴퓨터를 다루고싶다할 때 접속하기 위해서 비밀번호라고 할 수 있는 키페어를 사용하는 것이다. - 생활코딩
네트워킹, 데이터베이스 및 태그 설정 - 선택 사항
모두 그대로 두어도 무방하나 데이터베이스를 사용할 계획이라면 아래와 같이 설정해준다.
인스턴스 트래픽 및 조정 구성 - 선택 사항
인스턴스 : 그대로 두어도 무방
용량 : 아래 항목만 수정한다.
- 환경 유형 => 단일 인스턴스
- 플릿 구성 => 온디맨드 인스턴스
- 인스턴스 => 기본적을 세팅되어 있는 것들을 X를 눌러 삭제하고 t2.nano
를 선택한다. (nano가 가장 싸다.)
업데이트, 모니터링 및 로깅 구성 - 선택 사항
특별히 설정할 것 없다. 바로 다음
버튼을 누른다.
검토
전체 내용에 이상이 없으면 제출
버튼을 누른다.
기다림
제출이 완료되면 상단에 로딩이 돌아가고, 여러 이벤트 찍히며 환경이 생성되고 있음을 볼 수 있다.
생성이 끝났을 시 도메인을 클릭해보면, 아래와 같은 기본 화면이 출력된다.
업로드 및 배포
를 클릭한다.이때 package.js에 node의 버전정보가 명시되어있지 않으면 오류가 난다는 것을 명심하자.
"engines": {
"node": "18.14.0"
}
Elastic Beanstalk 앱에 DB연결하기 (MySql Workbench 연동)
참고문헌 : 생활코딩 AWS Elastic Beanstalk