서버리스 프론트엔드(Nextjs) 배포하기 (1) - 서버리스 서비스 AWS 람다/API GW

Jaewoong2·2024년 2월 3일
2

aws

목록 보기
4/10
post-thumbnail

선 요약

  1. Cloud Run은 사용하기 위한 기본 비용이 있음
  2. 기본 비용을 줄이기 위해 AWS Lambda + API G/W 구성
  3. Cloud Run만 설정 하면 되는 것에 비해서 Lambda, API G/W 설정등 번거롭지만 비용 절감 성공
  4. Cold Start 등의 단점이 있음

개요

현재 팀에서 람다를 사용하는데, 람다에서 지원하는 파이썬 버전이 지원 종료로 인해 런타임 방식을 ZIP 코드가 아닌, Docker Image 방식으로 변경 하게 되었습니다.

해당 작업을 진행 하면서, Google Cloud Run 에서 Docker로 빌드된 이미지를 사용 하는 제 토이프로젝트 서비스 또한 람다로 바꾸게 되면 비용적으로 더 저렴하게 사용 할 수 있을 것 같아 변경 하게 되었습니다.

(또한, AWS 를 주로 쓰기 때문에 관리하기 더 용이하다는 판단도 있었습니다.)

비용적으로 Google Cloud Run 에서는 유휴 시간동안 컴퓨팅 자원을 잡고 있기 때문에 이에 대한 비용을 지불 해야 했고, 서비스 이용자가 없는 서비스에 돈을 쓰는 것이 아깝다고 생각 하기 때문에 프리티어로 넉넉하게 제공 하는 AWS 의 Lambda/ API Gateway 가 더 이득이라고 생각 하여 바로 클라우드를 AWS 로 변경 하게 되었습니다.

왜 Lambda 로 배포 하는가

먼저 람다 와 API Gateway 에 대해서 간단하게 정리하도록 합니다.

Lambda 란 무엇인가

람다

AWS Lambda란 서버리스 컴퓨팅 자원을 이용하는 서비스 입니다. 서버리스란, 말 그대로 서버가 없다는 뜻으로 한번에 이해가 안될수도 있습니다.

람다의 Serverless 서비스는 아래의 3가지 정도의 특성을 가지고 있습니다.

  1. 함수가 호출되는 동안 사용된 컴퓨팅 자원에 대한 돈만 지불 합니다
  2. 컴퓨팅 자원은 설정한 정도로 사용 되지만, 들어온 함수에 따라 동적 스케일 인/아웃 합니다
  3. 함수만 작성 하면, 함수가 실행되는 환경을 자동으로 제공 해줍니다.

즉, Lambda를 통해 개발을 하게 되면 개발자는 말그대로 개발에만 몰입 할 수 있기 때문에, 많은 사람들이 사용 합니다.

또한, EC2를 통해 24시간 서버를 켜 있는 것보다, 람다를 통해 사용된 컴퓨팅 자원에 대한 비용만 지불하면 되는 람다는 비용적인 측면에서도 이익이 있습니다.

(물론 24시간 내내 람다가 실행 된다면 EC2 보다 비싼 비용 이고, 실제로 람다의 컴퓨팅 환경은 EC2와 같은 환경을 가지고 있다고 합니다.)

API Gateway 란 무엇인가

람다는 단순히 함수의 역할을 합니다. 함수가 자동으로 호출되지 않듯이, 함수를 호출 시킬 어떤 것이 필요하게 되고, 이 람다를 호출(Invoke) 하기 위해서 API Gateway를 사용 합니다.

API Gateway는 말 그래로, API의 End Point로서의 역할을 하며 해당 엔드포인트로 접근시, 연결된 람다를 호출 하는 역할을 합니다.

예를들어, 유저를 불러오는 람다 함수와 /유저불러오기 라는 API Gateway의 엔드포인트를 연결시,

유저 및 클라이언트 가 GET /유저불러오기 요청을 보낼때, 유저를 불러오는 람다 함수를 호출 하게 됩니다.

지금은? 어떻게 구성 되는지

  • Docker Build → Image → Github actions → Google Cloud Run

Cloud Run 란 무엇인가?

✅ “컨테이너식 애플리케이션의 빠르고 안전한 배포 및 확장을 위한 완전 관리형 컴퓨팅 플랫폼”

