반응형
서버리스 앱 개발하기 1 - AWS Lambda와 AWS Gateway 연결

앞으로 서버리스로 앱 개발이란 주제로 3회간 연재를 해보려 합니다. 


  1. AWS Lambda와 AWS Gateway 연결해보기
  1. AWS Lambda와 DynamoDB 연결하기, Serverless 프레임워크 사용
  1. AWS Lambda와 Flutter 연결하기
 

사용할 서비스는 AWS Lambda, AWS API Gateway, Flutter 입니다.


서버리스나 크로스 플랫폼 개발에 관심 있는 분들이 봐주시면 좋겠네요.

 

기존에 저는 파이어베이스를 1년 넘게 사용했었는데 복잡한 쿼리가 안 되는 치명적인 단점이 있더군요.

 

파이어베이스가 처음 개발할 때는 정말 좋은데 클라이언트 단에 코드가 몰리는 경향이

 

강하고 데이터베이스에 있는 데이터 관리가 쉽지 않아 다른 서비스를 고려하기 시작했습니다.

 

그러다가 AWS Lambda를 알게 되었죠.

 

서버가 있는지 없는지 신경 쓰지 않고 함수만 호출하면 되는게 람다입니다.

 

람다를 쓰게 되면 서버가 죽었을 때 살리는 걱정을 하지 않아도 되는 장점이 있었습니다.

 

게다가 커스터마이징도 가능하구요.

 

반면 좀 상대적으로 느리다고 합니다.

 

바로 콜드 스타트와 핫스타트때문인데요.

 

오랫동안 람다 함수를 쓰지 않으면 람다가 대기 상태에 있기에

 

반응속도가 느려진다고 합니다.

 

어떤 언어를 쓰느냐에 따라 다르지만 0.2 ~ 0.5초 가량 걸린다고 합니다.


그럼 언제 람다를 쓰는 게 좋을까요? 장단점을 비교해 보겠습니다.

 

AWS Lambda를 써도 좋은 곳 (람다의 장점)
  • 비용 예측이 어려운 곳
  • 조금은 느려도 좋은 앱
  • 확장을 적은 노력으로 빠르고 하고 싶을 때

 

AWS Lambda 쓰지 말아야할곳 (람다의 단점)
  • cpu 처리를 많이 하는 곳
  • 실시간 멀티 플레이를 하는 게임 (모바일 턴제 게임은 가능함)
  • 속도가 중요한 앱

 

제 경우엔 크롤링 후 서버에서 데이터를 처리 후, 보여주는 앱을 만들고 있습니다. 

속도가 크게 문제가 되지 않기에 람다를 택했습니다. 

 

AWS Lambda 시작하기

aws lambda는 콘솔에서 만들 수도 있고 cli 툴로 만들수도 있는데요.

일단은 콘솔에서 만들어보도록 하겠습니다.

aws에 로그인하고 함수를 만드는 화면으로 이동합시다.

 

alt text

 

create function을 누르면 람다 함수를 만드는 화면으로 넘어갑니다.

 

alt text

 

함수 이름(Name)은 ‘myHello'로 하고 프로그래밍 언어는 node.js를 쓰도록 하겠습니다.

 

nodejs의 버전은 8.1로 하겠습니다. 8.1로 해도 예전 코드가 돌아가더군요.

 

웹 상의 예제 코드가 낮은 버전이라고 해도 신경 쓰지 마시고 최신 버전 노드를 쓰면 됩니다.

 

새로 role을 만들거구요.

 

roleName은 ‘myLambdaRole’로 하겠습니다.

 

람다 함수를 만들면 설정(lambda cofiguration) 화면으로 넘어오게 됩니다.

 

여기서 람다 함수를 변경해 줄 수도 있고, 람다와 연결할 트리거들을 정해줄 수 있습니다.

 

alt text

 

이 설정화면을 가장 많이 사용하게 될 건데요.

현재는 따로 연결된 함수는 없습니다.

오른쪽 상단을 보면 TestSave 버튼이 보이는데요.

람다 함수를 실행할 때 쓰입니다.

이제 화면을 내려서

실제 람다 코드를 보도록 합니다.

어떻게 동작하는지 알고 싶다면 Test 버튼을 눌러보세요.

이벤트를 설정하는 화면이 나올거에요.

 

alt text

 

이벤트를 만들었으면 Save를 하고 다시 테스트를 해보세요.

응답이 아래처럼 오면 성공이에요.

 

아래는 전체 실제 람다 에디터에서 실행해본 화면이에요.

소스 코드 밑에 response가 표시되어서 바로바로 결과를 확인할 수 있습니다.

index.js를 수정해보면서 람다가 어떻게 동작하는지 확인해보도록 합시다.

alt text

 

지금까지 가장 기초적인 람다를 만들었습니다.

람다를 바로 쓸 수는 없고, 외부에서 접근하려면 AWS API Gateway와 연결을 해주어야합니다.

 

AWS API Gateway

aws api gateway는 api를 만들때 쓰입니다. aws 내부의 서비스와 외부의 연결 통로를 만들 때 쓰이죠. aws lambda도 외부에서 쓰려면 api gateway와 연결해야합니다.

1. 새 api 만들기

alt text

api gateway를 쓰려면 새 api를 정해줘야합니다.

이름은 편한대로 정해주세요.

 

2. 리소스 만들기

alt text

 

리소스는 url을 말합니다.

리소스를 통해 api에 접근하게 되는거죠

여기서는 create Resource를 택해줄께요.

 

3. 리소스 만들기 - 리소스 이름 정하기

alt text

 

리소스 이름(resource name)은 user로 하겠습니다. 이제 url에 user가 추가되었네요.

 

4. post 메소드 만들기

alt text

 

리소스를 만들었으면(url을 정했으면)

이제 메소드를 만들 겁니다. 메소드는 get, post, put, delete 등이 있는데 모두 rest 방식에서 쓰이는 것들입니다.

user를 클릭하고 create method를 눌러주세요.

action을 고를 수 있는데 그 중에서 POST를 선택해줍니다.

그리곤 어떤 람다함수와 연결할지를 정해주면 됩니다.

alt text

 

 

람다와 API 게이트웨이의 연결이 되었습니다.

연결을 했다고 끝이 아니에요. Deploy를 해야 외부에서 람다를 사용할 수 있습니다.

저도 디플로이 과정을 깜빡해서 엄청 삽질을 했었죠.

6. API Deploy하기

alt text

 

 

 

Actions탭에서 Deploy API를 골라주세요.

 

alt text

 

 

Deploy 설정에서는 이름만 정해주도록 할께요.

 

디플로이가 끝나면 Stage로 가봅시다.

 

Invoke URL이 생겼죠?

 

이 URL에다가 HTTP 메소드(Post)를 써주면 이제 완성입니다!

 

alt text

 

 

 

7. API 테스트 하기

저는 포스트맨을 이용해서 테스트를 해보겠습니다.

Method를 포스트로 바꿔주고 Invoke URL을 통해 요청을 보내 볼께요.

 

alt text

 

생각했던대로 응답이 오네요.

실행 시간은 350ms 좀 걸리긴 하네요.

 

마무리

AWS Lambda가 개념 자체는 간단한데

아무래도 콘솔 창에 익숙해지는 좀 걸리더군요.

앞으로는 콘솔 대신에 Serverless라는 프레임워크를 통해서 람다를 다뤄보도록 하겠습니다.

대부분의 개발자분들은 서버리스 프레임워크가 더 편할 거에요.

 

 

 


반응형

+ Recent posts