현재 팀에서 람다를 사용하는데, 람다에서 지원하는 파이썬 버전이 지원 종료로 인해 런타임 방식을 ZIP 코드가 아닌, Docker Image 방식으로 변경 하게 되었습니다.
해당 작업을 진행 하면서, Google Cloud Run 에서 Docker로 빌드된 이미지를 사용 하는 제 토이프로젝트 서비스 또한 람다로 바꾸게 되면 비용적으로 더 저렴하게 사용 할 수 있을 것 같아 변경 하게 되었습니다.
(또한, AWS 를 주로 쓰기 때문에 관리하기 더 용이하다는 판단도 있었습니다.)
비용적으로 Google Cloud Run 에서는 유휴 시간동안 컴퓨팅 자원을 잡고 있기 때문에 이에 대한 비용을 지불 해야 했고, 서비스 이용자가 없는 서비스에 돈을 쓰는 것이 아깝다고 생각 하기 때문에 프리티어로 넉넉하게 제공 하는 AWS 의 Lambda/ API Gateway 가 더 이득이라고 생각 하여 바로 클라우드를 AWS 로 변경 하게 되었습니다.
먼저 람다 와 API Gateway 에 대해서 간단하게 정리하도록 합니다.
AWS Lambda란 서버리스 컴퓨팅 자원을 이용하는 서비스 입니다. 서버리스란, 말 그대로 서버가 없다는 뜻으로 한번에 이해가 안될수도 있습니다.
람다의 Serverless 서비스는 아래의 3가지 정도의 특성을 가지고 있습니다.
즉, Lambda를 통해 개발을 하게 되면 개발자는 말그대로 개발에만 몰입 할 수 있기 때문에, 많은 사람들이 사용 합니다.
또한, EC2를 통해 24시간 서버를 켜 있는 것보다, 람다를 통해 사용된 컴퓨팅 자원에 대한 비용만 지불하면 되는 람다는 비용적인 측면에서도 이익이 있습니다.
(물론 24시간 내내 람다가 실행 된다면 EC2 보다 비싼 비용 이고, 실제로 람다의 컴퓨팅 환경은 EC2와 같은 환경을 가지고 있다고 합니다.)
람다는 단순히 함수의 역할을 합니다. 함수가 자동으로 호출되지 않듯이, 함수를 호출 시킬 어떤 것이 필요하게 되고, 이 람다를 호출(Invoke) 하기 위해서 API Gateway를 사용 합니다.
API Gateway는 말 그래로, API의 End Point로서의 역할을 하며 해당 엔드포인트로 접근시, 연결된 람다를 호출 하는 역할을 합니다.
예를들어, 유저를 불러오는
람다 함수와 /유저불러오기
라는 API Gateway의 엔드포인트를 연결시,
유저 및 클라이언트 가 GET /유저불러오기
요청을 보낼때, 유저를 불러오는
람다 함수를 호출 하게 됩니다.
접속자 가 없을 때의 하루 비용, 유휴 상태에서의 CPU/Memeory 할당 비용이 있다.
Lambda에 Image 와 API Gateway를 연결하면 모든 게 끝
먼저, 람다의 경우 프리티어 계정(생성 ~ 12개월) 아니여도 매월 1백만 건의 요청을 무료로 처리 해줍니다. 또한, API Gateway 도 프리티어 계정 일경우 매월 1백만 건의 요청을 무료로 처리를 해줍니다.
컴퓨팅 시간에 따라 비용이 처리 되기도하는데, 사용되는 메모리 및 처리시간에 따라 비용이 달라집니다. 이또한 월별 400,000GB-초 컴퓨팅 시간을 무료로 제공 합니다.
사이드 프로젝트의 경우 이용자 수가 많지 않기 때문에 대부분의 경우 프리티어로 처리가 될 것 입니다.
GCP 의 경우 계정 생성 후 3개월동안 $300 을 크레딧 으로 주지만, 3개월이란 시간은 테스트 기간 포함하면 짧기 때문에, 3개월 이후의 비용을 줄이기 위해서 AWS로 옮기게 되었습니다.
람다는 호출 될때 컴퓨팅 자원을 사용하는 서비스 이기 때문에 오랜만에 람다 함수가 호출 되면, 컴퓨터를 키는 작업이 필요 합니다. 이 컴퓨터가 실행 되고 코드를 시작 하기 전까지를 (ColdStart) 라 칭합니다. ColdStart 동안은 함수가 호출되지 않기때문에 요청에 대한 응답시간이 느립니다.
그러면, 어떻게 해결 해야 하는지 궁금 할 수도 있습니다. 특히, 저처럼 프론트엔드를 람다로 서비스 한다? 이러면 페이지가 빨리 보여야 하기 때문에 빠른 응답이 필요 할 것 같습니다.
Cold Start 해결방법으로 검색하시면 아래와 같은 방법이 일반적으로 나올 것 입니다.
CloudWatch로 4~5분 간격으로 람다 호출 합니다
프로비저닝된 동시성 옵션 사용
높은 컴퓨팅 메모리 사용
하여튼, 다음글에서 간단한 NextJS를 AWS Lambda 와 API Gateway 를 통해 호스팅 하는 방법을 작성 하도록 하겠습니다.