접속자 가 없을 때의 하루 비용, 유휴 상태에서의 CPU/Memeory 할당 비용이 있다.

접속자 가 없을 때의 하루 비용, 유휴 상태에서의 CPU/Memeory 할당 비용이 있다.

  • 장점
    • 도커 컨테이너 가 동작하고 있는 URL을 간편하게 제공 합니다.
      • 또한, 커스텀 도메인을 편하게 해주기 때문에 어려움 없이 서비스를 제공 할 수 있죠
    • Edge 시스템
  • 단점
    • Lambda 만큼의 ColdStart 시간은 아니지만, ColdStart 문제가 있습니다.
    • 하지만, 커스텀 도메인을 설정 할 수 있는 것이 일부 리전 에만 허용이 되고 서울 리전은 허용이 되지 않는 단점이 있습니다.
    • Idle 상태에서 컴퓨팅 할당 비용이 있습니다

AWS Lambda, API GW 로 아키텍쳐 변경

Lambda에 Image 와 API Gateway를 연결하면 모든 게 끝
Lambda에 Image 와 API Gateway를 연결하면 모든 게 끝

비용

비용

먼저, 람다의 경우 프리티어 계정(생성 ~ 12개월) 아니여도 매월 1백만 건의 요청을 무료로 처리 해줍니다. 또한, API Gateway 도 프리티어 계정 일경우 매월 1백만 건의 요청을 무료로 처리를 해줍니다.

컴퓨팅 시간에 따라 비용이 처리 되기도하는데, 사용되는 메모리 및 처리시간에 따라 비용이 달라집니다. 이또한 월별 400,000GB-초 컴퓨팅 시간을 무료로 제공 합니다.

사이드 프로젝트의 경우 이용자 수가 많지 않기 때문에 대부분의 경우 프리티어로 처리가 될 것 입니다.

GCP 의 경우 계정 생성 후 3개월동안 $300 을 크레딧 으로 주지만, 3개월이란 시간은 테스트 기간 포함하면 짧기 때문에, 3개월 이후의 비용을 줄이기 위해서 AWS로 옮기게 되었습니다.

Lambda 의 단점

ColdStart

람다는 호출 될때 컴퓨팅 자원을 사용하는 서비스 이기 때문에 오랜만에 람다 함수가 호출 되면, 컴퓨터를 키는 작업이 필요 합니다. 이 컴퓨터가 실행 되고 코드를 시작 하기 전까지를 (ColdStart) 라 칭합니다. ColdStart 동안은 함수가 호출되지 않기때문에 요청에 대한 응답시간이 느립니다.

그러면, 어떻게 해결 해야 하는지 궁금 할 수도 있습니다. 특히, 저처럼 프론트엔드를 람다로 서비스 한다? 이러면 페이지가 빨리 보여야 하기 때문에 빠른 응답이 필요 할 것 같습니다.

Cold Start 해결방법으로 검색하시면 아래와 같은 방법이 일반적으로 나올 것 입니다.

  1. CloudWatch로 4~5분 간격으로 람다 호출 합니다

    1. 평균적으로 Lambda가 5분 간격으로 꺼집니다. 그래서 5분 마다 컴퓨터를 키는 작업을 CloudWatch 를 통해 실행 합니다.
    2. 하지만, 컴퓨터를 계속 키는 것이기 때문에 그에 따른 비용이 추가가 되겠죠…(비용이 젤 무서워)
  2. 프로비저닝된 동시성 옵션 사용

    1. 설정한 수 만큼의 컴퓨터를 항상 프로비저닝 함으로써 콜드스타트의 시간을 줄일 수 있습니다. 옵션 만 설정하면 되기 때문에 가장 간단하지만 가장 비싼 비용을 갖습니다.
  3. 높은 컴퓨팅 메모리 사용

    1. 람다에 비용에는 시간당 요금도 포함되어 있기 때문에 무조건 낮은 메모리를 사용하는 것이 비용 최적화 적이지 않기 때문에 자신의 서비스에 응답 시간과 메모리 값의 비교를 통해서 설정 하는 것이 바람직 해보입니다.

하여튼, 다음글에서 간단한 NextJS를 AWS Lambda 와 API Gateway 를 통해 호스팅 하는 방법을 작성 하도록 하겠습니다.

profile
DFF (Development For Fun)

0개의 댓글