[3주차] AWS API Gateway, Lambda에 대한 이해
이 문서는 [월간-CS][24년 4월] React, Next 배포와 배포 자동화 A부터 Z를 위해서 작성된 문서입니다. 이 문서에는 그 어떤 저작권이 없으며, 편하게 참고 및 사용하셔도 됩니다.
개요
본 문서에서는 서버리스 환경에서 정적/동적 페이지를 포함하는 Next를 배포하기 위해 API Gateway, Lambda 기반의 아키텍처를 설계해보겠습니다.
사전 지식
본 문서를 제대로 읽기 위해서는 아래 선수 지식이 필요합니다.
서버리스
일반적으로 서버리스란, 개발자가 서버를 관리할 필요 없이 애플리케이션을 빌드하고 실행할 수 있도록 하는 클라우드 네이티브 개발 모델입니다.
인프라 아키텍처 설계 접근법
서버 기반 아키텍처
이미 저희는 [2주차] AWS ELB, EC2, CodeDeploy에 대한 이해를 통해 Next.js를 서버 위에 배포하는 법을 배웠습니다.
스토리지 vs 컴퓨팅 차이
[1주차]에서는 CloudFront + S3를 이용해서 React를 배포하였기 때문에 특별하게 신경쓸 부분이 없었습니다.
하지만 [2주차]에서는 ELB, EC2를 사용했기 때문에 아래의 단점들이 발생했습니다.
스토리지에 비해서 많은 비용 지불
캐시 및 엣지 로케이션 계층의 부재
페이지 전달에 의해서 높은 비용이 지불됨
글로벌 서비스로 진출 시, 높은 지연시간이 발생함
특히 [2주차]의 아키텍처는 리전 레벨의 리소스이기 때문에 이런 결함은 치명적으로 작동할 것으로 보였습니다.
리소스 | 리소스 레벨 |
---|---|
CloudFront | 클라우드 |
S3 | 리전 |
ELB(ALB, L7) | 리전 |
EC2 | 리전 |
따라서 이번 챕터에서는 서버리스 기반 아키텍처로 변경하면서, 더 근대화된 아키텍처를 구성할 예정입니다.
서버리스 기반 아키텍처
AWS에서는 서버리스를 다음과 같이 소개하고 있습니다.
서버를 관리하지 않고도 코드를 실행하고 데이터를 관리하고 애플리케이션을 통합할 수 있는 기술
서버리스 기술은 아래 특징들로 비용을 최적화하려고 노력
자동 확장
기본 제공 고가용성
구성
SLA
일간
월간
연간
단일 리전 EC2
99.5%
7분 12초
3시간 37분 21초
1일 19시간 28분
단일 Lambda
99.95%
43초
21분 44초
4시간 49분
용량 프로비저닝, 패치 적용 등의 인프라 관리 작업의 간편화
200여개가 넘은 AWS 리소스 간 통합 지원
즉, 서버리스 아키텍처는 서버리스 리소스들로 구성된 아키텍처일 것입니다.
또한, 서버리스 리소스는 간단한 설정만으로도 편리하게 실행 및 관리를 제어할 수 있는 리소스일 것입니다.
기존 아키텍처의 대체재 탐색
기존에 사용 중인 ELB, EC2의 대체재는 다음과 같습니다.
ELB → API Gateway
EC2 → Lambda
API Gateway
공식 문서에서는 API Gateway를 다음과 같이 소개하고 있습니다.
API Gateway는 규모와 관계 없이 REST API 및 Websocket API를 생성, 게시, 유지, 모니터링 및 보호하기 위한 서비스이다.
이러한 API Gateway는 서버를 사용하지 않는 AWS 인프라의 일부로써, AWS 서버리스 인프라의 앱 페이싱(app-facing) 부분을 담당하게 됩니다.
앱 페이싱이란?
라이언트 들의 요청이 직접적으로 맞닿는 부분들 의미합니다.
2주차에서는 ELB가 앱 페이싱 부분을 담당했습니다.
Lambda
공식 문서에서는 Lambda를 다음과 같이 소개하고 있습니다.
Lambda는 서버를 프로비저닝하거나 관리하지 않도록 코드를 실행할 수 있도록 해주는 컴퓨팅 서비스이다.
Lambda를 사용하면 Lambda가 제공하는 언어 런타임(Node, Java 등) 중 하나로 코드를 제공하기만 하면됩니다.
여러 목적에 따라서 다양한 기능이 있지만 저희는 프라이빗 네트워킹만 사용할 것입니다.
CloudFront, S3
Next.js의 빌드 파일의 특성을 살려서 정적 페이지(pages) 및 정적 리소스(public)는 개별 S3에 올릴 것입니다.
결론
아래와 같은 아키텍처로 서버리스 환경에서 Next를 배포할 수 있습니다.