서버리스(Serverless) vs 컨테이너(Container)

yedi·2024년 10월 28일
post-thumbnail

AWS의 서버리스 서비스 중 Lambda가 있지만, EC2가 있어야만 Lambda가 작동한다고 알고 있었습니다.
이를 바탕으로 서버리스 및 컨테이너 개념과 Lambda의 접근 방식을 알아보겠습니다.

서버리스(Serverless)와 컨테이너(Container)는 모두 애플리케이션 배포 및 실행을 돕는 기술이지만, 사용 방식과 관리 방식, 적용 예시에서 차이점이 있습니다.


서버리스(Serverless)

정의

서버리스(Serverless)는 클라우드에서 애플리케이션이 필요한 리소스를 자동으로 관리해주는 컴퓨팅 모델로, 개발자가 서버를 직접 관리할 필요가 없습니다.
개발자는 기능(Function) 단위로 코드를 작성하고 배포하며, 이 코드는 사용자 요청이 있을 때만 실행되고, 처리가 끝나면 자동으로 종료됩니다.
즉, 서버가 존재하지 않는 것이 아니라 서버의 관리가 클라우드 제공자에게 맡겨져 있어 개발자는 코드에만 집중할 수 있고, 사용한 만큼만 비용이 청구되는 효율적인 환경입니다.

주요 특징

  • 자동 리소스 할당 : 클라우드 제공자가 인프라 리소스를 자동으로 할당하며, 사용량에 맞춰 확장 또는 축소합니다.
  • 종량제 과금 : 함수가 실행된 시간과 호출 횟수에 따라 비용이 부과됩니다.
  • 비용 효율성 : 특정 이벤트에 응답하는 짧은 실행 작업(트리거 기반의 함수)에 최적화되어 비용 효율적입니다.

예시

AWS Fargate vs AWS Lambda
: AWS Fargate는 컨테이너 기반의 서버리스 실행 환경으로, 지속적인 작업에 적합하며 Lambda에 비해 실행 시간과 같은 제약이 적습니다.
: AWS Lambda는 함수 기반의 서버리스 서비스로, 이벤트 트리거에 최적화되어 짧은 작업에 유리합니다.

  • AWS Lambda : 특정 이벤트가 발생할 때 코드를 실행하는 FaaS(Function as a Service) 서비스로, 웹 요청, 파일 업로드 등의 이벤트로 Lambda 함수를 호출할 수 있습니다.
  • Google Cloud Functions : Google Cloud에서 제공하는 FaaS로, HTTP 요청, 클라우드 이벤트 등을 트리거로 함수가 실행됩니다.
  • Azure Functions : Microsoft Azure에서 제공하는 서버리스 컴퓨팅 서비스로, 다양한 트리거와 함께 코드를 실행할 수 있습니다.

컨테이너(Container)

정의

컨테이너는 애플리케이션과 모든 종속성을 하나의 독립된 패키지로 묶어 실행 환경의 일관성을 보장하는 기술입니다.
여러 컨테이너를 동일한 호스트에서 실행할 수 있고, 컨테이너 간에 종속성을 분리하여 관리합니다.

주요 특징

  • 독립된 환경 : 애플리케이션과 종속성을 패키지화하여 환경에 구애받지 않고 실행 가능합니다.
  • 빠른 배포 및 이식성 : 다양한 환경에서 일관되게 실행되며, 개발, 테스트, 배포 환경을 동일하게 유지할 수 있습니다.
  • 확장성 및 유연성 : 쿠버네티스와 같은 오케스트레이션 도구와 함께 사용해 수평적 확장, 관리, 로드 밸런싱 등이 가능합니다.

예시

  • Docker : 가장 널리 사용되는 컨테이너 플랫폼으로, 애플리케이션과 종속성을 포함한 컨테이너를 생성하여 다양한 환경에서 일관되게 실행할 수 있습니다.
  • Kubernetes : Google이 개발한 컨테이너 오케스트레이션 시스템으로, 여러 컨테이너를 관리하고 자동으로 배포, 확장, 복구합니다.
  • Amazon ECS/EKS : AWS에서 제공하는 컨테이너 서비스로, ECS는 Docker 컨테이너 관리, EKS는 Kubernetes 관리 환경을 제공합니다.

서버리스와 컨테이너의 차이점

특징 서버리스 컨테이너
배포 단위 개별 함수 또는 작은 작업 단위 애플리케이션 전체 또는 서비스 단위
인프라 관리 클라우드 제공자가 관리 컨테이너 생성 및 스케줄링은 개발자가 관리
확장성 자동 확장 (트래픽에 따라 동적 자원 할당) 수평적 확장 가능 (Kubernetes 등 오케스트레이션 필요)
비용 사용 시간에 따라 과금 (사용하지 않으면 비용 없음) 컨테이너가 실행 중인 시간 동안 과금
사용 시나리오 이벤트 기반 처리, 짧은 작업에 적합 마이크로서비스, 이식성이 필요한 환경에 적합
이식성 특정 클라우드 제공자에 종속될 가능성 있음 다양한 환경에서 동일하게 작동 가능

서버리스와 컨테이너의 사용 예시

서버리스는 특정 이벤트에 반응하는 애플리케이션(예: 파일 업로드 시 자동 이미지 리사이즈, 실시간 데이터 처리, 알림 시스템)에 적합합니다.
컨테이너는 복잡한 애플리케이션, 마이크로서비스 아키텍처, 개발/테스트 환경 일관성 유지가 중요한 경우에 적합합니다.



AWS Lambda와 EC2

  • AWS Lambda : EC2 인스턴스 없이도 사용할 수 있는 완전한 서버리스 서비스로, Amazon의 데이터 센터 내에서 서버리스 인프라 위에 작동하며, 사용자는 EC2 인스턴스를 직접 생성하거나 관리할 필요가 없습니다.

접근 방식

  • Lambda만 따로 사용하기 : AWS Lambda는 EC2와 관계없이 트리거 기반의 코드 실행을 제공하여, S3 파일 업로드 이벤트나 DynamoDB 데이터 변동에 반응하는 작업을 수행할 수 있습니다.
  • EC2와 Lambda를 함께 사용하기 : Lambda 함수가 EC2 인스턴스에 접근해야 할 경우, AWS SDK나 API를 통해 요청을 보낼 수 있으며, VPC(가상 사설 클라우드) 설정을 통해 EC2와 네트워크를 공유하여 연결할 수도 있습니다.

결론적으로, AWS Lambda는 독립적으로 유용하며, 필요에 따라 EC2와 통합하여 복잡한 아키텍처를 구축할 수 있는 유연성을 제공합니다.



참고

https://medium.com/@sadoksmine8/serverless-vs-containers-when-to-use-what-on-gcp-e81f6756f07e

0개의 댓글