소개
서버리스 - 심층 분석에서는 서버리스 애플리케이션을 구축하는 데 도움이 되는 기초 개념, 참조 아키텍처, 모범 사례, 실습 활동을 소개합니다. 서버리스 초심자라면 개발을 시작하는 데 큰 도움이 됩니다. 숙련된 서버리스 개발자에게 유용한 고급 주제에 대한 리소스와 링크도 있습니다.
서버리스란 무엇입니까?
서버리스를 사용하면 서버를 고려하지 않고 애플리케이션과 서비스를 구축하고 실행할 수 있습니다. 서버 또는 클러스터 프로비저닝, 패치 적용, 운영 체제 유지 관리 및 용량 프로비저닝과 같은 인프라 관리 작업을 덜어냅니다. 거의 모든 유형의 애플리케이션 또는 백엔드 서비스를 서버리스로 구축할 수 있으며, 애플리케이션을 높은 가용성으로 실행하고 확장하는 데 필요한 모든 사항이 자동으로 처리됩니다.
서버리스 애플리케이션은 이벤트를 기반으로 하며 기술에 구애받지 않는 API 또는 메시징을 통해 느슨하게 결합됩니다. 이벤트 기반 코드는 상태의 변화 또는 엔드포인트 요청과 같은 이벤트에 대한 응답으로 실행됩니다. 이벤트 기반 아키텍처는 코드를 상태와 분리합니다. 구성 요소의 느슨한 결합은 일반적으로 메시징을 통해 비동기식으로 이루어집니다.
AWS Lambda는 이벤트 기반 아키텍처에 최적화된 서버리스 컴퓨팅 서비스입니다. Lambda 함수는 Amazon Simple Queue Service(SQS), Amazon Simple Notification Service(SNS), Amazon Kinesis 등, 비동기식 통합을 구현하는 데 사용할 수 있는 통합 이벤트 소스를 통해 이벤트에 의해 트리거됩니다. Lambda 함수는 이벤트를 소비하며, 다른 서비스가 소비할 수 있는 이벤트를 생성합니다.
서버리스 아키텍처 패턴에서는 마찬가지로 서버리스 방식인 다른 관리형 서비스를 통해 Lambda를 사용합니다. 서버리스 아키텍처는 메시지 및 스트리밍 서비스 외에, API 관리를 위한 Amazon API Gateway, 데이터 스토어를 위한 Amazon DynamoDB, 오케스트레이션을 위한 AWS Step Functions 등의 관리형 서비스도 사용합니다. 서버리스 플랫폼에는 Lambda 함수와 서버리스 애플리케이션의 배포 및 테스트를 간소화하는 서버리스 애플리케이션 모델, 즉 SAM을 비롯한 일련의 개발자 도구도 포함되어 있습니다.
서버리스를 사용하는 이유는 무엇입니까?
서버를 관리할 필요 없음: 서버를 프로비저닝하거나 유지 관리할 필요가 없습니다. 설치, 유지 또는 관리할 소프트웨어나 런타임이 없습니다.
유연한 확장: 애플리케이션은 자동으로 확장될 수 있고, 개별 서버 단위가 아니라 사용 단위(예: 처리량, 메모리)를 설정/해제하여 용량을 조정할 수도 있습니다.
종량제 요금: 서버 단위가 아닌 일관된 처리량 또는 실행 기간에 대해 요금을 지불합니다.
자동화된 고가용성: 서버리스는 내장된 가용성과 내결함성을 갖추고 있습니다. 애플리케이션을 실행하는 서비스에서 기본적으로 이를 제공하므로 이러한 기능을 설계할 필요가 없습니다.
핵심 서버리스 서비스
서버리스 애플리케이션은 일반적으로 완전관리형 서비스를 컴퓨팅, 데이터, 메시징 및 통합, 스트리밍, 사용자 관리, 자격 증명 계층 전반의 기본 구성 요소로 사용하여 구축됩니다. DynamoDB, S3 또는 Kinesis 같은 서비스로 지원되는 대부분의 애플리케이션은 AWS Lambda, API Gateway, SQS, SNS, EventBridge 또는 Step Functions와 같은 서비스가 핵심이 됩니다.
카테고리 |
서비스 |
설명 |
---|---|---|
컴퓨팅 | AWS Lambda | AWS Lambda를 사용하면 함수 계층에서 마이크로서비스 아키텍처, 배포 및 실행 관리를 지원하는 관리형 플랫폼에서 서버리스 애플리케이션을 실행할 수 있습니다. |
API 프록시 | API Gateway | Amazon API Gateway는 어떤 규모에서든 개발자가 API를 손쉽게 생성, 게시, 유지 관리, 모니터링 및 보호할 수 있도록 하는 완전관리형 서비스입니다. 이 서비스에서는 API 관리를 위한 포괄적인 플랫폼을 제공합니다. API Gateway를 통해 수십만 개의 동시 API 호출을 처리하고 트래픽 관리, 권한 부여 및 액세스 제어, 모니터링 및 API 버전 관리를 처리할 수 있습니다. |
메시징 및 통합 | SNS | Amazon SNS는 마이크로서비스, 분산 시스템 및 서버리스 애플리케이션을 쉽게 분리하고 확장할 수 있게 해주는 완전관리형 게시/구독 메시징 서비스입니다. |
SQS | Amazon SQS는 마이크로서비스, 분산 시스템 및 서버리스 애플리케이션을 쉽게 분리하고 확장할 수 있게 지원하는 완전관리형 메시지 대기열 서비스입니다. |
|
EventBridge | Amazon EventBridge는 자체 애플리케이션, 통합된 Software-as-a-Service(SaaS) 애플리케이션 및 AWS 서비스의 데이터를 사용하여 애플리케이션을 쉽게 연결할 수 있게 지원하는 서버리스 이벤트 버스입니다. |
|
오케스트레이션 | Step Functions |
AWS Step Functions를 사용하면 시각적 워크플로를 통해, 배포된 애플리케이션의 구성 요소를 손쉽게 조정할 수 있습니다. |
구축합시다!
아래는 AWS의 서버리스 서비스를 소개하는 몇 가지 리소스입니다.
AWS Lambda 콘솔을 사용하여 Hello World Lambda 함수를 생성하고 서버를 프로비저닝하거나 관리하지 않고도 코드를 실행하기 위한 기본 사항을 배웁니다.
S3 버킷에 이미지 파일이 업로드될 때마다 Amazon S3에서 호출되어 해당 이미지의 썸네일을 자동으로 생성하는 Lambda 함수를 생성합니다.
Lambda 콘솔을 사용하여 Lambda 함수와 해당 함수를 트리거하는 Amazon API Gateway 엔드포인트를 생성합니다.
AWS Step Functions를 사용하여 여러 AWS Lambda 함수를 조정하는 서버리스 워크플로를 설계하고 실행하는 방법을 알아봅니다.
기초
이 섹션에서는 이벤트 기반 설계, 확장형 서버리스 애플리케이션의 기초가 되는 핵심 원칙에 대해 배웁니다.
이벤트 기반 아키텍처에서는 이벤트를 사용하여 분리된 서비스를 서로 트리거하고 통신합니다. 이벤트란 전자상거래 웹 사이트에서 쇼핑 카트에 항목이 추가되는 것과 같은 상태의 변화 또는 업데이트를 말합니다. 이벤트는 상태를 포함하거나(예: 구매한 항목, 그 가격 및 배송 주소) 식별자가 될 수 있습니다(예: 주문이 배송되었음을 안내하는 알림).
이벤트 기반 아키텍처에는 이벤트 생산자, 이벤트 라우터, 이벤트 소비자라는 세 가지 주요 구성 요소가 있습니다. 생산자는 라우터에 이벤트를 게시하고 라우터는 이벤트를 필터링하여 소비자에 푸시합니다. 생산자 서비스와 소비자 서비스는 서로 분리되므로 독립적으로 확장, 업데이트, 배포할 수 있습니다.
이벤트 기반 아키텍처가 효과적인 이유를 알아보기 위해 동기식 API 호출을 살펴보겠습니다.

