AWS 서비스를 활용한 Serverless API

읽기 전

  • 이번에 앱 개발을 하면서 데이터 송수신에 사용할 serverless api를 구현하자는 의견이 있어 정리합니다.
  • node.js와 웹 위주로 정리된 글은 많지만 필자가 이번에 구현하려는 python과 안드로이드 관련 내용은 부족한 감이 있어 작성하고자 합니다.

구조 설명

AWS_Serverless_001_01

구현하고자 하는 API는 GET, POST, DELETE 메소드를 지원한다. 안드로이드에서 요청을 보내면 AWS API Gateway에서 매핑하여 AWS Lambda로 넘겨 처리한 뒤 DynamoDB의 데이터를 조회, 삽입, 삭제한다. 구현하고자 하는 기능은 실시간 연동이 아니라 기능 호출 시 작동하므로 cold start를 저렴하게 이용할 수 있는 방법을 생각하다가 serverless를 채택하게 되었다. 그리고 서버관리가 필요없이 on-demand 방식으로 자연스럽게 확장할 수 있다는 점도 serverless를 채택하게 된 계기가 되었다.

구성 서비스 소개

AWS API Gateway

WebSocket API, REST API, HTTP API 등을 지원한다. API를 사용한 외부 클라이언트와 AWS 서비스 간 통신을 구현함에 있어 가장 첫 번째 단계로 볼 수 있다. 클라이언트가 요청한 메소드에 대해 input data를 매핑하여 다음 단계로 전달하거나 요청에 대한 response를 반환할 때 원하는 형태로 매핑을 할 수 있다.

AWS Lambda

원하는 기능을 함수 단위로 작성하여 관리할 수 있게끔 한다. 다양한 런타임을 제공하며 트리거를 설정하여 작동할 수 있다. 이번에는 외부 클라이언트에서의 API 호출에 따라 작동하므로 API Gateway가 트리거가 되어줄 것이다. EC2처럼 실시간으로 요금이 책정되는 서비스와는 달리 사용량에 따라 요금이 책정되기 때문에 이벤트 기반으로 원하는 기능을 구현하고자 한다면 나쁘지 않은 선택이 될 것이다. 다만, 실행 횟수가 많아지면 단가의 차이가 발생하여 서버 구축이 오히려 저렴할 수 있으므로 가급적 가볍거나 실험적으로 제작하는 토이 프로젝트를 구현할 때 적합하다.

AWS DynamoDB

SQL 엔진을 지원하는 RDS 서비스와는 달리 AWS에서 자체적으로 지원하는 NoSQL 데이터베이스 서비스이다. 그렇기 때문에 사용자가 생성한 테이블의 데이터 등을 웹 콘솔에서 확인할 수 있어 좀 더 직관적이라는 장점이 있다. RDS를 사용할까도 생각했지만 VPC 설정하고 이것저것 작업을 요구하기에 이후 데이터 컬럼 확장을 생각하여 NoSQL로 채택하였다. 단점은 Amazon에서 자체적으로 제작하여 지원하는 데이터베이스다 보니 공식 API 기능 명세 도큐먼트와 데이터 저장 형식이 Amazon이 지정한 방식에 의존해야 한다는 단점이 있다. 만약 굳이 AWS 서비스만을 사용해서 serverless 환경을 구축하는 것이 아니라면 RDS를 사용하는 방법이 더 효율적일 수 있다.

+ Recent posts