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)
- BaaS(Backend as a Service) BaaS는 앱 개발에 있어서 필요한 다양한 기능들(DB, 소셜 연동, 파일 시스템 등)을 API로 제공해 줌으로서, 개발자들이 서버 개발을 하지 않고서도 필요한 기능을 쉽고 빠르게 구현할 수 있게 해준다. 즉, 클라우드 공급자가 백엔드 개발 환경까지 제공해준다.
가장 큰 장점은 개발 시간의 단축이다.
Firebase
- 애플리케이션 개발시 요구되는 복잡한 백엔드 기능을 개발자가 개발하지 않고 클라우드 공급자가 제공하는 서비스를 이용해서 구현하는 것
- 서비스 제공자로부터 미리 만들어진 백엔드 API를 제공받아 사용하는 형태
- 데이터 저장, 로드, 사용자 인증, 메시징, 소셜 서비스 등의 백엔드 기능을 완성된 API로 사용할 수 있다.
- API 사용량 및 서버 시간에 따라 비용 지불
- FaaS (Function as a service) “함수를 서비스를 제공한다.”는 의미다. 즉, 프로젝트를 여러 개의 함수로 쪼개서, 매우 거대하고 분산된 컴퓨팅 자원에 등록하고 함수들이 실행되는 횟수 만큼 비용을 내는 방식이다.
AWS Lambda
- 개발자가 로직을 작성하면 클라우드 제공 업체가 관리를 전담하는 서버 컨테이너에서 실행되는 서비스 기능
- 서버에서 수행될 기능들을 개발자가 직접 코드로 작성하여 등록
- 실행 가능한 함수를 미리 등록해놓았다가 특정 이벤트가 발생하면 알아서 호출되고 종료되도록 한다.
- PaaS는 전체 애플리케이션을 배포하여 서버에서 애플리케이션이 항상 실행되만 FaaS는 애플리케이션을 함수로 쪼개서 배포하며, 일정 시간이 지나면 종료된다.
- 호출한 함수의 횟수 == 비용
장점
- 비용 절감
- 필요할 때만 호출하므로 리소스 낭비가 없다.
- 자체 서버를 관리하는 대신 클라우드 기반 컴퓨팅 시간에 대해 비용을 지불
- 서버에 신경을 쓸 필요가 없음
- 높은 가용성과 유연한 확장
- 빠른 개발, 배포
단점
- ColdStart : 요청이 없으면 수면 상태에 있다가 요청이 오면 실행되므로 깨우는데 시간이 걸린다.
- 긴 시간을 요한 작업에 불리하다.
- 로컬 데이터를 사용할 수 없다.
- 클라우드 제공 플랫폼에 락인된다.
사용 예
- 배치 작업
- 자동화 작업
- 분석과 모니터링
- 챗봇