서버리스(Serverless)
서버리스 서비스는 클라우드 컴퓨팅의 혁신적인 모델로, 개발자가 서버 인프라를 관리할 필요 없이 애플리케이션을 개발하고 실행할 수 있게 해줌
- 개발 생산성을 높이고
- 운영 비용을 절감
- 확장성과 유연성 제공

- 즉, 서버리스 서비스는 개발자가 서버를 관리할 필요 없이 애플리케이션을 빌드하고 실행할 수 있도록 하는 클라우드 네이티브 개발 모델
- 클라우드 제공업체가 서버 인프라와 프로비저닝, 유지 관리, 스케일링 등을 처리
- 개발자는 함수 형태로 코드를 작성, 클라우드 플랫폼에 배포
- 특정 이벤트(e.g., HTTP 요청, DB 변경)가 발생하면 함수가 트리거
- 클라우드 제공업체는 필요한 컴퓨팅 리소스를 동적으로 할당하여 함수를 실행
- 함수 실행이 완료되면 리소스가 해제되고, 사용한 만큼만 비용이 청구
서버리스 아키텍처의 주요 구성 요소

1. 함수(Function)
- 서버리스 아키텍처의 핵심 구성 요소
- 특정 작업을 수행하는 작은 코드 단위
2. 이벤트 소스(Event Sources)
- 함수를 트리거하는 다양한 서비스나 시스템 이벤트를 말함
- 예를 들어, HTTP 요청, DB 변경, 파일 업로드 등이 있음
3. 서비스형 백엔드(Backend as a Service, BaaS)
- 개발자가 API를 통해 접근할 수 있는 다양한 백엔드 기능(예: DB, 인증, 파일 스토리지)을 제공
4. API 게이트웨이
- 클라이언트 요청을 적절한 서버리스 함수로 라우팅하고 관리하는 역할
서버리스 서비스 제공 업체
Azure Functions
- Microsoft Azure의 서버리스 컴퓨팅 서비스로, Azure 생태계와 긴밀히 통합되어 있음
- 작업 자동화나 마이크로 서비스 구축에 적합
AWS Lambda
- Amazon Web Service의 서버리스 컴퓨팅 플랫폼으로, 다양한 트리거에 응답하여 코드를 실행할 수 있음
- S3, DynamoDB 등 다른 AWS 서비스와 통합이 용이
Google Cloud Functions
- GCP의 서버리스 솔루션
- Google Cloud Storage나 Pub/Sub 등과 연동하여 특정 이벤트에 반응하는 함수를 실행 가능
서버리스 장점
- 비용 효율성
: 실제 사용한 컴퓨팅 리소스에 대해서만 비용을 지불
- 자동 스케일링
: 트래픽 변동에 따라 자동으로 리소스를 확장하거나 축소
- 유지보수 간소화
: 서버 관리에 대한 부담이 줄어 개발자가 비지니스 로직에 집중 가능
- 빠른 개발 및 배포
: 인프라 설정 없이 빠르게 애플리케이션을 개발하고 배포 가능
서버리스 단점
- 콜드스타드
: 함수가 처음 실행될 때 지연 시간이 발생할 수 있음
- 벤더종속성
: 특정 클라우드 제공업체의 서비스에 의존하게 될 수 있음
- 장기 실행 작업에 부적합
: 대부분의 서버리스 플랫폼은 함수 실행 시간에 제한을 두고 있음
- 디버깅과 모니터링의 어려움
: 분산된 환경에서 문제를 추적하고 해결하기가 복잡할 수 있음
서버리스 사례
- 이벤트 기반 처리
: 비동기적인 작업 처리나 실시간 데이터 스트림 처리에 적합
- 마이크로서비스
: 작은 독립적인 서비스로 구성된 애플리케이션 개발에 유용
- 변동성 높은 워크로드
: 트래픽 변동이 큰 애플리케이션에 효과적
- 빠른 프로토타이핑
: 새로운 아이디어를 빠르게 구현하고 테스트하는 데 적합
서버리스 아키텍처 예시 그림

요약
- 서버리스는 인프라를 구축할 필요 없이 서비스와 코드에만 집중 할 수 있게 해줌
- 서버리스 기반으로 서비스를 구축하기 위해서는 개발 방법론도 바뀌어야 할 수 있음
- 서버리스의 특징을 이해하고 사용하는 것이 중요함
Azure Functions

- Microsoft Azure의 서버리스 컴퓨팅 플랫폼
- 개발자가 인프라 관리에 대한 부담 없이 이벤트 기반 애플리케이션 구축할 수 있는 서비스
특징1. 서버리스 아키텍처
- 개발자는 서버 인프라를 직접 관리하지 않고 코드 실행에만 집중 가능
- 이벤트 기반 실행(예: HTTP 요청, 타이머, 메시지 큐, 파일 변경 등)
- 즉, 다양한 이벤트를 트리거로 사용하여 함수 실행 가능
특징2. 다양한 프로그래밍 언어 지원
- C#, JS, Python, Java, PowerShell 등 여러 프로그래밍 언어로 함수 작성 가능
특징3. 자동 확장성
- 필요에 따라 자동으로 확장되어 대규모 애플리케이션이나 부하가 큰 작업을 처리 가능
- 통합 기능: Azure Storage, Azure Cosmos DB, Azure Service Bus 등 다양한 Azure 서비스와 쉽게 통합 가능
AWS Lambda

