곰돌푸우❤️

Serverless Framework의 등장

 

 복잡한 서버 구성 및 관리를 신경쓰지 않고 클라이언트 개발에만 몰두할 수 있게하는 Serverless Framework들이 많이 나오고 있습니다. Amazon의 AWS Lambda, Microsoft의 Azure Funtions, Google의 Cloud Funtions 등 많은 업체들의 서비스들이 있습니다. 이 서비스들은 특정 작업을 수행하는 함수만을 등록해놓고 API요청이 있을 때만 잠깐 깨어나 함수를 수행합니다. 기존의 24시간 항상 떠있는 서버들과는 달리 리소스 낭비를 줄일 수 있고 비용적인 측면에서도 굉장히 저렴함이 장점입니다. 보통 월별 무료 할당량을 제공해주는데 일반적인 개인 서비스들에서는 무료할당량 범위내에서 무난하게 운영이 가능합니다. 조금 초과하더라도 그리 비싸지 않습니다.

 

 그 동안 서버 공부가 엄두가 안나 개인 프로젝트를 망설이셨던 클라이언트 개발자 입장에서는 안성맞춤인 서비스들입니다. 학습 비용도 크지 않고 예제를 따라해보면 누구나 금방 서비스를 할 수 있습니다. 지금부터 예제를 통해 AWS를 이용한 API 서비스를 구현해볼겁니다.

 

AWS Lambda + API Gateway

예제를 따라하기에 앞서 AWS에 가입하고 로그인 꼭!! 하셔야 합니다.

 

AWS Lambda생성

- Lambda 콘솔에 접속합니다.

Create Funtion을 클릭해서 함수를 생성해주어야 합니다.

 

 BluePrints가 나오는데 여기서 여러 샘플들을 확인할 수 있습니다. 많이 사용하는 서비스들 위주로 연동하는 코드들을 미리 완성형으로 제공하고 있어 사용하시고자 하는 서비스와 일치하는 것이 있으면 Filter에 검색해서 선택하여 그대로 적용하시면 됩니다. 그렇지 않고 직접 전체 코드를 작성하시려면 Author from scratch 버튼을 눌러 다음으로 넘어갑니다. 여기서는 hello-world blueprint를 그대로 사용해보겠습니다.

 

 함수 정보를 입력하는 화면이 나옵니다.

- Name은 Lambda 함수명으로 자유롭게 입력합니다.

- Role은 쉽게 말해 권한들의 그룹입니다. Lambda함수의 코드들이 S3, DynamoDB, RDS 등 다른 서비스에 접근해야 한다면 먼저 Role을 만들어 필요한 권한들을 지정해준 후 그 Role을 Lambda 함수에 할당해야합니다. 우리가 사용하는 hello-world코드는 별다른 권한이 필요없지만 Role은 필수로 지정해야 하므로 Create new role from template(s)를 선택해서 기본적인 Role을 하나 만들어 지정해보겠습니다.

- Role name이 활성화 되는데 우리는 helloRole이라고 지정해보겠습니다.

- Policy templates은 optional이라 그냥 비우고 넘어가겠습니다.

- Create Funtion을 눌러 함수를 생성합니다.

 

 오른쪽 상단의 Test버튼을 눌러 함수를 테스트 해볼 수 있습니다.

 

 

이제 함수를 생성을 완료했으니 외부에서 API호출이 있을 때 이 Lambda함수가 호출될 수 있도록 API Gateway를 구성해야합니다.

 

API Gateway 구성

위에서 Lambda함수를 생성했으니 외부의 API호출을 받아 Lambda함수가 호출될 수 있게 이어주는 작업을 해야합니다. 이 API Gateway가 그 역할을 해주므로 꼭 필요한 작업입니다.

 

 API Gateway 콘솔에 접속해서 Create API 를 클릭합니다.

 

 

Create new API

- New API를 선택합니다.

- API name에 helloApi라고 입력합니다.

- Description은 Optional입니다. (입력해도 그만 안해도 그만)

- 우측 하단에 Create API를 클릭하여 생성합니다.

 

▲ Actions -> Create Resources를 선택합니다.

 

▲ New Child Resource

- Resource Name에는 hello를 입력

- Resource Path는 자동으로 채워집니다.

- Create Resource를 클릭합니다.

 

  • 다음으로 Method를 생성합니다.

    • Actions -> Create Method를 선택하면 트리의 hello리소스 하단에 Select Box가 활성화 되는데 POST를 선택하고 확인버튼을 클릭합니다.
    • Integration type에는 Lambda Funtion을 체크합니다.
    • Lambda Region에는 앞서 Lambda를 만들어놓은 Region(ap-northeast-2)을 선택합니다.
    • Lambda Function에는 helloFuntion을 입력합니다.
    • 모두 입력하셨으면 Save를 눌러 저장합니다.

 

  • 아래와 같이 팝업이 뜨면 OK를 눌러줍니다.

    • API Gateway에 람다 함수를 실행할 수 있는 권한을 부여하겠다는 확인 팝업입니다.

 

 

  • 이제 method까지 만들어졌으니 Test를 해보겠습니다. /hello 리소스 아래에 있는 POST선택하고 우측 섹션에 TEST버튼을 클릭합니다.

    • Request Body로는 아래 값을 입력합니다. (우리가 만들었던 helloFuntion이 아래 형식의 데이터를 받도록 개발돼있어요)
{
  "key3": "value3",
  "key2": "value2",
  "key1": "value1"
}
  • TEST 버튼을 눌러 테스트를 시작합니다.
    • 우측 결과 로그를 보면 Lambda가 잘 동작해서 로그를 남기고 응답을 보낸 것을 확인할 수 있습니다.
  • 이제 API Gateway설정 및 테스트를 마쳤습니다.
 

API 배포

  • 마지막으로 API를 외부(클라이언트)에서도 호출 가능하게 배포를 해야합니다.
  • Actions -> Deploy API를 선택합니다.

    • Deployment stage에서 [New stage]를 선택합니다.
    • Stage name에 test를 입력합니다.
    • 나머지는 자유롭게 입력 후 Deploy버튼을 클릭합니다.

 

 

 

여기까지 Lambda로 함수를 만들고 Gateway API로 API를 만들고 배포하여 URL을 얻기까지 모든 과정이 끝났습니다.

이 글의 과정을 응용하여 충분히 서비스를 운영하실 수 있습니다.

 

물론 이 글의 내용만으로는 충분하지 않을 수 있습니다. 

되도록 AWS의 공식문서 참고를 추천드리며 개인 블로그에도 좋은 글을 올려주신 분들이 많으니 열공 하시길 바랍니다.

 

이 글을 공유합시다

facebook twitter googleplus kakaostory naver