Serverless Framework 설정하기
Serverless Framework 설정하기
이번 섹션에서는 Serverless Framework를 사용해 서버리스 앱을 구축해 보겠습니다. 이는 SST를 사용해 만든 노트 앱과 매우 유사하지만 몇 가지 주요 차이점이 있습니다:
- Serverless Framework에서는 백엔드만 구축합니다.
- 백엔드는 Serverless Framework에서 CloudFormation을 사용해 정의됩니다. 반면 SST에서는 AWS CDK를 사용합니다.
데모 레포지토리
시작하기 전에, 우리가 만들 앱의 GitHub 레포지토리 링크를 확인하세요. 참고용으로 잘 보관해 두세요.
이와 연결되는 React.js 프론트엔드도 있습니다 — https://github.com/AnomalyInnovations/serverless-stack-demo-client
이제 앱을 만들어 보겠습니다!
Serverless 설치
이번 장에서는 로컬 개발 환경에 Serverless Framework를 설정해 보겠습니다.
Serverless를 전역으로 설치합니다.
$ npm install serverless -g
위 명령어는 자바스크립트 패키지 관리자인 NPM이 필요합니다. NPM 설치가 필요하다면 이 가이드를 참고하세요.
작업 디렉토리에서 Node.js 스타터를 사용해 프로젝트를 생성합니다. 이 스타터 프로젝트의 세부 사항은 다음 장에서 다룰 예정입니다.
$ serverless install --url https://github.com/AnomalyInnovations/serverless-nodejs-starter --name notes-api
백엔드 API 프로젝트 디렉토리로 이동합니다.
$ cd notes-api
이제 디렉토리에는 handler.js와 serverless.yml을 포함한 몇 가지 파일이 있어야 합니다.
- handler.js 파일은 AWS Lambda에 배포될 서비스/함수의 실제 코드를 포함합니다.
- serverless.yml 파일은 Serverless Framework가 어떤 AWS 서비스를 프로비저닝하고 어떻게 구성할지에 대한 설정을 담고 있습니다.
또한 tests/
디렉토리가 있어 단위 테스트를 추가할 수 있습니다.
Node.js 패키지 설치
스타터 프로젝트는 package.json
에 나열된 몇 가지 의존성을 필요로 합니다.
프로젝트 루트에서 다음 명령어를 실행하세요.
$ npm install
다음으로, 백엔드를 위해 몇 가지 추가 패키지를 설치합니다.
$ npm install aws-sdk --save-dev
$ npm install uuid@7.0.3 --save
- aws-sdk: 다양한 AWS 서비스와 통신할 수 있게 해줍니다.
- uuid: 고유한 ID를 생성합니다. DynamoDB에 데이터를 저장할 때 필요합니다.
서비스 이름 변경하기
스타터에 있는 서비스 이름을 변경해 보겠습니다.
serverless.yml
파일을 열고 기본값을 다음으로 바꿉니다.
service: notes-api
# 함수에 최적화된 패키지 생성
package:
individually: true
plugins:
- serverless-bundle # Webpack으로 함수 패키징
- serverless-offline
- serverless-dotenv-plugin # .env를 환경 변수로 로드
provider:
name: aws
runtime: nodejs12.x
stage: prod
region: us-east-1
functions:
hello:
handler: handler.hello
events:
- http:
path: hello
method: get
service
이름은 매우 중요합니다. 여기서는 서비스를 notes-api
로 명명했습니다. Serverless Framework는 이 이름을 사용해 AWS에 스택을 생성합니다. 따라서 이름을 변경하고 프로젝트를 배포하면 완전히 새로운 프로젝트가 생성됩니다!
또한 hello
라는 Lambda 함수를 정의했습니다. 이 함수는 handler.hello
라는 핸들러를 가지고 있습니다. 핸들러는 다음과 같은 형식을 따릅니다.
handler: {파일명}-{내보내기}
이 경우 hello
Lambda 함수의 핸들러는 handler.js
파일에서 내보낸 hello
함수입니다.
Lambda 함수는 /hello
경로로 HTTP GET 이벤트에 응답합니다. API를 배포하면 이 부분이 더 명확해질 것입니다.
serverless-bundle
, serverless-offline
, serverless-dotenv-plugin
플러그인을 포함한 것을 확인할 수 있습니다. serverless-offline 플러그인은 로컬 개발에 유용합니다. serverless-dotenv-plugin은 나중에 .env
파일을 Lambda 환경 변수로 로드하는 데 사용됩니다.
한편, serverless-bundle 플러그인을 사용하면 프론트엔드 React 앱에서 사용할 자바스크립트와 유사한 방식으로 Lambda 함수를 작성할 수 있습니다.
이제 이 부분을 자세히 살펴보겠습니다.
For help and discussion
Comments on this chapter