소비자는 HTTP API 호출을 통해 마이크로서비스를 활용합니다. Amazon API Gateway는 소비자에게 전송되는 RESTful HTTP 요청과 응답을 호스팅합니다. AWS Lambda에는 수신되는 API 호출을 처리하고 DynamoDB를 영구 스토리지로 활용하는 비즈니스 로직이 포함되어 있습니다.
동기식으로 호출될 경우 API Gateway는 즉각적인 응답을 예상하며 30초의 제한 시간을 적용합니다. 동기식 이벤트 소스를 사용할 경우 Lambda로부터 응답을 수신하는 데 30초 이상 걸릴 때 사용되는 재시도 및 오류 처리 코드는 고객이 작성해야 합니다. 이 때문에 DynamoDB의 읽기/쓰기 용량 단위와 같이 클라이언트로부터 전송되는 구성 요소 다운스트림에서 오류 또는 확장 문제가 발생할 경우 프런트 엔드 코드를 실행하여 문제를 처리하기 위해 클라이언트로 다시 푸시됩니다. 비동기식 패턴을 사용하고 이러한 구성 요소를 서로 분리함으로써 보다 강력하고 확장성이 뛰어난 시스템을 구축할 수 있습니다.
메시지가 다수의 구독자에게 "푸시 알림"으로 전송되고 주기적으로 업데이트를 확인하거나 폴링할 필요가 없을 뿐만 아니라 구독자가 메시지를 비동기식으로 병렬 처리할 수 있는 팬아웃 메시징 시나리오를 구현하는 방법을 배웁니다.
AWS Lambda에서 이벤트 생산자 및 소비자를 구축하고 이벤트를 라우팅하는 규칙을 생성하는 방법을 배웁니다.
Lambda 함수는 이벤트에 의해 트리거됩니다. 그런 다음 트리거에 대한 응답으로 코드를 실행하며 자체적으로 이벤트를 생성할 수도 있습니다. Lambda 함수를 트리거하는 방법은 여러 가지가 있으며 구체적인 요구 사항에 따라 유연하게 사용자 지정 이벤트 소스를 생성할 수 있습니다.
대표적인 이벤트 소스의 유형은 다음과 같습니다.
- Amazon S3, Amazon DynamoDB 또는 Amazon Kinesis 같은 데이터 스토어에서 Lambda 함수를 트리거할 수 있습니다. 변경 사항을 추적하려는 데이터가 저장되는 경우 이러한 데이터 스토어를 이벤트 소스로 사용할 수 있습니다.
- 이벤트를 유발하는 엔드포인트가 Lambda를 호출할 수 있습니다. 예를 들어 사용자가 Alexa에 무언가 질문을 하면 Alexa는 Lambda 함수를 트리거하는 이벤트를 발생시킵니다.
- Amazon SQS 또는 Amazon SNS 같은 메시징 서비스도 이벤트 소스가 될 수 있습니다. 예를 들어 SNS 주제로 무언가를 푸시하면 Lambda 함수가 트리거될 수 있습니다.
- AWS CodeCommit 리포지토리로 코드를 커밋하는 경우와 같이 리포지토리에서 특정 작업이 발생하면 CI/CD 구축 프로세스를 시작하는 등의 Lambda 함수가 트리거될 수 있습니다.

