일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 자바스크립트
- 레벨 1
- 소켓
- 백준
- 크롤링
- HTTP
- 쉬운 문제
- 수학
- BFS
- dfs
- 문자열
- ip
- typescript
- 타입스크립트
- HTTP 완벽 가이드
- Nestjs
- dp
- 알고리즘
- 그래프
- Algorithm
- type challenge
- Node.js
- 프로그래머스
- javascript
- Crawling
- 타입 챌린지
- 프로그래머스 레벨 2
- TCP
- 가천대
- socket
- Today
- Total
kakasoo
AWS beanstalk과 ECS의 차이 본문
docker를 학습하던 중, 이걸 어디에 배포할까 알아보면서 둘의 기능적 차이에 대해 알아보았다.
둘 다 컨테이너 기반으로 서비스를 배포할 수 있게 도와주는데, 둘은 무슨 차이가 있을까?
컨테이너란?
어떤 환경에서도 실행되게 하기 위해, 실행되기 위해 필요한 모든 요소를 포함하고 있는 소프트웨어 패키지를 말한다. 만약 필요하다면 운영체제의 일부분부터 운영체제 전체까지도 포함시킬 수 있다. 이런 모습은 VM ( Virtual Machine ) 과 매우 유사한데, VM과 다른 점은 컨테이너는 운영체제 전체를 포함하는 것이 아니기에 더 가볍다는 점이고, 또 컨테이너가 VM과 달리 하드웨어가 아닌 OS 레벨에서 가상화된다는 점이다.
복잡한 얘기지만, Winodows에서 개발한 것이 개발 환경에서와 배포 환경에서 완벽히 동일하게 동작하는 것을 보장하기 위한 것이라고 생각할 수 있겠다. 가령 Node.js에서 이미지를 편집하고자 한다면 그 기능은 파일을 건드리는 행위기 때문에 OS에 종속되기 마련이다. 이럴 경우 npm을 통해 이미지를 편집할 라이브러리를 설치해도, 설치 환경의 OS가 무엇인지에 따라 다른 파일들이 설치되어, 동일한 기능 수행을 보장할 수 없게 된다. 따라서 가상의 컨테이너를 생성하고, 개발부터 배포까지 동일한 환경을 가질 수 있도록 한다고 이해하면 편하다. Windows를 사용하는 개발자가 Windows 위에서 Linux를 띄운 후, 거기서 개발을 하고, 배포할 때도 Linux를 띄워 배포하는 것이다.
Beanstalk이란?
AWS Elastic Beanstalk은 웹 애플리케이션을 배포하기 위한 관리형 플랫폼이다. Java, PHP, .NET, Node.js 등 다양한 언어에 호환되며, 기본적으로 Beanstalk을 사용하게 되면 기본 인프라를 프로비저닝 ( 사용자의 요구에 맞게 시스템 자원을 할당, 배치, 배포해 두었다가 필요 시 시스템을 즉시 사용할 수 있는 상태로 미리 준비해 두는 것 ) 할 필요가 없어진다. 오로지 애플리케이션 코드를 업로드하고, 배포, 모니터링, 확장 및 유지보수만 하면 되기 때문에 자원에 대한 고민을 덜 할 수 있는 것이 장점이다.
Beanstalk도 컨테이너 기반인가?
Beanstalk 역시 컨테이너 기반이기 때문에 컨테이너로 개발을 했다면 그 이미지를 업로드하는 것만으로도 배포를 할 수 있다. 이미지란 설정파일과 작성한 코드 내역들을 뭉친 파일 덩어리라고 생각하면 된다.
Next.js 서버 배포를 위한 최선의 선택일까?
어느 서비스에서나 최선이라는 말은 없다. 각자의 상황 ( = use case ) 에 따라 다르다. 하지만 초기 프로젝트를 배포하는 데에는 제법 좋은 선택이 될 것으로 보인다. 서버를 배포할 때 고려할 요소는 확장성, 비용 효율성, 사용 편의성, 사용자가 커스텀 가능한지 여부로 나뉜다. Beanstalk은 자원 할당이 자동으로 되는 게 장점이지만, 그로 인해 역으로 커스텀은 힘들다고 볼 수 있다. 하지만 나머지 부분에 대해서는 강점을 지닌다. 대량의 트래픽이 있을 경우 Beanstalk은 컨테이너 수를 늘림으로써 쉽게 대처할 수 있다. 또 비용 효율성도 사용한 리소스만큼만 비용을 지불하기 때문에 저렴한 편이다. 따라서 단순한 사용 패턴을 지닌 경우 최적의 선택이 될 것이다.
AWS ECS (Elastic Container Service) 와는 뭐가 다른가?
앞서 말했다시피 ECS는 도커 컨테이너를 실행, 확장, 배포하기 위한 플랫폼으로, 컨테이너를 관리하는 데에 중점을 둔다. 다만 Beanstalk는 웹 애플리케이션을 관리, 배포하는 데에 초점이 맞춰져 있다. ECS는 Beanstalk에 비해 복잡하지만 컨테이너를 세세히 조정하는 것이 가능하다.
반면 Beanstalk은 세세한 조정은 불가능하더라도, 이미 그러한 필요가 적게끔 로드밸런싱이나 오토 스케일링 등의 기능이 제공된다. 또 Beanstalk 역시 무중단 배포가 가능하기 때문에 프로덕션 환경을 구성하는 데에도 무리가 없다.
'프로그래밍 > devops' 카테고리의 다른 글
Docker 소개 & 사용 방법 정리 (0) | 2023.01.08 |
---|---|
테라폼 작동 원리와 CLI 실습 (0) | 2023.01.05 |
AWS-CLI 및 terraform 설치 (0) | 2023.01.01 |
[Mac OS] ZSH 및 OH-MY-ZSH (0) | 2023.01.01 |