Hello World API 만들기

새로 생성한 SST 앱으로 간단한 Hello World API를 배포할 준비가 되었습니다. 템플릿에서 제공된 파일 중 일부의 이름을 변경해 보겠습니다.

템플릿 이름 변경

Change indicator infra/api.ts를 다음 코드로 교체하세요.

import { bucket } from "./storage";

export const api = new sst.aws.ApiGatewayV2("Api");

api.route("GET /", {
  link: [bucket],
  handler: "packages/functions/src/api.handler",
});

여기서는 GET / 라우트를 가진 간단한 API를 생성합니다. 이 API가 호출되면 packages/functions/src/api.ts에 있는 handler 함수가 실행됩니다.

또한 API에 S3 버킷을 _연결_합니다. 이를 통해 API 내 함수들이 버킷에 접근할 수 있습니다. 나중에 파일 업로드를 처리할 때 이 버킷을 사용할 예정입니다. 지금은 간단히 이름을 변경해 보겠습니다.

Change indicator infra/storage.ts를 다음 코드로 교체하세요.

// S3 버킷 생성
export const bucket = new sst.aws.Bucket("Uploads");

앱 코드에서 이 버킷에 접근하는 방식도 변경해 보겠습니다. 이에 대한 자세한 내용은 다음 장에서 다룰 예정입니다.

Change indicator packages/functions/src/api.ts에서 Resource.MyBucket.name 줄을 변경하세요.

body: `${Example.hello()} Linked to ${Resource.Uploads.name}.`,

몇 가지 컴포넌트의 이름을 변경했으니, 설정 파일도 수정해 보겠습니다.

Change indicator sst.config.ts에서 run 함수를 다음 코드로 교체하세요.

async run() {
  await import("./infra/storage");
  await import("./infra/api");
},

이제 이 변경 사항을 배포해 보겠습니다.

개발 환경 시작하기

로컬 개발 환경을 시작해 보겠습니다. SST의 개발 환경은 여러분의 함수를 실시간으로 실행합니다. 이를 통해 서버리스 앱을 실시간으로 작업할 수 있습니다.

Change indicator 개발 환경을 시작하세요.

$ npx sst dev

sst dev를 실행하면 앱을 배포하고 SST를 위해 계정을 부트스트랩하는 데 1~2분 정도 걸립니다.

SST 0.1.17  ready!

➜  App:        notes
   Stage:      jayair
   Console:    https://console.sst.dev/local/notes/jayair

   ...

+  Complete
   Api: https://5bv7x0iuga.execute-api.us-east-1.amazonaws.com

Api는 방금 생성한 API입니다. 엔드포인트를 테스트해 보겠습니다. 브라우저에서 엔드포인트 URL을 열면 _Hello World!_가 출력되는 것을 확인할 수 있습니다.

Serverless Hello World API invoked

연결된 버킷 이름도 출력되는 것을 확인할 수 있습니다.

프로덕션 배포

API를 프로덕션 환경에 배포하려면 로컬 개발 환경을 중지하고 다음 명령어를 실행해야 합니다.

$ npx sst deploy --stage production

지금 바로 실행할 필요는 없습니다. 앱 작업을 마친 후 나중에 진행할 예정입니다.

여기서 중요한 점은 별도의 환경에서 작업할 수 있다는 것입니다. 따라서 개인 스테이지(jayair)에서 작업 중일 때도 production 환경의 사용자에게 API가 영향을 받지 않습니다. 이 경우 환경(또는 스테이지) 이름은 단순한 문자열이며 특별한 의미는 없습니다. developmentprod로 이름을 지을 수도 있었습니다.

하지만 다른 환경에 배포할 때 완전히 새로운 앱을 생성합니다. 이는 SST 워크플로의 또 다른 장점입니다. 코드형 인프라(Infrastructure as Code) 개념 덕분에 새로운 환경을 쉽게 복제할 수 있습니다. 또한 서버리스의 사용량 기반 요금제 모델 덕분에 실제로 사용하지 않는 한 새로운 환경에 대한 비용이 발생하지 않습니다.

변경 사항 커밋하기

가이드를 따라가면서 변경 사항을 저장할 것입니다.

Change indicator 지금까지 작업한 내용을 커밋하고 GitHub에 푸시합니다.

$ git add .
$ git commit -m "Initial commit"
$ git push

이제 노트 앱의 백엔드를 만들 준비가 되었습니다.