서버리스 컴퓨팅
1. 개요
1. 개요
서버리스 컴퓨팅은 개발자가 서버 인프라를 직접 관리할 필요 없이 애플리케이션 코드를 실행할 수 있는 클라우드 컴퓨팅 실행 모델이다. 이 모델에서 클라우드 제공자는 컴퓨팅 리소스의 할당, 관리 및 확장을 완전히 자동으로 처리한다. 사용자는 자신이 작성한 함수나 애플리케이션 로직에만 집중하며, 실제 서버나 운영 체제는 보이지 않는 추상화된 계층으로 존재한다.
서버리스라는 용어는 '서버가 없다'는 의미가 아니라, 서버 관리의 책임과 부담이 개발자에게서 클라우드 공급자로 이전되었다는 점을 강조한다. 이는 인프라스트럭처 관리에서 애플리케이션 개발로의 패러다임 전환을 의미한다. 주요 특징으로는 이벤트 기반 실행, 자동 확장, 그리고 코드 실행 시간이나 호출 횟수에 기반한 세분화된 과금 모델을 들 수 있다.
이 기술은 마이크로서비스 아키텍처, 백엔드 API, 실시간 데이터 처리와 같은 다양한 현대 애플리케이션 구축에 적합하다. AWS Lambda, Microsoft Azure Functions, Google Cloud Functions 등 주요 클라우드 벤더들이 이에 상응하는 서비스를 제공하고 있다.
서버리스 컴퓨팅의 등장은 애플리케이션 개발과 배포 방식을 근본적으로 변화시켰다. 개발 생산성을 높이고 초기 인프라 비용을 크게 절감할 수 있지만, 콜드 스타트 지연, 벤더 종속성, 모니터링의 복잡성과 같은 새로운 과제도 함께 제시한다.
2. 핵심 개념
2. 핵심 개념
서버리스 컴퓨팅의 핵심 개념은 서버의 존재를 추상화하여 개발자가 인프라 관리보다 비즈니스 로직에 집중할 수 있게 하는 데 있습니다. 이는 이벤트 기반 실행, 자동 확장, 사용량 기반 과금이라는 세 가지 기본 원칙으로 요약됩니다.
첫째, 이벤트 기반 실행은 서버리스 함수가 특정 트리거에 의해 호출된다는 것을 의미합니다. 이 트리거는 HTTP 요청, 데이터베이스 변경, 파일 업로드, 메시지 큐 도착 또는 예약된 시간 등 다양합니다. 함수는 이벤트가 발생할 때만 실행되고, 실행이 완료되면 자원이 즉시 회수됩니다. 이는 전통적인 상시 실행 서버 모델과 근본적으로 다릅니다.
둘째, 자동 확장은 완전히 플랫폼에 의해 관리됩니다. 개발자는 서버 용량을 프로비저닝하거나 확장 정책을 구성할 필요가 없습니다. 들어오는 요청이나 이벤트의 수에 따라 플랫폼이 자동으로 필요한 만큼의 함수 인스턴스를 동시에 생성하고 실행합니다. 트래픽이 급증하면 수천 개의 인스턴스가 병렬로 실행될 수 있으며, 트래픽이 없으면 실행 인스턴스는 제로가 됩니다.
셋째, 사용량 기반 과금 모델은 이러한 실행 모델에서 자연스럽게 파생됩니다. 사용자는 함수가 실제로 실행된 시간(일반적으로 100밀리초 단위)과 할당된 메모리 양에 대해서만 비용을 지불합니다. 함수가 실행되지 않는 동안에는 비용이 발생하지 않습니다. 이는 월별 또는 시간별로 서버를 임대하는 전통적인 모델에 비해 상당한 비용 절감을 가져올 수 있습니다.
2.1. 이벤트 기반 실행
2.1. 이벤트 기반 실행
서버리스 컴퓨팅의 핵심 동작 원리는 이벤트 기반 실행이다. 이는 코드가 특정 이벤트나 트리거에 의해 자동으로 실행되는 방식을 의미한다. 서버를 프로비저닝하거나 관리할 필요 없이, 개발자는 특정 조건이 충족될 때 실행될 함수나 코드 조각만을 작성한다. 이 코드는 일반적으로 스테이트리스하게 설계되어 각 실행이 독립적으로 처리된다.
트리거가 될 수 있는 이벤트의 종류는 매우 다양하다. 주요 예시는 다음과 같다.
이벤트 유형 | 구체적인 예시 |
|---|---|
HTTP 요청 | API 게이트웨이를 통한 웹 API 호출 |
스토리지 이벤트 | 객체 스토리지에 파일이 업로드, 수정 또는 삭제될 때 |
데이터베이스 변경 | 데이터베이스 레코드의 생성, 수정, 삭제 |
메시지 큐/스트림 | 메시지 브로커나 이벤트 버스에 새 메시지가 도착할 때 |
예약된 이벤트 | 크론(Cron) 식에 따른 주기적 실행 |
이러한 아키텍처는 이벤트 주도 아키텍처와 자연스럽게 결합된다. 각 함수는 하나의 특정 작업을 수행하도록 설계되며, 시스템의 전체 흐름은 이벤트의 발생과 전파를 통해 연결된다. 예를 들어, 사용자가 파일을 업로드하면 스토리지 이벤트가 발생하고, 이 이벤트는 파일을 썸네일로 변환하는 함수를 트리거하며, 변환이 완료되면 또 다른 이벤트가 데이터베이스를 업데이트하는 함수를 실행시킬 수 있다.
이벤트 기반 실행 모델은 리소스 사용의 효율성을 극대화한다. 코드는 이벤트가 발생하는 동안만 실행되고, 그 외의 시간에는 어떠한 컴퓨팅 리소스도 소비하지 않는다[1]. 이는 전통적인 상시 실행 서버 모델과 대비되는 근본적인 차이점이다. 결과적으로 개발자는 인프라 관리보다 비즈니스 로직 구현에 집중할 수 있게 된다.
2.2. 자동 확장
2.2. 자동 확장
서버리스 컴퓨팅에서 자동 확장은 개발자가 명시적으로 용량을 프로비저닝하거나 관리하지 않아도, 애플리케이션의 수요 변화에 따라 컴퓨팅 리소스가 자동으로 조정되는 기능을 말한다. 이는 서버리스 컴퓨팅의 가장 근본적인 특성 중 하나이다. 클라우드 컴퓨팅의 전통적인 모델에서는 사용자가 필요에 따라 서버 인스턴스의 수를 수동으로 늘리거나 줄여야 했지만, 서버리스 환경에서는 이 모든 과정이 플랫폼에 의해 투명하게 처리된다.
자동 확장의 동작 방식은 일반적으로 이벤트 기반 실행과 긴밀하게 연결되어 있다. 함수가 트리거되는 각 이벤트(예: HTTP 요청, 파일 업로드, 메시지 큐 도착)는 하나의 실행 인스턴스를 생성한다. 수신되는 이벤트의 수가 증가하면 플랫폼은 동시에 더 많은 함수 인스턴스를 병렬로 생성하여 요청을 처리한다. 반대로 트래픽이 감소하면 활성 인스턴스 수가 자동으로 줄어들며, 트래픽이 전혀 없을 때는 리소스가 0으로 축소된다. 이 과정은 거의 실시간으로 이루어진다.
이러한 확장성은 거의 무제한에 가깝다. 주요 서버리스 플랫폼은 동시 실행 수에 있어 매우 높은 한도를 제공하며, 일반적인 애플리케이션의 요구를 초과하는 수준이다. 확장 정책이나 규칙을 설정할 필요 없이, 코드를 배포하는 것만으로도 이 탄력적인 확장 능력을 즉시 활용할 수 있다. 결과적으로 애플리케이션은 갑작스러운 트래픽 급증에도 대응할 수 있는 탄력성을 확보하며, 사용하지 않는 시간 동안의 리소스 낭비를 방지한다.
2.3. 사용량 기반 과금
2.3. 사용량 기반 과금
서버리스 컴퓨팅의 과금 모델은 전통적인 클라우드 컴퓨팅 서비스와 근본적으로 다릅니다. 사용자는 프로비저닝한 서버의 가동 시간이나 용량에 대해 지불하는 것이 아니라, 실제로 코드가 실행된 횟수와 실행 시간, 그리고 소비한 리소스(예: 메모리 할당량)에 대해서만 비용을 지불합니다. 이는 '사용한 만큼만 지불한다'는 종량제 모델의 정점을 보여줍니다.
과금은 일반적으로 함수의 실행 횟수와 실행 시간을 기준으로 계산됩니다. 예를 들어, 특정 함수가 100ms 동안 128MB의 메모리를 할당받아 하루에 100만 번 실행되었다면, 과금은 이 세 가지 요소(실행 횟수, 실행 시간, 메모리 크기)를 모두 곱한 값에 기반합니다. 대부분의 주요 공급자는 매월 일정 횟수의 무료 실행과 일정 시간의 무료 실행 시간을 제공하여 소규모 사용이나 테스트를 지원합니다.
이 모델은 비용 효율성을 극대화합니다. 애플리케이션에 트래픽이 전혀 없는 시간에는 실행 횟수가 0이므로 컴퓨팅 비용 역시 0원이 발생합니다. 반대로 갑작스러운 트래픽 급증 시에는 시스템이 자동으로 확장되어 요청을 처리하며, 이 증가된 사용량에 대해서만 비용이 청구됩니다. 이는 미리 최대 부하를 예측하여 과도한 용량을 프로비저닝하고 그 비용을 지불해야 하는 전통적인 방식과 대비됩니다.
과금 요소 | 설명 | 예시 (가상 가격) |
|---|---|---|
실행 횟수 | 함수가 트리거되어 호출된 총 횟수. | 1백만 회 실행당 $0.20 |
실행 시간 | 함수가 실제로 코드를 실행한 시간(보통 100ms 단위). 메모리 크기에 비례하여 계산됨. | 128MB-초 당 $0.0000000021 |
프로비저닝된 용량 | 할당된 메모리 크기와 (일부 서비스의 경우) vCPU 사양이 실행 시간 계산에 영향을 줌. | - |
하지만 이 모델은 예측 가능성이 떨어질 수 있습니다. 애플리케이션 사용 패턴이 불규칙하면 월별 비용 변동이 클 수 있으며, 코드 비효율성(예: 과도한 루프 또는 메모리 사용)이 직접적으로 비용 증가로 이어질 수 있습니다. 따라서 비용을 최적화하기 위해서는 함수의 실행 시간을 단축하고, 필요한 메모리를 적절히 설정하며, 불필요한 호출을 최소화하는 것이 중요합니다.
3. 주요 서비스 및 플랫폼
3. 주요 서비스 및 플랫폼
AWS Lambda는 아마존 웹 서비스가 2014년에 출시한 최초의 주요 서버리스 컴퓨팅 서비스이다. 이 서비스는 Node.js, Python, Java, Go, .NET 등 다양한 런타임을 지원하며, 사용자가 코드를 업로드하면 이를 실행하고 관리한다. Lambda 함수는 Amazon S3, Amazon DynamoDB, Amazon API Gateway 등 다른 AWS 서비스와의 통합이 용이하여 이벤트에 반응하는 애플리케이션을 구축하기에 적합하다.
Microsoft Azure의 Azure Functions는 2016년에 공개된 서버리스 컴퓨팅 솔루션이다. .NET 생태계와의 긴밀한 통합이 특징이며, C#, F#, Java, JavaScript, PowerShell, Python 등을 지원한다. Azure Functions는 HTTP 트리거, 타이머, Azure Service Bus나 Azure Cosmos DB와 같은 서비스의 이벤트에 의해 실행될 수 있다. 또한 Durable Functions 확장을 통해 상태 저장 워크플로우를 오케스트레이션하는 기능을 제공한다.
Google Cloud의 Google Cloud Functions는 Google의 서버리스 실행 환경이다. 주로 Google Cloud Platform의 이벤트 기반 생태계와 통합되어 동작한다. 예를 들어, Cloud Storage 버킷에 파일이 업로드되거나, Cloud Pub/Sub에 메시지가 게시되면 함수가 트리거된다. 2세대 플랫폼은 더 긴 실행 시간, 더 큰 인스턴스, 그리고 Cloud Run 및 Eventarc와의 향상된 통합을 제공한다.
이들 주요 플랫폼 외에도, IBM Cloud Functions(Apache OpenWhisk 기반), Oracle Cloud Functions, 그리고 Cloudflare Workers와 같은 엣지 컴퓨팅 환경도 서버리스 옵션을 제공한다. 각 플랫폼은 고유한 강점을 가지며, 특정 프로그래밍 언어, 통합 서비스, 배포 모델 또는 가격 정책에 따라 선택의 기준이 된다.
3.1. AWS Lambda
3.1. AWS Lambda
AWS Lambda는 아마존 웹 서비스가 제공하는 서버리스 컴퓨팅 플랫폼이다. 사용자는 서버를 프로비저닝하거나 관리할 필요 없이 코드를 실행할 수 있다. Lambda는 이벤트 기반 실행 모델을 채택하여, S3 버킷에 파일이 업로드되거나, API Gateway를 통해 HTTP 요청이 들어오거나, DynamoDB 테이블이 업데이트되는 등의 이벤트에 응답하여 코드를 실행한다.
Lambda 함수는 다양한 프로그래밍 언어로 작성할 수 있으며, 지원 언어로는 Node.js, Python, Java, Go, .NET Core, Ruby 등이 있다. 함수는 트리거에 의해 호출되면 실행 환경에서 실행되며, 실행 시간과 사용한 메모리 양에 따라 과금된다. 기본적으로 함수는 자동으로 확장되며, 동시에 수천 개의 인스턴스가 병렬로 실행될 수 있다.
주요 구성 요소와 특징은 다음과 같다.
구성 요소/특징 | 설명 |
|---|---|
함수(Function) | 업로드하여 실행하는 코드 단위이다. |
핸들러(Handler) | 함수가 실행을 시작하는 진입점 메서드이다. |
트리거(Trigger) | 함수를 실행시키는 AWS 서비스 또는 리소스이다. (예: S3, API Gateway, CloudWatch Events) |
실행 역할(Execution Role) | 함수가 AWS 서비스에 접근할 수 있는 권한을 부여하는 IAM 역할이다. |
계층(Layer) | 함수 코드와는 별도로 관리할 수 있는 라이브러리나 커스텀 런타임을 포함하는 배포 패키지이다. |
Lambda는 마이크로서비스 아키텍처, 실시간 데이터 처리, 백엔드 API 구축 등 다양한 사용 사례에 적용된다. 함수의 최대 실행 시간은 15분으로 제한되어 있으며, 장시간 실행되는 작업에는 적합하지 않을 수 있다. 또한 함수가 일정 시간 호출되지 않으면 실행 환경이 비활성화되는 콜드 스타트 현상이 발생할 수 있다.
3.2. Azure Functions
3.2. Azure Functions
Azure Functions는 마이크로소프트의 클라우드 컴퓨팅 플랫폼인 Microsoft Azure에서 제공하는 서버리스 컴퓨팅 서비스이다. 코드를 함수 단위로 실행할 수 있도록 하며, 다양한 프로그래밍 언어와 트리거를 지원한다.
지원하는 주요 언어로는 C#, F#, JavaScript, Python, Java, PowerShell 등이 포함된다. 함수는 다양한 이벤트에 의해 트리거될 수 있으며, 대표적인 트리거 유형은 다음과 같다.
트리거 유형 | 설명 |
|---|---|
HTTP 트리거 | HTTP 요청에 의해 함수가 실행된다. |
타이머 트리거 | Cron 표현식으로 정의된 일정에 따라 함수가 실행된다. |
스토리지 트리거 | Azure Blob Storage나 Azure Queue Storage의 변경 사항에 반응한다. |
서비스 버스 트리거 | Azure Service Bus의 큐나 토픽 메시지를 처리한다. |
코스모스 DB 트리거 | Azure Cosmos DB의 변경 피드를 수신한다. |
함수는 Azure Portal, Visual Studio, Visual Studio Code 또는 명령줄 도구를 통해 개발하고 배포할 수 있다. 실행 모델에는 소비 계획, 프리미엄 계획, 전용(App Service) 계획 등이 있어 워크로드에 맞게 유연하게 선택 가능하다. 특히 소비 계획은 전형적인 서버리스 모델로, 사용한 컴퓨팅 시간에 대해서만 비용이 청구된다. 또한 Azure Functions는 Azure DevOps 및 GitHub Actions와 같은 CI/CD 파이프라인과의 통합을 통해 지속적인 배포를 쉽게 구현할 수 있다.
3.3. Google Cloud Functions
3.3. Google Cloud Functions
Google Cloud Functions는 Google Cloud Platform에서 제공하는 서버리스 컴퓨팅 서비스이다. 이 서비스는 개발자가 서버를 프로비저닝하거나 관리할 필요 없이 코드를 실행할 수 있게 해준다. Google Cloud Functions는 이벤트 기반 실행 모델을 채택하여, Cloud Storage 버킷의 파일 업로드, Cloud Pub/Sub 토픽의 메시지, HTTP 요청 등 다양한 이벤트에 반응하여 함수를 트리거한다. 지원하는 런타임에는 Node.js, Python, Go, Java, .NET, Ruby, PHP 등이 포함된다.
이 서비스의 주요 특징은 다른 Google Cloud 서비스와의 긴밀한 통합에 있다. 예를 들어, Cloud Storage에 새 객체가 생성되거나 Firestore에 문서가 업데이트될 때 함수가 자동으로 실행될 수 있다. 또한 Cloud Build와의 통합을 통해 CI/CD 파이프라인을 구성하기 용이하다. Google Cloud Functions는 기본적으로 필요에 따라 자동으로 확장되며, 함수가 실행된 시간과 호출 횟수에 따라 과금되는 사용량 기반 과금 모델을 따른다.
특징 | 설명 |
|---|---|
트리거 | HTTP, Cloud Storage, Cloud Pub/Sub, Firestore, Firebase 등 |
런타임 | |
실행 환경 | 1세대, 2세대(개선된 성능과 확장성 제공) |
최대 실행 시간 | 1세대: 9분, 2세대: 60분[2] |
네트워킹 | VPC 커넥터를 통한 사설 네트워크 접근 지원 |
Google Cloud Functions는 경량의 단일 목적 함수를 배포하는 데 적합하며, 실시간 데이터 처리, API 백엔드, 마이크로서비스 구성 요소 구현 등에 널리 사용된다. 서비스의 관리, 모니터링, 로깅은 Google Cloud Console, gcloud CLI, Cloud Monitoring 등을 통해 이루어진다.
4. 아키텍처 패턴
4. 아키텍처 패턴
서버리스 컴퓨팅은 특정 아키텍처 패턴과 결합될 때 그 진가를 발휘한다. 대표적인 패턴으로는 마이크로서비스, 이벤트 주도 아키텍처, 그리고 API 게이트웨이 통합이 있다. 이러한 패턴들은 애플리케이션을 작고 독립적인 단위로 분해하여, 각 단위를 서버리스 함수로 구현하고 관리하는 데 적합하다.
마이크로서비스 패턴을 서버리스와 결합하면, 각 마이크로서비스를 별도의 함수로 배포하고 실행할 수 있다. 이는 서비스별로 독립적인 배포와 확장을 가능하게 하며, 특정 기능의 수요 증가에만 대응하여 자원을 효율적으로 할당한다. 이벤트 주도 아키텍처는 서버리스의 본질적인 실행 모델과 잘 맞는다. AWS Lambda나 Azure Functions 같은 서비스는 클라우드 스토리지에 파일이 업로드되거나, 메시지 큐에 항목이 추가되거나, 데이터베이스가 변경되는 등의 이벤트를 트리거로 하여 함수를 실행한다. 이는 애플리케이션의 다양한 구성 요소를 느슨하게 결합시킨다.
API 게이트웨이는 서버리스 함수를 외부 클라이언트에 노출하는 표준적인 진입점 역할을 한다. 클라이언트의 HTTP 요청은 API 게이트웨이에 의해 수신되고, 이는 적절한 서버리스 함수를 호출하여 비즈니스 로직을 실행한 후 응답을 반환한다. 이 패턴은 완전한 서버리스 웹 애플리케이션 백엔드를 구축하는 데 필수적이다. 이러한 패턴들은 종종 함께 사용되어 복잡한 애플리케이션을 구성한다.
패턴 | 설명 | 서버리스와의 연관성 |
|---|---|---|
마이크로서비스 | 애플리케이션을 작고 독립적으로 배포 가능한 서비스의 집합으로 구성하는 아키텍처 스타일 | 각 서비스를 하나 이상의 서버리스 함수로 구현하여 운영 부담을 줄이고 독립적 확장을 가능하게 함 |
이벤트 주도 아키텍처 | 상태의 변화나 사건 발생(이벤트)에 반응하여 프로그램의 흐름이 결정되는 소프트웨어 패턴 | 서버리스 함수의 주요 실행 트리거 방식으로, 다양한 클라우드 서비스의 이벤트에 반응함 |
API 게이트웨이 통합 | 클라이언트 요청을 백엔드 서비스로 라우팅하고 집계하는 단일 진입점을 제공하는 패턴 | HTTP 기반 요청을 서버리스 함수로 연결하여 웹 API나 백엔드 서비스를 쉽게 구축할 수 있게 함 |
4.1. 마이크로서비스
4.1. 마이크로서비스
마이크로서비스 아키텍처는 하나의 큰 애플리케이션을 여러 개의 작고 독립적인 서비스로 분해하는 소프트웨어 개발 스타일이다. 각 서비스는 특정 비즈니스 기능을 담당하며, 잘 정의된 API를 통해 서로 통신한다. 이러한 서비스는 독립적으로 배포, 확장, 업데이트될 수 있다.
서버리스 컴퓨팅은 마이크로서비스 아키텍처를 구현하는 데 이상적인 플랫폼을 제공한다. 각 마이크로서비스를 AWS Lambda나 Azure Functions와 같은 서버리스 함수로 구현할 수 있다. 이를 통해 개발자는 인프라 관리 없이 각 서비스의 비즈니스 로직에만 집중할 수 있다. 서비스 간 통신은 이벤트 주도 아키텍처 패턴을 통해 비동기적으로 이루어지는 경우가 많다.
서버리스 마이크로서비스의 주요 이점은 다음과 같다.
이점 | 설명 |
|---|---|
독립적인 배포와 확장 | 각 함수(서비스)는 독립적으로 배포되고, 트래픽에 따라 자동으로 확장된다. |
기술 스택의 다양성 | 서비스마다 다른 프로그래밍 언어나 런타임을 사용할 수 있다. |
운영 효율성 | 인프라 프로비저닝 및 패치 관리와 같은 운영 오버헤드가 크게 줄어든다. |
그러나 이 접근 방식은 서비스 간 통신이 네트워크 호출에 의존하므로 지연 시간이 증가할 수 있으며, 분산 시스템의 복잡성(예: 분산 트랜잭션 관리)을 고려해야 한다. 또한, 수많은 작은 함수를 관리하는 것이 새로운 운영 과제가 될 수 있다.
4.2. 이벤트 주도 아키텍처
4.2. 이벤트 주도 아키텍처
이벤트 주도 아키텍처(Event-Driven Architecture, EDA)는 시스템의 구성 요소 간 통신이 이벤트의 생산, 감지, 소비 및 반응을 중심으로 이루어지는 소프트웨어 아키텍처 패턴이다. 서버리스 컴퓨팅은 이 패턴과 매우 높은 친화성을 지니며, 이벤트가 발생할 때만 함수가 실행되는 실행 모델 덕분에 EDA를 구현하는 이상적인 플랫폼 역할을 한다.
이 아키텍처에서 이벤트는 시스템 내에서 발생한 상태의 변화나 중요한 사건을 나타낸다. 예를 들어, 파일이 객체 저장소에 업로드되거나, 데이터베이스 레코드가 갱신되거나, 메시지 큐에 새로운 항목이 도착하는 것이 이벤트가 된다. 서버리스 함수는 이러한 이벤트를 트리거로 삼아 실행된다. 이는 전통적인 폴링(polling) 방식보다 효율적이며, 시스템이 이벤트에 실시간으로 반응할 수 있게 한다.
EDA와 서버리스의 결합은 느슨한 결합과 확장성을 제공한다. 각 서버리스 함수는 특정 이벤트 유형을 처리하는 독립적인 마이크로서비스로 작동한다. 하나의 이벤트가 여러 함수를 순차적 또는 병렬적으로 실행하게 할 수도 있다. 이 패턴은 복잡한 비즈니스 워크플로우를 구성하는 데 적합하다.
구성 요소 | 역할 | 서버리스 구현 예시 |
|---|---|---|
이벤트 생산자 | 상태 변화를 감지하고 이벤트를 발행한다. | S3, DynamoDB, API Gateway, 사용자 애플리케이션 |
이벤트 라우터/버스 | 이벤트를 적절한 소비자에게 전달한다. | |
이벤트 소비자 | 이벤트를 수신하고 비즈니스 로직을 실행한다. |
이러한 구조 덕분에 개발자는 인프라 관리보다 비즈니스 로직 구현에 집중할 수 있으며, 시스템은 이벤트 발생량에 따라 자동으로 확장된다. 결과적으로 이벤트 주도 아키텍처는 서버리스의 핵심 강점인 탄력성과 효율성을 최대한 활용할 수 있는 설계 패러다임이 된다.
4.3. API 게이트웨이 통합
4.3. API 게이트웨이 통합
API 게이트웨이는 서버리스 컴퓨팅 아키텍처에서 클라이언트 요청을 서버리스 함수로 라우팅하는 핵심 구성 요소이다. 이는 단일 진입점을 제공하여 여러 함수를 하나의 API로 통합하고, 인증, 속도 제한, 로깅과 같은 공통 작업을 중앙에서 처리한다.
서버리스 함수는 일반적으로 HTTP 요청을 직접 수신하지 않으며, API 게이트웨이를 통해 트리거된다. 게이트웨이는 들어오는 요청을 수신하고, 사전 정의된 규칙에 따라 특정 함수(예: AWS Lambda)를 실행한다. 이 통합은 마이크로서비스 기반의 백엔드를 단순화된 API 인터페이스 뒤에 효과적으로 숨긴다. 주요 통합 패턴은 다음과 같다.
패턴 | 설명 | 일반적인 사용 사례 |
|---|---|---|
RESTful API 프록시 | 특정 HTTP 메서드(GET, POST 등)와 경로(/users, /orders)를 특정 함수에 매핑한다. | 웹 애플리케이션 백엔드, 모바일 API |
HTTP 요청 변환 | 게이트웨이가 요청의 형식(쿼리 파라미터, 헤더, 본문)을 함수가 기대하는 이벤트 형식으로 변환한다. | 다양한 클라이언트 처리, 레거시 시스템 통합 |
응답 처리 및 형식화 | 함수의 출력을 표준 HTTP 응답(상태 코드, 헤더, 본문)으로 변환하여 클라이언트에 반환한다. | 일관된 API 응답 제공 |
이러한 통합은 개발자가 인프라 관리보다 비즈니스 로직에 집중할 수 있게 하며, 보안 정책과 사용량 계획을 API 수준에서 일관되게 적용할 수 있다. 결과적으로, API 게이트웨이는 서버리스 애플리케이션의 진입점이자 관리 계층으로 작동하여 확장성과 유지 보수성을 높인다.
5. 장점
5. 장점
서버리스 컴퓨팅의 가장 큰 장점은 인프라스트럭처 관리에 대한 운영 오버헤드가 현저히 감소한다는 점이다. 개발자는 서버의 프로비저닝, 패치 관리, 운영 체제 유지보수, 용량 계획 등에 신경 쓸 필요 없이 애플리케이션 코드 작성과 비즈니스 로직 구현에만 집중할 수 있다. 이는 개발 생산성을 크게 향상시키고, 출시까지의 시간을 단축시킨다.
비용 효율성 또한 주요 장점으로 꼽힌다. 기존의 클라우드 컴퓨팅 모델이 서버가 가동되는 시간에 따라 요금이 부과되는 반면, 서버리스 모델은 코드가 실제로 실행되는 시간과 사용한 컴퓨팅 리소스에 대해서만 비용을 지불한다. 코드가 실행되지 않는 동안에는 비용이 전혀 발생하지 않아 유휴 상태의 서버에 대한 비용을 절감할 수 있다. 이는 사용량이 변동적이거나 예측하기 어려운 애플리케이션에 특히 유리하다.
서버리스 컴퓨팅은 탁월한 확장성을 제공한다. 클라우드 서비스 공급자가 자동으로 인프라의 확장과 축소를 관리한다. 애플리케이션에 들어오는 요청이나 이벤트의 수에 따라 함수 인스턴스가 실시간으로 생성되고 제거되어 트래픽 급증 시에도 성능을 유지할 수 있다. 개발자가 별도의 확장 정책을 구성하거나 관리할 필요가 없는 진정한 의미의 자동 확장이 가능하다.
이러한 특성들은 애플리케이션의 유지 관리성을 높이고, 초기 투자 비용을 낮추며, 빠른 시장 출시를 가능하게 한다. 결과적으로 조직은 더 민첩하게 혁신하고 실험할 수 있는 환경을 얻게 된다.
5.1. 운영 오버헤드 감소
5.1. 운영 오버헤드 감소
서버리스 컴퓨팅의 가장 큰 장점은 인프라 관리와 관련된 운영 부담이 크게 줄어든다는 점이다. 개발자는 가상 머신, 컨테이너, 물리적 서버의 프로비저닝, 패치 관리, 운영 체제 유지보수, 용량 계획과 같은 작업을 직접 수행할 필요가 없다. 이러한 인프라 관리 책임은 클라우드 서비스 공급자로 이전되어, 개발팀은 애플리케이션 코드와 비즈니스 로직 개발에 집중할 수 있다.
이로 인해 개발 생산성이 향상되고 출시 주기가 단축된다. 서버리스 플랫폼은 기본적으로 고가용성과 내결함성을 제공하므로, 이러한 특성을 위해 별도의 아키텍처를 설계하거나 복잡한 구성 작업을 할 필요가 없다. 또한, 자동 확장 기능이 내장되어 있어 트래픽 증가에 따른 수동적인 모니터링과 조정 작업이 필요 없다.
운영 오버헤드 감소는 특히 소규모 팀이나 빠른 시장 출시가 중요한 스타트업에게 유리하다. 인프라 전문 인력에 대한 의존도를 낮추고, 제한된 리소스로 핵심 비즈니스 가치를 구현하는 데 더 많은 시간을 투자할 수 있게 한다.
5.2. 비용 효율성
5.2. 비용 효율성
서버리스 컴퓨팅의 비용 효율성은 전통적인 클라우드 컴퓨팅 모델과 비교하여 두드러진 특징이다. 이 모델은 사용자가 실제로 소비한 컴퓨팅 리소스에 대해서만 비용을 지불하는 사용량 기반 과금 방식을 채택한다. 이는 서버를 프로비저닝하고 유지 관리하는 데 드는 선불 비용이나 유휴 상태의 서버에 대한 지속적인 비용이 발생하지 않음을 의미한다. 애플리케이션의 코드가 실행되는 시간(일반적으로 100밀리초 단위)과 실행 중에 소비하는 메모리 양을 기준으로 요금이 청구된다.
비용 구조를 구체적으로 살펴보면, 주요 클라우드 서비스 공급자들은 다음과 같은 기준으로 과금한다.
과금 요소 | 설명 | 예시 (AWS Lambda 기준) |
|---|---|---|
실행 시간 | 코드가 실행된 총 시간 | 요청 처리에 1GB 메모리를 1초간 사용 |
요청 수 | 함수가 트리거된 총 횟수 | HTTP 요청 또는 파일 업로드 이벤트 발생 횟수 |
프로비저닝된 리소스 | 할당된 메모리 크기 | 함수 설정 시 지정한 메모리(128MB ~ 10GB) |
이 모델은 특히 트래픽 패턴이 불규칙하거나 예측하기 어려운 애플리케이션에 큰 경제적 이점을 제공한다. 사용량이 적은 시간대나 개발/테스트 환경에서는 비용이 거의 발생하지 않으며, 트래픽이 급증할 때도 자동으로 확장되어 필요한 만큼의 리소스에 대해서만 비용이 청구된다. 결과적으로 용량 계획의 실패로 인한 리소스 과다 프로비저닝이나 과소 프로비저닝으로 인한 성능 저하에 따른 기회 비용을 모두 줄일 수 있다.
또한, 운영 오버헤드 감소로 인한 간접적인 비용 절감 효과도 중요하다. 서버 운영 체제 패치, 보안 업데이트, 인프라 모니터링 및 확장성 관리와 같은 작업이 플랫폼 공급자에게 이관되므로, 개발 팀은 비즈니스 로직 구현에 더 집중할 수 있다. 이는 인프라 관리에 필요한 인력과 시간을 절약하여 총 소유 비용을 낮추는 데 기여한다.
5.3. 확장성
5.3. 확장성
서버리스 컴퓨팅의 확장성은 애플리케이션이 수신하는 트래픽이나 이벤트 양에 따라 자동으로, 그리고 즉각적으로 컴퓨팅 리소스를 조정하는 능력을 의미한다. 이는 개발자가 인프라 용량을 사전에 프로비저닝하거나 관리할 필요 없이, 코드 실행 단위(예: 함수)가 필요에 따라 병렬로 수천 개까지 생성되고 종료될 수 있게 한다. 이러한 탄력적인 확장은 수직적(Scale-up)이 아닌 수평적(Scale-out) 방식으로 이루어진다[3].
확장성은 완전히 자동화되어 있으며, 거의 무한대에 가깝다고 평가된다. 예를 들어, AWS Lambda는 초당 수천 건의 함수 호출을 처리하도록 확장할 수 있다. 이 과정은 사용자 개입 없이 클라우드 플랫폼에 의해 관리된다. 트래픽이 급증하면 플랫폼은 더 많은 함수 인스턴스를 실행하여 부하를 분산시키고, 트래픽이 감소하면 사용되지 않는 인스턴스를 빠르게 정리한다.
확장 특성 | 설명 |
|---|---|
자동 확장(Auto-scaling) | 개발자나 운영팀의 개입 없이 플랫폼이 트래픽을 감지하고 리소스를 할당 또는 회수한다. |
세분화된 확장(Granular Scaling) | 애플리케이션 전체가 아닌 개별 함수 단위로 확장이 이루어진다. |
즉각적인 확장(Instant Scaling) | 확장 결정과 실행 사이의 지연 시간(레이턴시)이 매우 짧다. |
이러한 확장 모델은 예측하기 어려운 변동성이 큰 워크로드에 특히 적합하다. 주문 처리, 미디어 변환, 실시간 데이터 스트림 처리와 같이 갑작스러운 요청 폭주가 발생할 수 있는 사용 사례에서 서버리스는 필요한 만큼만 리소스를 사용하고 최대 수요를 효율적으로 처리할 수 있게 한다. 다만, 함수 인스턴스가 처음 시작될 때 발생하는 콜드 스타트 지연은 극단적으로 빠른 확장 요구 사항이 있는 경우 고려해야 할 요소이다.
6. 단점 및 고려사항
6. 단점 및 고려사항
서버리스 컴퓨팅은 여러 장점을 제공하지만, 특정 기술적 한계와 고려해야 할 사항을 동반한다. 가장 주목받는 단점은 콜드 스타트 현상이다. 이는 함수가 일정 시간 동안 호출되지 않아 비활성화된 상태에서 새로운 요청이 들어올 때, 실행 환경을 처음부터 준비하는 데 발생하는 지연 시간을 의미한다. 이 지연은 애플리케이션의 응답 시간에 영향을 미칠 수 있으며, 특히 실시간 처리가 중요한 서비스에서는 중요한 고려 사항이 된다. 콜드 스타트를 완화하기 위해 프로비저닝된 동시성[4]을 활용하거나, 함수를 정기적으로 호출하여 웜 상태를 유지하는 등의 전략이 사용된다.
또 다른 주요 고려사항은 벤더 종속성이다. 개발자가 특정 클라우드 공급자(AWS, Azure, Google Cloud)의 서비스, API, 런타임 환경에 애플리케이션 로직을 깊이 결합하면, 다른 플랫폼으로의 이전이 어려워진다. 이는 잠재적인 비용 상승이나 서비스 중단 위험으로 이어질 수 있다. 이를 완화하기 위해 서버리스 프레임워크나 Knative와 같은 크로스 플랫폼 도구를 사용하거나, 비즈니스 로직을 플랫폼 특화 코드에서 분리하는 설계를 적용한다.
운영 측면에서는 기존 모노리스 애플리케이션에 비해 디버깅과 모니터링이 더 복잡해질 수 있다. 수많은 분산된 함수 인스턴스에서 발생하는 로그를 집계하고, 분산 트랜잭션을 추적하는 것은 도전 과제이다. 또한, 실행 시간과 메모리 제한, 동시 실행 제한과 같은 플랫폼 제약을 고려하여 애플리케이션을 설계해야 한다. 장시간 실행되는 배치 작업은 서버리스 함수에 적합하지 않을 수 있다.
고려사항 | 설명 | 완화 전략 예시 |
|---|---|---|
비활성 함수의 초기 실행 지연 | 프로비저닝된 동시성 사용, 정기적 핑(Ping) | |
특정 클라우드 플랫폼에 대한 의존성 | 서버리스 프레임워크 채택, 추상화 계층 설계 | |
분산 모니터링 | 여러 함수 인스턴스의 로그 및 트레이스 집계 어려움 | |
실행 제약 | 런타임 시간, 메모리, 배포 패키지 크기 제한 | 작업을 작은 함수로 분할, 효율적인 코드 및 라이브러리 관리 |
6.1. 콜드 스타트
6.1. 콜드 스타트
콜드 스타트는 서버리스 컴퓨팅 환경에서 함수가 호출될 때, 실행 환경이 초기화되는 데 필요한 지연 시간을 의미한다. 이는 함수가 일정 시간 동안 호출되지 않아 실행 환경이 종료된 후, 새로운 요청이 들어올 때 발생한다. 서버리스 플랫폼은 비용 절감과 리소스 효율성을 위해 유휴 상태의 실행 환경을 정리하기 때문에 불가피한 현상이다. 콜드 스타트는 함수의 초기 실행 시간을 결정짓는 주요 요소로 작용한다.
콜드 스타트 지연 시간은 사용하는 프로그래밍 언어, 함수 코드의 크기 및 복잡성, 연결된 종속성 라이브러리의 수, 그리고 클라우드 벤더의 특정 구현 방식에 따라 크게 달라진다. 일반적으로 자바나 C#과 같이 가상 머신 기반의 언어는 런타임 초기화에 시간이 더 소요되어 콜드 스타트가 길어지는 경향이 있다. 반면, Node.js나 Python과 같은 인터프리터 언어는 상대적으로 빠른 시작 시간을 보인다.
콜드 스타트를 완전히 제거하는 것은 어렵지만, 완화하기 위한 여러 전략이 존재한다. 일반적인 방법은 함수를 정기적으로 호출하여 실행 환경을 '따뜻하게' 유지하는 워밍 기법이다. 또한, 함수 코드를 최소화하고 불필요한 종속성을 줄이며, 벤더가 제공하는 프로비저닝된 동시성[5] 같은 기능을 활용할 수 있다. 애플리케이션 설계 단계에서 짧은 실행 시간을 요구하는 실시간 트랜잭션보다는 배치 처리나 비동기 작업에 서버리스 함수를 우선 배치하는 것도 고려사항이다.
완화 전략 | 설명 | 고려사항 |
|---|---|---|
정기적 워밍 호출 | 일정 간격으로 함수를 트리거하여 실행 환경을 유지한다. | 추가적인 호출 비용이 발생할 수 있다. |
코드 및 종속성 최소화 | 함수 패키지 크기를 줄여 초기화 시간을 단축한다. | 기능 구현에 제약이 따를 수 있다. |
프로비저닝된 동시성 사용 | 벤더별 기능을 통해 미리 지정된 수의 실행 환경을 준비한다. | 추가 비용이 발생하며, 용량 계획이 필요하다. |
가벼운 런타임 선택 | 콜드 스타트가 상대적으로 빠른 언어(예: Node.js, Go)를 채택한다. | 기존 기술 스택과의 호환성 문제가 있을 수 있다. |
6.2. 벤더 종속성
6.2. 벤더 종속성
벤더 종속성은 특정 클라우드 공급자의 서비스, API, 런타임 환경, 배포 및 관리 도구에 애플리케이션이 깊이 의존하게 되는 상태를 의미한다. 서버리스 컴퓨팅은 추상화된 플랫폼을 제공하지만, 그 이면에는 공급자별로 상이한 구현 방식과 서비스 생태계가 존재한다. 개발자는 AWS Lambda, Azure Functions, Google Cloud Functions 등의 특정 플랫폼에 맞춰 코드를 작성하고, 해당 플랫폼의 트리거 서비스(예: Amazon S3, Azure Blob Storage) 및 관리 콘솔에 애플리케이션 로직을 결합하게 된다.
이로 인해 몇 가지 주요 문제가 발생할 수 있다. 첫째, 플랫폼 간 이식성이 낮아진다. 한 공급자의 서버리스 함수를 다른 공급자 환경으로 마이그레이션하려면 상당한 코드 수정과 재구성이 필요하다. 둘째, 비용 구조와 성능 특성이 벤더마다 다르므로, 변경 시 예상치 못한 비용 증가나 성능 저하가 발생할 수 있다. 셋째, 특정 벤더의 서비스 중단, 정책 변경, 가격 인상에 애플리케이션이 취약해진다.
이러한 종속성을 완화하기 위한 접근법으로 서버리스 프레임워크(예: Serverless Framework, AWS SAM)나 멀티클라우드 지원 도구를 사용하여 배포를 추상화하는 방법이 있다. 또한, 핵심 비즈니스 로직을 벤더 중립적인 방식으로 설계하고, 벤더 특화 코드를 별도의 계층으로 격리하는 아키텍처 패턴(예: 어댑터 패턴)을 적용하기도 한다. 그러나 이러한 노력에도 불구하고, 완전한 벤더 중립성을 달성하는 것은 현실적으로 어려운 경우가 많다.
6.3. 디버깅 및 모니터링
6.3. 디버깅 및 모니터링
서버리스 환경에서의 디버깅과 모니터링은 전통적인 서버 기반 애플리케이션과는 다른 접근 방식을 요구한다. 개발자는 코드가 실행되는 인프라에 대한 직접적인 제어권이 없으며, 함수는 짧은 시간 동안만 실행되고 종료되는 이벤트 기반 실행 모델을 따른다. 이로 인해 로그 수집, 실행 추적, 성능 병목 현상 식별이 더 복잡해질 수 있다.
주요 모니터링 요소는 함수 호출 횟수, 실행 시간, 오류율, 콜드 스타트 빈도 등을 포함한다. 각 클라우드 벤더는 자체 모니터링 도구를 제공한다. 예를 들어, AWS Lambda는 Amazon CloudWatch와 통합되어 지표와 로그를 제공하며, Azure Functions는 Application Insights를, Google Cloud Functions는 Cloud Monitoring과 Cloud Logging을 활용한다. 이러한 플랫폼 도구는 기본적인 가시성을 제공하지만, 종종 타사 APM(애플리케이션 성능 관리) 도구를 추가로 도입하여 분산 추적과 상세한 성능 분석을 수행한다.
디버깅의 주요 난제는 로컬 환경과 프로덕션 환경의 차이, 특히 콜드 스타트 시의 동작 차이를 재현하기 어렵다는 점이다. 로컬 테스트를 위한 에뮬레이터나 도구를 사용하는 것이 일반적이다. 또한, 함수가 상태를 유지하지 않기 때문에, 오류 발생 시의 컨텍스트 정보를 충분히 로그에 기록하는 것이 중요하다. 구조화된 로깅을 적용하고, 모든 예외를 적절히 처리하여 상세한 오류 메시지를 출력하도록 코드를 작성하는 것이 필수적이다.
효과적인 모니터링을 위해 다음 항목들을 중점적으로 점검하는 것이 좋다.
모니터링 항목 | 설명 | 관련 문제 |
|---|---|---|
실행 시간 | 함수가 시작되어 종료될 때까지의 소요 시간. | 시간 초과, 비용 증가, 성능 저하. |
콜드 스타트 지연 | 함수 인스턴스가 초기화되는 데 걸리는 시간. | 예측 불가능한 응답 지연. |
호출 오류율 | 총 호출 대비 실패한 호출의 비율. | 코드 결함, 의존성 문제, 권한 오류. |
동시 실행 수 | 동시에 실행되는 함수 인스턴스의 수. | 자동 확장 한도 초과, 서비스 거부. |
7. 사용 사례
7. 사용 사례
서버리스 컴퓨팅은 특정한 이벤트에 반응하여 코드를 실행하는 이벤트 기반 모델로, 다양한 실제 업무에 적용된다. 가장 일반적인 사용 사례는 데이터 처리 및 변환이다. 예를 들어, 클라우드 스토리지에 새로운 파일이 업로드되면 AWS Lambda나 Azure Functions 같은 서버리스 함수가 자동으로 트리거되어 이미지 리사이징, 비디오 트랜스코딩, 또는 로그 데이터를 정제하고 데이터베이스에 저장하는 작업을 수행한다. 이는 배치 작업을 위한 전용 서버를 상시 운영할 필요가 없게 만든다.
실시간 파일 처리 또한 대표적인 사례이다. 사용자가 업로드한 문서를 즉시 PDF로 변환하거나, 업로드된 동영상의 섬네일을 생성하는 작업에 적합하다. 이벤트 발생 시에만 리소스가 할당되고 작업이 완료되면 즉시 종료되므로, 짧은 시간에 집중되는 처리 작업에 매우 효율적이다. 또한, API 게이트웨이와 통합된 웹 애플리케이션 백엔드 구현에 널리 사용된다. RESTful API의 엔드포인트 요청을 받아 비즈니스 로직(예: 사용자 인증, 주문 처리, 데이터 조회)을 실행하는 마이크로서비스를 서버리스 함수로 구축할 수 있다.
다른 주요 사용 사례는 다음과 같다.
사용 사례 | 설명 | 트리거 예시 |
|---|---|---|
예약된 작업 | 정해진 일정에 따라 실행되는 배치 작업 (크론 잡) | 클라우드 워치 이벤트 규칙 |
IoT 데이터 스트리밍 | 수많은 IoT 센서에서 발생하는 실시간 데이터 처리 | |
챗봇 및 비즈니스 로직 | 메신저 플랫폼의 메시지에 반응하는 백엔드 로직 | API 게이트웨이를 통한 HTTP 요청 |
데이터베이스 변경 사항 반응 | 데이터베이스 레코드 변경 시 후속 작업 실행 | 데이터베이스 스트림(예: Amazon DynamoDB Streams) |
이러한 패턴들은 공통적으로 예측 불가능하거나 간헐적인 트래픽을 처리하거나, 인프라 관리 부담을 줄이고자 할 때 강점을 발휘한다. 서버리스는 특히 프로토타입 개발이나 기능의 빠른 출시가 중요한 상황에서 유용하며, 운영팀의 개입 없이도 개발자가 직접 배포와 관리를 할 수 있게 한다.
7.1. 데이터 처리 및 변환
7.1. 데이터 처리 및 변환
서버리스 컴퓨팅은 데이터 처리와 데이터 변환 작업에 매우 적합한 모델이다. 이는 주로 이벤트 기반 실행과 자동 확장 특성 덕분이다. 예를 들어, 클라우드 스토리지에 새로운 파일이 업로드되거나 데이터베이스에 레코드가 삽입되는 이벤트를 트리거로 삼아, 미리 정의된 함수(AWS Lambda, Azure Functions 등)를 즉시 실행하여 데이터를 처리할 수 있다. 이러한 방식은 전통적인 상시 실행 서버를 프로비저닝하고 관리할 필요 없이, 이벤트 발생 시에만 컴퓨팅 리소스가 소비되도록 한다.
주요 처리 및 변환 유형은 다음과 같다.
처리 유형 | 설명 | 일반적인 트리거 예시 |
|---|---|---|
배치 처리 | 대량의 데이터를 일괄적으로 변환하거나 집계함 | 일정한 스케줄(예: 매일 자정), 대용량 파일 도착 |
스트림 처리 | 데이터 스트림을 실시간으로 분석하고 변환함 | |
ETL/ELT | 데이터를 추출(Extract), 변환(Transform), 적재(Load)하여 데이터 웨어하우스나 데이터 레이크를 구축함 | 소스 시스템의 데이터 변경 이벤트 |
일반적인 사용 사례로는 이미지 또는 동영상 리사이징, 로그 파일 분석 및 집계, CSV에서 JSON 형식으로의 데이터 변환, 그리고 다양한 소스의 데이터를 정규화하여 단일 저장소로 통합하는 작업 등이 포함된다. 서버리스 함수는 이러한 작업을 작은 단위로 분리하여 실행하고, 처리 완료 후 자동으로 종료되므로 리소스 사용이 매우 효율적이다.
이 접근 방식의 장점은 명확하다. 인프라 관리 부담이 없고, 처리할 데이터의 양에 따라 자동으로 수평 확장되며, 실제 처리 시간에 대해서만 비용을 지불한다. 그러나 장시간 실행되는 배치 작업의 경우 함수 실행 제한 시간에 주의해야 하며, 콜드 스타트로 인한 초기 지연은 실시간 처리가 중요한 스트림 작업에서 고려 대상이 될 수 있다.
7.2. 실시간 파일 처리
7.2. 실시간 파일 처리
서버리스 컴퓨팅은 이벤트 기반 실행 모델을 통해 실시간 파일 처리에 매우 적합한 환경을 제공한다. 사용자가 파일을 업로드하거나 시스템에 새 파일이 생성되면, 이는 특정 이벤트를 트리거한다. 예를 들어, 객체 스토리지 서비스에 이미지 파일이 업로드되면, 이벤트가 즉시 AWS Lambda나 Azure Functions 같은 서버리스 함수를 실행시킨다. 이 함수는 업로드된 파일을 자동으로 처리하기 시작한다.
주요 처리 작업으로는 파일 형식 변환, 크기 조정, 메타데이터 추출, 내용 검증 등이 포함된다. 구체적으로, 사용자가 업로드한 고해상도 이미지를 웹 표시용 썸네일로 자동 변환하거나, 업로드된 동영상 파일을 다양한 포맷으로 트랜스코딩하는 작업이 대표적이다. 또한 로그 파일이나 센서 데이터 파일이 배치로 수집될 때마다 실시간으로 필터링, 집계, 분석하여 결과를 다른 데이터베이스나 대시보드에 저장하는 용도로도 널리 사용된다.
이러한 아키텍처의 장점은 완전한 자동화와 탄력적인 확장성에 있다. 파일 업로드 빈도가 갑자기 증가하더라도 서버리스 플랫폼은 필요한 만큼 함수 인스턴스를 자동으로 생성하여 병렬로 처리한다. 반대로 처리할 파일이 없을 때는 실행 인스턴스가 존재하지 않아 리소스가 전혀 소비되지 않는다. 이는 전통적인 상시 실행되는 파일 처리 서버와 비교했을 때 뚜렷한 비용 효율성을 가져온다.
처리 대상 파일 | 일반적인 처리 작업 | 트리거 소스 예시 |
|---|---|---|
이미지 파일 | 크기 조정, 형식 변환(WebP 등), 워터마크 추가 | Amazon S3, Google Cloud Storage 업로드 이벤트 |
동영상 파일 | 트랜스코딩, 썸네일 생성, 메타데이터 분석 | 클라우드 스토리지 또는 FTP 서버의 새 파일 이벤트 |
텍스트/로그 파일 | 실시간 파싱, 필터링, 핵심 지표 추출 | 일정 시간마다 실행되는 스케줄러 이벤트 또는 파일 시스템 감시 |
이 패턴을 구현할 때는 함수의 실행 시간 제한과 메모리 할당량을 처리할 파일의 크기와 복잡성에 맞게 설정해야 한다. 매우 큰 파일을 처리해야 하는 경우에는 파일을 청크 단위로 나누거나, 처리 파이프라인의 첫 단계로 활용하는 설계가 일반적이다[6].
7.3. 웹 애플리케이션 백엔드
7.3. 웹 애플리케이션 백엔드
서버리스 컴퓨팅은 웹 애플리케이션의 백엔드 로직을 구축하고 실행하기 위한 효율적인 방식을 제공한다. 전통적인 웹 서버를 프로비저닝하거나 관리할 필요 없이, 개발자는 개별 함수 단위로 비즈니스 로직(예: 사용자 인증, 데이터베이스 쿼리, API 응답 생성)을 작성하고 배포한다. 이러한 함수는 API 게이트웨이를 통해 HTTP 요청을 트리거로 하여 실행된다. 이는 백엔드 인프라에 대한 관리 책임이 클라우드 공급자에게 이전됨을 의미하며, 개발팀은 애플리케이션 코드 자체에 더 집중할 수 있다.
주요 구성 요소는 API 게이트웨이와 함수(Function)이다. API 게이트웨이는 모든 클라이언트 요청의 단일 진입점 역할을 하며, 요청을 적절한 서버리스 함수로 라우팅하고 응답을 반환한다. 함수는 특정 엔드포인트(예: /users 또는 /orders)와 연결된 독립적인 코드 조각이다. 이 아키텍처는 마이크로서비스 패턴과 자연스럽게 부합하며, 각 기능을 작고 독립적인 서비스로 분해하여 개발, 배포, 확장을 용이하게 한다.
서버리스 백엔드의 일반적인 사용 패턴은 다음과 같다.
패턴 | 설명 | 예시 |
|---|---|---|
RESTful API 서버 | API 게이트웨이가 모든 HTTP 메서드(GET, POST 등)를 해당 함수에 매핑한다. | 사용자 프로필 조회, 주문 생성, 데이터 업데이트. |
서버 사이드 렌더링(SSR) | 동적 웹 페이지를 요청 시 함수에서 생성하여 클라이언트에 전송한다. | |
인증(Auth) 및 권한 부여 | 요청을 검증하고 JWT 토큰을 처리하는 전용 함수를 사용한다. | 로그인 API, 접근 권한 확인 미들웨어. |
이 접근 방식의 주요 이점은 탁월한 확장성과 비용 효율성이다. 애플리케이션 트래픽이 급증하더라도 플랫폼이 자동으로 함수 인스턴스를 추가하여 확장하며, 트래픽이 없을 때는 비용이 발생하지 않는다. 그러나 콜드 스타트로 인한 응답 지연 가능성, 함수 실행 시간과 메모리 제한, 그리고 분산 환경에서의 모니터링과 디버깅의 복잡성은 고려해야 할 중요한 과제이다.
8. 보안 및 규정 준수
8. 보안 및 규정 준수
서버리스 컴퓨팅 모델은 보안 책임의 공유 모델을 채택한다. 클라우드 공급자는 인프라스트럭처 자체의 보안, 물리적 보안, 하이퍼바이저 보안 등을 담당한다. 반면, 사용자는 배포된 함수 코드, 함수 내부의 비밀 정보 관리, 함수가 접근하는 외부 서비스에 대한 인증 및 권한 부여, 그리고 애플리케이션 계층의 데이터 보안을 책임져야 한다[7].
주요 보안 고려사항으로는 함수 간의 최소 권한 원칙 적용, API 게이트웨이를 통한 인증 및 DDoS 방어, 그리고 환경 변수나 전용 보안 관리 서비스를 활용한 API 키, 데이터베이스 비밀번호 등의 안전한 저장이 포함된다. 또한, 모든 함수 코드와 의존성 라이브러리에 대한 정기적인 취약점 점검과 패치가 필수적이다.
규정 준수 측면에서는 사용 중인 서버리스 플랫폼이 특정 산업 표준을 준수하는지 확인해야 한다. 주요 클라우드 제공자들의 서버리스 제품은 일반적으로 다음과 같은 인증을 획득한다.
규정/표준 | 설명 |
|---|---|
유럽 연합의 데이터 보호 및 프라이버시 규정 | |
미국의 의료 정보 보호 법률 (특정 지역 제한) | |
신용카드 산업 데이터 보안 표준 | |
정보 보안 관리 시스템(ISMS) 국제 표준 |
애플리케이션 설계 시 데이터가 처리되고 저장되는 지역을 제어할 수 있어야 하며, 이를 통해 데이터 주권 요구사항을 충족시킬 수 있다. 감사 로그를 위해 함수의 모든 실행과 API 호출을 모니터링하고 기록하는 것이 중요하다.
