AWS Lambda를 이용한 Restful API서비스 개발(1)
최근 회사에서 Kafka와 Lambda를 이용한 서비스개발에 착수하게 되었다. 기존에 Lambda를 이용한 api개발 경험이 있었기에 큰 어려움 없이 구상을 할 수 있었지만, 본격적으로 진행하기 전에 lambda와 serverless에 대해 내용을 정리해보고자 한다.
AWS Lambda란?
AWS 람다는 2014년 11월 AWS re:Invent에서 처음 발표된 AWS에서 제공되는 서버리스 컴퓨팅 서비스이다. Serverless란 별도의 서버 셋업 없이 곧바로 코드를 실행해주는 서비스이다. Serverless라는 단어를 오해해서 실제 서버가 없는것으로 오해하는데 진정한 의미는 개발자가 직접 관리해야하는 서버가 없다는 뜻이다. 다시 말하자면 보이지 않는 곳에서 관리형 서버(추상화된 서버)가 따로 존재하고, 필요에 따라 자동으로 Scale up 되거나 Scale down된다.
Lambda 언어
AWS에서는 C#, 파워셀, GO, Java, JavaScript, Python, Ruby등을 네이티브하게 지원하고 있다. 각각의 런타임별로 지원시기가 정해져있고, 지원기간이 종료되면 더이상 사용할 수가 없다. 지원 종료시기에 대해서 미리 파악하고 버전 업그레이드를 해주는게 중요하다. 우선 우리가 사용할 런타임은 node js이고 Node.js의 런타임은 지원은 다음과 같다.

Lambda 함수트리거
람다는 특정 이벤트를 기반으로 요청받은 그 즉시 실행된다. API Gateway나 애플리케이션 로드밸런서가 받은 요청을 기반으로 실행할 수도 있으며, AWS의 다양한 서비스와 연동할 수 있다. 현재 진행중인 프로젝트의 경우 API Gateway와 연동하여 Restful API의 개발과, 카프카와 연동한 개발이 진행될 예정이다.
Lambda 과금체계
Lambda를 사용하는 이점은 서버를 관리해주지 않아도 된다는점, 그리고 저렴한 비용이 있다. 하지만 상황에 따라 Lambda보다 ec2 인스턴스위에서 서비스를 제공하는게 저렴할 수 있으니, Lambda에 대한 과금체계를 잘 이해하여 선택해야한다.
우선 Lambda는 두가지 요소로 과금한다.
- 함수 요청 건수
- 함수 실행 시간
두 요소에서 발생된 금액을(건수요금 + 실행시간요금) 합쳐 과금이 되는 것이다. 예를 들어 프리티어가 포함된 AWS계정으로 미국 동부(버지니아 북부) 리전에서 람다를 수행하는 경우, 함수에 512MB 메모리를 할당하고 한달에 3백만회 실행시 매번 1초간 실행하였다면 과금 체계는 다음과 같다.
- 컴퓨팅 요금
월별 컴퓨팅 요금은 GB-초당 0.00001667USD이고 프리티어에서 400,000GB-초를 제공.
총 컴퓨팅(초) = 300만회 * 1초 = 3,000,000초
총 컴퓨팅(GB-초) = 3,000,000 / 2 = 1,500,000GB-초
(가격테이블 기준, 메모리를 1/2만 사용하였으므로 컴퓨팅 시간을 1/2로 계산해줌)
프리티어 제공 빼줌
1,5000,000GB-초 - 400,000GB-초 = 1,100,000GB-초
월별 컴퓨팅 요금 = 1,100,000 * 0.00001667USD = 18.34USD;
요청 요금
프리티어 기준 1백만회 무상제공 -> 2백만회 과금
월별 요청 요금 = 2 * 0.2USD/월 = 0.4USD총 요금 = 1) + 2) = 18.74USD
Lambda VS EC2
위에서 보다시피 람다는 순수하게 사용시간,요청건수에 의해 과금을 한다. 그래서 EC2와 비교했을 떄 효율적으로 자원을 사용할 수 있지만, 건수나 시간이 많아질 경우 오히려 더 비싸지는 경우가 발생할 수 있다. 다음은 두가지 시나리오에 따른 EC2와 Lambda의 과금을 비교한 표이다.

애플리케이션이 하루에 5,000회 실행되며, 각 실행이 512MB의 메모리 사이즈로 100ms가 소요된다고 가정한다. 이 때의 Lambda 함수의 비용은 0.16달러가 된다. 같은 요구 사항에 대해 t2.nano EC2 인스턴스를 사용한다면, 비용은 약 월 4.25달러이다.
단순한 예시이지만, 이때는 람다 가격이 EC2 가격의 4%에 불과하다는 것을 알 수 있다.두 번째 시나리오를 예로 들어 보자. 한 달에 500만번 실행되는 1GB Lambda 함수는 평균 200ms가 소요된다. 이때의 비용은 17.67달러이지만, EC2 t3.micro를 사용한다면 비용은 7.62달러밖에 들지 않을 것다. 따라서 이 경우, 메모리/요청/실행시간이 많이 요구되기 때문에 오히려 EC2가 람다보다 저렴한 솔루션이 될 수 있다.
마치며
오늘은 AWS의 Lambda에 대해 알아보는 시간을 가졌다. 다음 포스팅에서는 해당 람다를 개발하기 위한 환경으로써 Serverless Framework에 대해 알아보도록 하겠다.
출처:
- https://www.44bits.io/ko/keyword/aws-lambda
- https://sa-na.tistory.com/entry/AWS-%EB%B9%84%EC%9A%A9%EC%A4%84%EC%9D%B4%EA%B8%B0-7-Serverless-%EC%86%94%EB%A3%A8%EC%85%98-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0-AWS-Lambda
- https://blog.naver.com/PostView.naver?blogId=sehyunfa&logNo=222343068462&redirect=Dlog&widgetTypeCall=true&directAccess=false
AWS Lambda를 이용한 Restful API서비스 개발(1)
https://seoyoonho.github.io/2022/07/07/AWS-Lambda를-이용한-Restful-API서비스-개발(1)/