Docker는 앱을 배포하기 위한 소프트웨어 개발 플랫폼으로, 애플리케이션을 컨테이너라고 불리는 특별한 패키지로 묶어서 운영체제와 관계없이 쉽게 실행할 수 있게 해줍니다. 컨테이너 안에 있는 앱은 어디서 실행하든지 동일한 방식으로 작동합니다. 이는 호환성 문제 없이 예측 가능한 행동을 보장하며, 유지보수와 배포가 더 쉬워집니다. Docker는 모든 프로그래밍 언어, 운영체제, 기술과 함께 작동하며, 컨테이너를 몇 초 내로 빠르게 확장하거나 축소할 수 있습니다.
Docker를 사용하면, 예를 들어 EC2 인스턴스 하나에 Java 코드, NodeJS 코드, MySQL 데이터베이스, Java와 같은 다양한 Docker 컨테이너를 실행할 수 있습니다.
Docker 이미지를 생성하고 Docker 리포지토리에 저장해야 합니다. Docker Hub는 공개적으로 사용 가능한 Docker 리포지토리이며, 여러 기술이나 운영체제의 베이스 이미지를 제공합니다. 또한, AWS의 Amazon ECR을 사용하여 개인 Docker 이미지를 저장할 수 있습니다.
Docker는 가상 머신과 다른 가상화 기술이지만, 호스트와 리소스를 공유하므로 서버 하나에 여러 컨테이너를 실행할 수 있습니다. Docker는 가벼우며, 전체 운영체제를 포함하지 않기 때문에, 확장성이 뛰어나고 실행이 쉽습니다. (왼쪽은 우리가 그냥 EC2 인스턴스를 생성할때)
ECS는 AWS에서 Docker 컨테이너를 실행하기 위한 서비스입니다.
ECS를 사용하려면 사용자가 EC2 인스턴스를 미리 준비하고 유지 관리해야 합니다. 즉, 컨테이너를 실행할 서버를 직접 관리해야 한다는 의미입니다.
AWS는 컨테이너의 시작과 정지를 담당하며, 웹 애플리케이션을 만들고자 할 때 애플리케이션 로드 밸런서와 통합됩니다.
Fargate도 AWS에서 Docker 컨테이너를 실행하는 서비스지만, ECS와 달리 인프라(서버)를 직접 관리할 필요가 없습니다.
서버리스 오퍼링으로, 사용자는 컨테이너에 필요한 CPU와 RAM 사양만 설정하면 됩니다. AWS가 자동으로 컨테이너를 실행합니다.
Fargate 사용 시, 어디에서 컨테이너가 실행되는지 신경 쓸 필요가 없으며, 관리가 훨씬 간단해집니다.
ECR은 AWS에서 Docker 이미지를 저장하기 위한 프라이빗 컨테이너 레지스트리 서비스입니다.
ECS나 Fargate에서 실행할 컨테이너 이미지를 ECR에 저장하고, 이 이미지를 바탕으로 컨테이너를 실행할 수 있습니다.
간단히 말해서, ECS는 컨테이너를 실행하기 위해 서버(EC2 인스턴스)를 직접 관리해야 하는 반면, Fargate는 서버를 관리할 필요 없이 컨테이너를 실행할 수 있는 더 간단한 방법을 제공합니다. 모든 컨테이너 이미지는 ECR에 저장됩니다
AWS Lambda는 서버 없이 코드를 실행할 수 있는 서버리스 컴퓨팅 서비스입니다. 사용자는 EC2 인스턴스와 같은 서버를 직접 관리하거나 프로비저닝할 필요 없이, 필요할 때마다 자동으로 코드를 실행할 수 있습니다. Lambda 함수는 이벤트에 응답하여 실행되며, 사용한 컴퓨팅 자원의 양에 따라 비용이 청구됩니다.
호출 수 및 컴퓨팅 시간 기준: 첫 100만 회 호출과 매월 400,000GB초의 컴퓨팅 시간은 무료입니다. 이후 사용량은 매우 저렴한 비용으로 청구됩니다.
Lambda는 개발자가 인프라에 대해 걱정하지 않고, 코드 실행에만 집중할 수 있게 해주는 강력한 서비스입니다. 서버리스 아키텍처를 구현하고자 할 때 특히 유용하며, 다양한 애플리케이션 및 백엔드 서비스에 적용할 수 있습니다.
. API Gateway는 서버리스 HTTP API를 구축하고 싶은 경우, 특히 AWS에서 제공하는 서비스입니다. 예를 들어, AWS Lambda와 DynamoDB와 같은 서버리스 기술을 사용하여 데이터를 읽고, 생성하고, 업데이트하고, 삭제하는 애플리케이션을 만들었다고 가정해 봅시다. 여기서 외부 클라이언트가 Lambda 함수에 접근할 수 있도록 하려면, Lambda 함수를 바로 API로 노출시킬 수는 없습니다. 이때 API Gateway를 사용하여 RESTful HTTP API 형태로 Lambda 함수를 외부에 노출시킬 수 있습니다.
API Gateway는 클라이언트 요청을 받아 이를 Lambda 함수로 전달하는 프록시 역할을 합니다. 이 서비스는 개발자가 클라우드에서 API를 쉽게 생성, 게시, 유지 관리, 모니터링하고 보안을 강화할 수 있게 해주는 완전 관리형 서비스입니다. API Gateway는 서버리스 기술이며, 완전히 확장 가능합니다. RESTful API와 WebSocket API를 지원하여 실시간 데이터 스트리밍을 할 수 있으며, 보안, 사용자 인증, API 제한, API 키, 모니터링 등의 기능을 제공합니다.
AWS Batch는 대규모 배치 처리 작업을 효율적으로 실행할 수 있는 완전 관리형 서비스입니다. 이 서비스를 사용하면 AWS에서 수백, 수천 개의 컴퓨팅 배치 작업을 쉽게 실행할 수 있습니다. 배치 작업이란 시작과 끝이 있는 작업을 말하며, 스트리밍 작업과는 달리 특정 시간에 시작해서 완료되는 작업입니다.
AWS Batch는 필요한 컴퓨팅 및 메모리 자원을 동적으로 할당하여 배치 큐에 제출된 작업을 처리합니다. 배치 작업 정의는 Docker 이미지와 ECS(엘라스틱 컨테이너 서비스)에서 실행되는 작업 정의로 구성됩니다. 이는 ECS에서 실행할 수 있는 모든 것이 Batch에서도 실행될 수 있음을 의미합니다. Batch는 EC2 인스턴스 또는 스팟 인스턴스를 자동으로 스케일링하여 비용 최적화와 인프라에 대한 관리 부담을 줄여줍니다.
예를 들어, 사용자가 Amazon S3에 제출한 이미지를 배치 방식으로 처리하는 경우를 생각해 볼 수 있습니다. 이미지가 S3에 저장되면, 이를 트리거로 AWS Batch 작업이 시작되고, Batch는 적절한 양의 EC2 또는 스팟 인스턴스로 구성된 ECS 클러스터를 자동으로 관리하여 작업을 처리합니다. 처리된 이미지는 다른 S3 버킷에 저장될 수 있습니다.
Lambda와 비교할 때, AWS Batch는 실행 시간 제한이 없으며, Docker 이미지로 패키지된 모든 런타임을 지원합니다. 또한, EC2 인스턴스의 스토리지를 사용하기 때문에 더 많은 저장 공간을 활용할 수 있습니다. 반면 Lambda는 실행 시간이 15분으로 제한되고, 제한된 프로그래밍 언어와 임시 디스크 공간을 사용하며 서버리스 서비스입니다. AWS Batch는 서버리스 서비스는 아니지만, EC2 인스턴스의 자동 스케일링과 관리를 AWS가 담당하여 사용자의 인프라 관리 부담을 줄여줍니다.