Serverless

1. 온프레미스

직접 서버를 설치한느 것을 의미한다. 즉, 하드웨어를 직접 둔다는 것을 말한다.

2. cloud(IaaS/ PaaS)

돈을 내고 서버를 임대해서 사용하는 것을 의미한다. 물리적인 것은 서비스 제공업체가 관리하지만 소프트웨어적인 부분은 사용자가 직접 관리한다.

1. IaaS(Infrastructure as a Service)

  • 스토리지, 네트워크 등 기본적인 컴퓨팅 자원을 서비스로 이용자에게 공급
  • 컴퓨팅 자원만 공급하기에 데이터나 네트워크, 애플리케이션은 사용자가 직접 관리하고 유지해야 한다.
  • 간단하게는 컴퓨터만 할당하는 개념

AWS EC2

2. PaaS(Platform as a Service)

  • 응용 프로그램 개발 도구, 컴파일러 등을 클라우드 서비스로 제공
  • 제공자가 지정해준 프로그래밍 언어와 툴로 소비자가 만든 클라우드 환경 또는 애플리케이션을 배포 가능
  • 서비스 플랫폼을 선택해서 개발하지만 하면 된다.
  • IaaS에서 했던 복잡한 설치 및 환경설정을 피할 수 있다.

Firebase, Google App Engine

3. SaaS(Software as a Service)

  • 제작된 응용 소프트웨어를 클라우드 서비스로 제공
  • 응용 프로그램은 웹 브라우저와 같은 ThinClient를 통해서 접근해서 제어가 가능
  • 중앙에서 해당 소프트웨어를 관리해서 사용자가 일일이 업그레이드나 패치 작업을 할 필요가 없다.
  • 필요할 때 비용만 내면 어디서든 쓸 수 있다.

Gmail, DropBox, Slack

3. 서버리스

클라우드 업체가 특정 코드를 실행하는 데 필요한 컴퓨팅 리소스와 스토리지만 동적으로 할당한 다음 그 부분에 대해서만 비용을 청구하는 모델

  • 개발자가 서버리스에 업로드한 함수는 24시간 돌아가는게 아니라 필요할 때 깨워서 실행한다.

대기 상태를 제외한 실제 사용 자원에 대해서만 청구가 되기 때문에 굉장히 경제적이며, 자원을 효율적으로 사용할 수 있게 된다. 서버리스를 활용하면, 백엔드 서버를 올리는 것이 아닌 백엔드를 작은 함수 단위로 쪼개서 올린다. 이 말은 서버를 클라우드 업체에서 관리하기 때문에, 사용자는 스케일링, 업데이트, 보안 등 런타임 관리와 운영에 대한 시간을 소모하지 않을 수 있다.

모델 (BaaS/ FaaS)

  1. BaaS(Backend as a Service) BaaS는 앱 개발에 있어서 필요한 다양한 기능들(DB, 소셜 연동, 파일 시스템 등)을 API로 제공해 줌으로서, 개발자들이 서버 개발을 하지 않고서도 필요한 기능을 쉽고 빠르게 구현할 수 있게 해준다. 즉, 클라우드 공급자가 백엔드 개발 환경까지 제공해준다.

가장 큰 장점은 개발 시간의 단축이다.

Firebase

  • 애플리케이션 개발시 요구되는 복잡한 백엔드 기능을 개발자가 개발하지 않고 클라우드 공급자가 제공하는 서비스를 이용해서 구현하는 것
  • 서비스 제공자로부터 미리 만들어진 백엔드 API를 제공받아 사용하는 형태
  • 데이터 저장, 로드, 사용자 인증, 메시징, 소셜 서비스 등의 백엔드 기능을 완성된 API로 사용할 수 있다.
  • API 사용량 및 서버 시간에 따라 비용 지불
  1. FaaS (Function as a service) “함수를 서비스를 제공한다.”는 의미다. 즉, 프로젝트를 여러 개의 함수로 쪼개서, 매우 거대하고 분산된 컴퓨팅 자원에 등록하고 함수들이 실행되는 횟수 만큼 비용을 내는 방식이다.

AWS Lambda

  • 개발자가 로직을 작성하면 클라우드 제공 업체가 관리를 전담하는 서버 컨테이너에서 실행되는 서비스 기능
  • 서버에서 수행될 기능들을 개발자가 직접 코드로 작성하여 등록
  • 실행 가능한 함수를 미리 등록해놓았다가 특정 이벤트가 발생하면 알아서 호출되고 종료되도록 한다.
  • PaaS는 전체 애플리케이션을 배포하여 서버에서 애플리케이션이 항상 실행되만 FaaS는 애플리케이션을 함수로 쪼개서 배포하며, 일정 시간이 지나면 종료된다.
  • 호출한 함수의 횟수 == 비용

장점

  1. 비용 절감
  2. 필요할 때만 호출하므로 리소스 낭비가 없다.
  3. 자체 서버를 관리하는 대신 클라우드 기반 컴퓨팅 시간에 대해 비용을 지불
  4. 서버에 신경을 쓸 필요가 없음
  5. 높은 가용성과 유연한 확장
  6. 빠른 개발, 배포

단점

  1. ColdStart : 요청이 없으면 수면 상태에 있다가 요청이 오면 실행되므로 깨우는데 시간이 걸린다.
  2. 긴 시간을 요한 작업에 불리하다.
  3. 로컬 데이터를 사용할 수 없다.
  4. 클라우드 제공 플랫폼에 락인된다.

사용 예

  1. 배치 작업
  2. 자동화 작업
  3. 분석과 모니터링
  4. 챗봇