AWS Elastic Beanstalk는 Java, .NET, PHP, Node.js, Python, Ruby, Go, Docker를 사용하여 Apache, Nginx, Passenger, IIS와 같은 친숙한 서버에서 개발된 웹 애플리케이션 및 서비스를 간편하게 배포하고 조정할 수 있는 서비스입니다.
공식문서에서는 웹 애플리케이션을 간편하게 배포하는 서비스라고 소개합니다.
왜 간편할까요?
예를들어서 간단히 node 서버를 하나 만들고 배포하기 위해서는
1. server 대여 (EC2)
2. 환경 설정 (ubuntu, node)
3. public IP 연결
4. 무중단 실행
의 과정을 거쳐야 합니다. 반복적이기도 하고, ubuntu 환경에서 익숙하지 않다면 환경설정에서 애를 먹을 수 도 있겠죠
EB는 이런과정 없이 그냥 소스 코드만 업로드하면 알아서 EC2를 대여하고, node환경을 세팅하고, nginx까지 연결하여
웹 애플리케이션을 실행합니다.
아주 간단하게, 업로드 한번으로 서버를 호스팅할 수 있으니, 이 이유만으로도 EB를 사용할 이유가 충분하다고 생각합니다.
하지만 더 핵심적으로 제공해주는 기능은
1. 용량 프로비저닝
2. 로드 밸런싱
3. Auto Scaling
4. 모니터링
5. 로그관리
+ 기본리소스에 액세스 가능 (보통 이런 자동화 서비스에는 제어권이 개발자에게 없는데, 접근해서 커스터마이징이 가능합니다)
로드밸런싱 이란?
Elastic Load Balancer 서비스는 트래픽을 관리해주는 서비스입니다.
애플리케이션 트래픽을 Amazon EC2 인스턴스, 컨테이너, IP 주소, Lambda 함수, 가상 어플라이언스와 같은 여러 대상에 자동으로 분산시켜 안정적인 AWS서버 환경을 운용하는데에 도움을 주는 서비스 입니다.
간단하게 기능만 정의하자면, aws에서 사용하는 서비스들에 트래픽이 증가할 경우 처리 용량을 자동으로 분산처리합니다.
그렇게 초당 수백만 개의 요청을 로드 밸런싱 할 수 있습니다.
Auto Scaling 이란?
마찬가지로 트래픽이 증가할때, 애플리케이션의 로드를 처리할 수 있는 EC2 인스턴스를 조정합니다.
최소 1개에서 최대 4개까지 조절됩니다.
node 서버 만들어보기
아래 정보들을 입력해줍니다
플랫폼은 Node.js를 선택합니다.(EC2에 node를 설치하겠다~ 라는 뜻입니다)
이제 node_modules를 제외한 코드를 zip으로 압축하여 업로드 하면 됩니다
저는 간단히 '/' 로 html파일을 하나 파싱하고, GET,POST 메서드로 Posts API를 만들어봤습니다
const express = require("express");
const app = express();
const posts = [
{id:1,title:'post1',content:'hello eb!'},
{id:2,title:'post2',content:'hello kong!'},
{id:3,title:'post3',content:'hello livemehere!'},
]
app.use(express.static("public"));
app.use(express.json());
app.get("/", (req, res) => {
res.sendFile("./index.html");
});
app.get('/posts',(req,res)=>{
res.status(200).json(posts);
})
app.post('/posts',(req,res)=>{
const {title,content} = req.body;
const newPost = {id:posts.length+1,title,content};
posts.push(newPost);
res.status(201).json(newPost);
})
app.listen(8080);
주의 할 점은 반드시 포트는 8080으로 설정해야합니다.
이부분은 환경변수로 하는것이 더 바람직하며, eb 콘솔에서 환경변수를 조정할 수 있습니다.
포트를 8080으로 하는 이유는 우리가 올리는 웹 애플리케이션 서버가 default로 nginx 나 apache를 프록시로 두고 돌아가기 때문입니다.
아래와 같이 node_modules를 제외한 파일들을 압축해주세요
업로드 후 생성을 눌러 유종의 미를 거두어봅시다
pending 상태를 기다려줍시다
배포된 URL로 서버 API 호출
지금 시대는 정말 잘 가져다 사용하는 것도 중요한 것 같다는 생각이듭니다.
이제껏 실제 서비스를 배포할때 EC2를 대여해서 직접 모든 환경세팅, DB세팅 을 다했었는데, 그러다보니 아직 미숙한점이 많아 서버가 내려갈 때도있었고, db를 해킹당한 적도있었고, 무엇보다 걱정이었던것은 트래픽이 증가했을때, 내가 만들어 놓은 서버가 잘 동작할 까에대한 의구심이었습니다.
AWS EB는 이런 걱정과 소요를 줄여주고 개발에 더 집중할 수 있게 해주는 매리트가 있는거 같네요!
풀스택 엔지니어를 지향하고있었지만, 사실 프론트엔드에 흥미가 더 많기도하고, 빠르게 결과물을 만들어보고 실제서비스를 해보고픈 마음이 있어, 이런 API들을 조합하는 실력을 기르는 것도 괜찮다고 생각합니다.
'Archive' 카테고리의 다른 글
React 합성 이벤트 & Class Component의 this & 함수 바인딩 (0) | 2022.06.06 |
---|---|
AWS serverless (API gateway + lambda) (0) | 2022.06.04 |
React Query 도입하기 (0) | 2022.05.19 |
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY! 문제 (0) | 2022.05.07 |
It is likely you do not have the permissions to access this file as the current user 에러 (0) | 2022.05.07 |