[3주차] AWS API Gateway, Lambda에 대한 이해

[월간-CS][24년 4월] React, Next 배포와 배포 자동화 A부터 Z
이민석's avatar
Apr 23, 2024
[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를 사용했기 때문에 아래의 단점들이 발생했습니다.

  1. 스토리지에 비해서 많은 비용 지불

  2. 캐시 및 엣지 로케이션 계층의 부재

    1. 페이지 전달에 의해서 높은 비용이 지불됨

    2. 글로벌 서비스로 진출 시, 높은 지연시간이 발생함

특히 [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의 대체재는 다음과 같습니다.

  1. ELB → API Gateway

  2. 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를 배포할 수 있습니다.

Share article
RSSPowered by inblog