개발자 안내서에서 AWS Lambda 함수를 호출하는 방법을 자세히 알아보십시오.
이 섹션에서는 일반적인 서버리스 애플리케이션 사용 사례를 보여주는 일련의 참조 아키텍처를 살펴볼 수 있습니다.
-
RESTful 마이크로서비스
서버리스 기술은 고가용성의 내결함성 인프라를 기반으로 하므로, 미션 크리티컬 워크로드를 위한 안정적인 서비스를 구축할 수 있습니다. AWS 서버리스 핵심 서비스는 다른 수십 가지 AWS 서비스와 완벽하게 통합되며 AWS 및 타사 파트너 도구로 이루어진 광범위한 에코시스템의 이점을 제공합니다. 이 에코시스템은 구축 프로세스를 간소화하고, 작업을 자동화하고, 서비스와 종속성을 오케스트레이션하며, 마이크로서비스를 모니터링하도록 지원합니다. AWS 서버리스 서비스를 사용할 경우 사용한 만큼만 요금을 지불하면 됩니다. 따라서 비즈니스 요구 사항에 따라 사용량을 늘리고 사용량이 적을 때에는 비용을 절감할 수 있습니다. 이러한 모든 기능 덕분에 서버리스 기술은 복원력이 뛰어난 마이크로서비스를 구축하는 데 이상적인 솔루션이라고 할 수 있습니다.
예제 RESTful 마이크로서비스 아키텍처
소비자는 HTTP API 호출을 통해 마이크로서비스를 활용합니다. 소비자는 서비스 계약을 API에 긴밀하게 바인딩하여 일관된 서비스 수준과 변경 관리를 구현해야 합니다.
Amazon API Gateway는 소비자에게 전송되는 RESTful HTTP 요청과 응답을 호스팅합니다. 이 시나리오에서 API Gateway는 인증, 조절, 보안, 내결함성, 요청/응답 매핑 및 성능 최적화 기능을 기본 제공합니다.
AWS Lambda에는 수신되는 API 호출을 처리하고 DynamoDB를 영구 스토리지로 활용하는 비즈니스 로직이 포함되어 있습니다.
Amazon DynamoDB는 마이크로서비스 데이터를 영구적으로 저장하고 온디맨드로 확장합니다. 마이크로서비스는 하나의 기능에 최적화된 경우가 많기 때문에 일반적으로 스키마가 없는 NoSQL 데이터 스토어가 사용됩니다.
-
이미징 처리
이미지 처리는 주로 이벤트 기반으로 구현되는 워크로드로, 동적으로 확장하고 축소해야 하기 때문에 서버리스 기술이 매우 적합합니다. 일반적으로 이미지는 처리를 위해 Lambda 함수를 호출할 수 있는 Amazon S3에 저장됩니다. 처리 후에 Lambda 함수는 수정된 버전을 다른 S3 버킷 또는 API Gateway에 반환할 수 있습니다.
아래 다이어그램은 솔루션의 구현 안내서와 함께 AWS CloudFormation 템플릿을 사용하여 몇 분 만에 배포할 수 있는 서버리스 이미지 핸들러 아키텍처를 보여줍니다.
AWS Lambda는 Amazon Simple Storage Service(Amazon S3) 버킷에서 이미지를 검색하고 Sharp를 사용하여 이미지의 수정된 버전을 Amazon API Gateway에 반환됩니다. 이 솔루션은 이미지 핸들러 API에 캐싱된 액세스를 제공하는 Amazon CloudFront 도메인 이름을 생성합니다.
또한, 이 솔루션에서 배포하는 선택적 데모 사용자 인터페이스에서는 계정에 이미 존재하는 이미지 파일을 사용하여 이미지 핸들러 API 엔드포인트와 직접 상호작용할 수 있습니다. 데모 UI는 Amazon S3 버킷에 배포되어 고객이 간단한 웹 인터페이스를 사용하여 즉시 이미지 조작을 시작할 수 있도록 지원합니다. CloudFront는 솔루션의 웹 사이트 버킷 콘텐츠에 대한 액세스를 제한하는 데 사용됩니다.
솔루션 배포 >>
-
스트림 처리
AWS Lambda 및 Amazon Kinesis를 사용하여 애플리케이션 활동 추적, 트랜잭션 주문 처리, 클릭 스트림 분석, 데이터 정리, 지표 생성, 로그 필터링, 인덱싱, 소셜 미디어 분석, IoT 디바이스 데이터 텔레메트리 및 측정을 위한 실시간 스트리밍 데이터를 처리할 수 있습니다.
예제 스트림 처리 아키텍처
이 다이어그램에서 설명하는 아키텍처는 AWS CloudFormation 템플릿을 사용하여 생성할 수 있습니다. 이 템플릿은 다음 작업을 수행합니다.
- Kinesis 스트림 생성
- -EventData라는 DynamoDB 테이블 생성
- Kinesis에서 레코드를 수신하여 DynamoDB 테이블에 쓰는 Lambda 함수 1(-DDBEventProcessor)
- 이벤트 처리 Lambda 함수가 Kinesis 스트림에서 데이터를 읽고 DynamoDB 테이블에 데이터를 쓰도록 허용하는 IAM 역할 및 정책 생성
- 사용자가 API 클라이언트에서 사용할 자격 증명과 Kinesis 스트림의 데이터를 연결할 권한이 부여된 IAM 사용자 생성
-
웹 애플리케이션
AWS에서 서버리스 컴퓨팅을 사용하면 서버를 관리하거나 용량을 프로비저닝하거나 유휴 리소스에 대해 비용을 지불하지 않고도 전체 웹 애플리케이션 스택을 배포할 수 있습니다. 또한 보안, 안정성 또는 성능을 저하시키지 않아도 됩니다. 서버리스 기술을 사용하여 구축된 웹 애플리케이션은 고가용성을 제공하며 전 세계에서 온디맨드로 확장할 수 있습니다.
- 전 세계적으로 볼 때 이 웹 애플리케이션의 고객은 지리적으로 집중되어 있거나 분산되어 있습니다. Amazon CloudFront는 캐싱과 최적의 오리진 라우팅을 통해 이 같은 소비자에게 더 나은 성능을 제공할 뿐만 아니라 백엔드에 대한 중복 호출을 최소화합니다.
- Amazon S3는 웹 애플리케이션 정적 자산을 호스팅하며 CloudFront를 통해 안전하게 서비스됩니다.
- Amazon Cognito 사용자 풀은 웹 애플리케이션에 대해 사용자 관리 및 자격 증명 공급자 기능을 제공합니다.
- 소비자가 Amazon S3에서 정적 콘텐츠를 다운로드함에 따라, 애플리케이션에서 동적 콘텐츠를 전송하거나 수신해야 하는 시나리오가 많습니다. 예를 들어 사용자가 양식을 통해 데이터를 제출하면 Amazon API Gateway가 보안 엔드포인트 역할을 하여 해당 호출을 실행하고 웹 애플리케이션에 표시되는 응답을 반환합니다.
- AWS Lambda 함수는 웹 애플리케이션을 위한 DynamoDB 외에, CRUD(생성, 읽기, 업데이트, 삭제) 작업도 지원합니다.
- Amazon DynamoDB는 웹 애플리케이션의 트래픽에 따라 탄력적으로 확장할 수 있는 백엔드 NoSQL 데이터 스토어를 제공합니다.
- 전 세계적으로 볼 때 이 웹 애플리케이션의 고객은 지리적으로 집중되어 있거나 분산되어 있습니다. Amazon CloudFront는 캐싱과 최적의 오리진 라우팅을 통해 이 같은 소비자에게 더 나은 성능을 제공할 뿐만 아니라 백엔드에 대한 중복 호출을 최소화합니다.
마이크로서비스 아키텍처에서 배포하는 방법과 관련한 모범 사례로서, 변경 사항이 소비자의 서비스 계약을 저해하지 않도록 해야 합니다. API 소유자가 서비스 계약을 저해하는 변경 사항을 적용하는데 소비자는 이를 인지하지 못할 경우 장애가 발생할 수 있습니다.
배포 변경 사항이 미치는 영향을 파악하려면 어느 소비자가 API를 사용하고 있는지 알아야 합니다. API 키를 사용하여 메타데이터를 수집할 수 있으며, 장애를 유발하는 변경 사항이 API에 적용될 경우 이러한 API 키가 계약의 역할을 할 수 있습니다.
장애를 유발하는 변경 사항이 API에 미치는 영향을 완화하려면, 소비자가 API를 복제하고 고객을 다른 하위 도메인(예: v2.my-service.com)으로 라우팅하여 기존 소비자에게 영향을 미치지 않도록 하면 됩니다. 이 방식에서는 고객이 새 API 서비스 계약에만 새로운 변경 사항을 배포할 수 있지만, 단점이 있습니다. 이 방식을 사용하는 고객은 두 버전의 API를 유지 관리해야 하고 인프라 관리 및 프로비저닝 오버헤드를 처리해야 합니다.
배포 |
고객 적용 |
롤백 | 이벤트 모델 요인 |
배포 속도 |
---|---|---|---|---|
일괄 적용 | 일괄 적용 | 이전 버전 재배포 | 동시 발생률이 낮은 모든 이벤트 모델 | 즉시 |
블루/그린 | 사전에 어느 정도 프로덕션 환경 테스트를 거친 후 일괄 적용 | 트래픽을 이전 환경으로 되돌림 | 동시성이 중간 수준인 워크로드의 비동기 및 동기 이벤트 모델에 적합 | 몇 분~몇 시간의 검증을 거친 후 고객에게 즉시 배포 |
Canary/선형 | 일반적으로 1~10%의 초기 트래픽 전환 후 단계별로 확대 또는 일괄 적용 | 트래픽의 100%를 이전 배포로 되돌림 | 동시성이 높은 수준인 워크로드에 적합 | 몇 분~몇 시간 |
-
일괄 배포
일괄 배포에서는 기존 구성에 변경 사항을 적용합니다. 이 배포 방식의 이점은 관계형 데이터베이스와 같은 데이터 스토어에 백엔드 변경 사항을 적용할 때, 변경 주기 동안 트랜잭션을 조정하기가 훨씬 수월하다는 것입니다. 이 배포 유형은 동시성이 낮은 수준인 모델에서 작업 부담이 적고 미치는 영향이 작지만, 롤백할 때 위험 부담이 크고 일반적으로 가동 중단을 유발합니다. 이 배포 모델을 사용하는 시나리오의 예로는 사용자에게 미치는 영향이 미미한 배포 환경을 들 수 있습니다.
-
블루/그린 배포
블루/그린 배포 패턴에서는 고객이 시스템을 롤백할 경우에 대비해 이전 환경(블루)을 계속 가동하면서 트래픽의 일부를 새 라이브 환경(그린)으로 전환합니다. 이 패턴을 사용하면 변경 사항을 작게 유지하여 쉽고 빠르게 롤백할 수 있습니다. 블루/그린 배포는 가동 중단을 줄이도록 설계되었으며, 많은 고객이 프로덕션 환경에 배포하는 데 사용하고 있습니다. API Gateway는 새 그린 환경으로 전환할 트래픽의 비율을 쉽게 정의할 수 있으므로 이 배포 패턴에 효과적인 도구입니다.
이 배포 스타일은 상태가 저장되지 않고 기반 인프라와 분리되는 서버리스 아키텍처에 특히 적합합니다.
롤백해야 할지 확인하려면 적절한 지표가 필요합니다. 모범 사례로서, 1초 간격으로 모니터링하고 하향 추세를 빨리 포착할 수 있는 CloudWatch 고해상도 지표를 사용하는 것이 좋습니다. CloudWatch 경보와 함께 사용할 경우 신속한 롤백을 지원할 수 있습니다. CloudWatch 지표는 API Gateway, Step Functions, Lambda(사용자 지정 지표 포함) 및 DynamoDB에서 캡처할 수 있습니다.
-
Canary 배포
Canary 배포는 통제된 환경에서 새로운 소프트웨어 릴리스를 활용하고 신속한 배포 주기를 실현할 수 있는 방식으로, 날로 사용이 늘고 있습니다. Canary 배포에서는 적은 수의 요청을 새로 변경된 환경에 배포하여 소수의 사용자에게 미치는 영향을 분석합니다.
API Gateway의 Canary 배포 기능을 사용하면 소비자에게는 동일한 API Gateway HTTP 엔드포인트를 유지하면서 백엔드 엔드포인트(예: Lambda)에 대한 변경 사항을 배포할 수 있습니다. 또한 새 배포 환경으로 라우팅할 트래픽의 비율을 제어하고 통제된 방식으로 트래픽을 전환할 수 있습니다. Canary 배포의 실제 시나리오로는 신규 웹 사이트를 들 수 있습니다. 모든 트래픽을 새 배포 환경으로 전환하기 전에 소수의 최종 사용자를 대상으로 클릭률을 모니터링할 수 있습니다.
Implementing canary deployments of AWS Lambda functions with alias traffic shiftingAWS Lambda 함수의 Canary 배포를 구현하는 방법을 배웁니다.
Deploying serverless applications graduallyAWS SAM은 서버리스 애플리케이션을 위한 점진적인 Lambda 배포 기능을 제공합니다.