- AWS 의 서버리스 컴퓨팅 서비스
- 개발자가 서버 관리 없이 코드를 실행할 수 있게 해주는 플랫폼
특징1. 서버리스 아키텍처
- 개발자는 서버 인프라를 관리하지 않고 코드 실행에만 집중 가능
특징2. 이벤트 기반 실행
- HTTP 요청, 데이터베이스 변경, 파일 업로드 등 다양한 이벤트에 반응하여 함수를 실행 가능
특징3. 다양한 프로그래밍 언어 지원
- Node.js, Python, Java, C#, Go, Ruby 등 여러 언어로 함수 작성 가능
특징4. 자동 확장성
- 수신되는 요청 수에 따라 자동으로 확장되어 대규모 워크로드 처리 가능
Azure Functions 주요 호스팅 옵션

사용 계획(Consumption Plan)
- 실행 시간에만 비용이 발생하며 자동 확장을 지원하는 기본 서버리스 호스팅
프리미엄 계획(Premium Plan)
- 콜드 스타드 없이 강력한 리소스와 가상 네트워크 지원 제공
전용 계획(App Service Plan)
- App Service 리소스를 공유하거나 항상 활성 상태로 실행 가능
Flex 사용량 계획(Flex Consumption Plan)
- 사전 인스턴스 프로비전과 빠른 확장을 지원하며 비용 효율적
Azure Functions SLA(Service Level Agreement)
- 서비스 수준 협약(SLA)
- 서비스 제공자와 고객 간에 제공될 서비스의 품질, 가용성, 책임 등을 명시한 계약으로,
- 주로 서비스의 성능 목표(가동시간, 응답시간), 문제 발생 시 대응 방법, 보상 조건등이 포함
- 즉, 서비스의 기대치를 명확히 정의하여 서비스 제공자와 고객 간의 신뢰를 형성하고 책임 소재를 분명히 하기 위해 사용
- Azure Functions의 경우 99.95%의 SLA 보장
Azure Functions Trigger
- Azure Functions를 사용하면 코드의 실행을 시작하는 트리거를 정의 가능
- 트리거는 함수에 데이터를 전달하기 위한 입력을 처리할 수도 있음
- 각 함수에는 하나의 트리거만 있을 수 있음
- 즉, 함수 앱은 여러 함수를 포함할 수 있지만, 함수에는 하나의 트리거만 허용
Azure Functions 지원 함수 유형

스토리지
- Azure Cosmos DB와 같은 db에서 이벤트를 수신 대기 가능
- 예) 새 행이 삽입되는 경우
이벤트
- Event Grid 및 Event Hubs는 코드를 트리거할 수 있는 이벤트 생성
HTTP 코드
- 웹 요청 및 웹 후크는 HTTP 코드를 트리거 가능
큐
타이머
Azure Funcitons Bindings

바인딩은 리소스 또는 서비스를 함수에 연결하는 방법
- 입력 바인딩은 함수가 파라미터에서 받는 데이터
- 즉, Azure SQL 입력 바인딩은 Azure SQL db에서 데이터를 검색하여 함수 입력 매개 변수에 전달
출력 바인딩(Output Binding)
- 출력 바인딩은 함수의 반환 값에 의해 전송된 데이터
- 예를 들어 Azure SQL 출력 바인딩을 사용하면 Azure Function을 사용하여 Azure SQL에 데이터 삽입 가능
Azure Serverless Services

- Azure Functions 는 가장 대표적인 서버리스 서비스
- 나머지 Service Bus, Event Grid, Event Hub, App Service(web apps, mobile apps, api apps, logic apps)도 서버리스 서비스에 해당
- Azure Cosmos와 SQL은 서버리스일 수도 아닐 수도 있음
Azure Serverless Service Diagram #1

1. 파일을 Blob Storage에 넣음(개 or 고양이)
2. Azure Functon이 Trigger
3. 컴퓨터 비전을 호출해서 Form Recongnizer Layout API에서 이미지 구별
4. 구별한 결과를 Azure Table에 저장
5. 결과의 통계나 BI를 Power BI를 활용해서 시각화
Azure Serverless Service Diagram #2

1. 자동차 사진들을 클라우드에 업로드
2. Azure Storage Blobs에 업로드할 때마다 트리거
3. Azure Event Grid에서 3개의 Funciton을 트리거
4. 자동차를 분석하는 Computer Vision API 호출
5. 그 외에 정보 처리를 위해 처리한 결과를 Cosmos DB에 저장
6. Cosmos DB가 새로운 함수를 트리거
7. 해당 함수는 Storage Blobs나 Logic Apps 를 통해 작업 시행
8. 여기서 Logic Apps 는 Office 365등에 자동으로 정보가 입력되게 할 수 있음
Azure Serverless Service Diagram #3

1. Mobile App에서 사용 업로드
2. Storage Blob에서 큐를 사용해서 저장
3. 큐는 순차적으로 이미지를 뽑아내서 Function 트리거
4. 해당 이미지를 Computer Vison이나 Azure Search를 통해 db에 입력하던가 함
5. 처리 결과는 SQL DB 혹은 Cosmos DB에 저장
6. DB에 저장된 데이터는 Web App에 저장
Azure Serverless Service Diagram #4

1. 이메일에 첨부 파일이 있을 때
2. Logic app이 감시하다가 Azure Data Lake Storage에 저장
3. Storage에 저장되는 이벤트를 Function이 잡아서 Azure Form Recongnizer이나 Logic App에 전달
4. 이걸 Cosmos DB에 저장하고
5. DB에 저장된 데이터가 Power BI에 저장
요약
- 서버리스는 특정한 서비스를 지칭하는 말이 아니며
- 서버리스 서비스들은 레고 블럭처럼 서비스들을 잘 쌓아 나가면 목표로 하는 서비스를 유연하고 강력하게 구성 가능
- 서버리스는 추상화 레벨이 높은 아키텍처 구성 가능