Serverless Application Model
개요
Serverless Application Model(SAM)은 AWS에서 제공하는 서버리스 애플리케이션의 배포를 간소화하기 위한 오픈소스 프레임워크입니다. YAML 문법 기반의 선언형 방식으로 Lambda, API Gateway, DynamoDB, S3 등 서버리스 리소스를 정의하고 자동으로 패키징, 배포, 로컬 테스트까지 지원합니다.
1. 개념 및 정의
AWS SAM은 서버리스 애플리케이션의 구성 요소를 코드로 관리할 수 있도록 도와주는 프레임워크입니다.
- 서버리스(Serverless): 서버 인프라 관리 없이 코드 실행에 집중할 수 있는 아키텍처
- SAM: AWS CloudFormation을 확장한 도구로, 서버리스 구성 요소를 간결하게 정의하고 CI/CD 파이프라인 통합이 가능
SAM은 반복 작업을 줄이고 인프라 정의와 애플리케이션 코드를 일관되게 관리할 수 있도록 합니다.
2. 특징
항목 | 설명 | 장점 |
선언형 YAML 템플릿 | CloudFormation 기반 구성 | 인프라 코드 관리 간편 |
로컬 개발 지원 | sam local 명령어 제공 | 로컬 디버깅 및 테스트 가능 |
단일 배포 명령 | sam deploy | CI/CD 자동화 용이 |
SAM은 AWS 리소스를 추상화하여 개발자가 코드와 인프라를 하나의 단위로 정의하고 관리할 수 있게 해줍니다.
3. 구성 요소
구성 요소 | 설명 | 예시 |
AWS::Serverless::Function | Lambda 함수 정의 | 핸들러, 이벤트, IAM 권한 포함 |
AWS::Serverless::Api | API Gateway 정의 | REST API 경로 및 메서드 지정 |
AWS::Serverless::Table | DynamoDB 테이블 정의 | 파티션 키, 읽기/쓰기 용량 포함 |
Globals | 전체 리소스 공통 속성 정의 | 함수 런타임, 타임아웃 등 |
SAM은 이러한 리소스를 간결한 형식으로 정의할 수 있도록 하며, 전체 서버리스 아키텍처를 한 파일로 표현 가능합니다.
4. 기술 요소
기술 요소 | 설명 | 사용 목적 |
AWS CloudFormation | 인프라 자동 배포 도구 | SAM 템플릿 실행 기반 |
Docker | 로컬 실행 환경 시뮬레이션 | sam local로 로컬 테스트 지원 |
AWS CLI | 배포 명령 수행 도구 | sam build, sam deploy 실행 |
SAM은 AWS 생태계와 깊이 통합되어 있으며, GitHub Actions, CodePipeline 등과 함께 사용하여 DevOps 환경 구현이 가능합니다.
5. 장점 및 이점
항목 | 설명 | 기대 효과 |
개발 속도 향상 | 리소스 정의 및 배포 간소화 | 빠른 피드백 사이클 |
유지보수 용이 | 인프라와 코드 통합 관리 | 버전 관리 및 협업 수월 |
비용 절감 | 서버리스 구조 최적화 | 리소스 낭비 감소 |
서버리스 개발과 DevOps가 융합된 환경에서 SAM은 효율성과 생산성을 모두 끌어올릴 수 있습니다.
6. 주요 활용 사례 및 고려사항
사례 | 설명 | 고려사항 |
API 기반 백엔드 | Lambda + API Gateway 조합 | API 보안, Rate Limit 설정 |
이벤트 처리 파이프라인 | S3 → Lambda → DynamoDB | 이벤트 순서, 중복 처리 고려 |
CI/CD 통합 | GitHub Actions + SAM 배포 | 환경 분리, 배포 전략 수립 필요 |
SAM은 작은 프로젝트부터 대규모 마이크로서비스 환경까지 다양한 스케일에서 활용 가능하지만, 리소스 종속성 및 권한 구성에 주의가 필요합니다.
7. 결론
Serverless Application Model은 AWS 서버리스 환경에서 인프라를 선언적으로 관리하고, 자동화된 배포 및 로컬 개발을 지원하는 강력한 도구입니다. 빠른 개발, 비용 효율성, 확장성까지 제공하는 SAM은 클라우드 네이티브 애플리케이션의 핵심 프레임워크로 자리잡고 있습니다.