노트 삭제 API 추가하기

마지막으로 사용자가 특정 노트를 삭제할 수 있는 API를 만들어 보겠습니다.

함수 추가하기

Change indicator packages/functions/src/delete.ts 파일을 새로 만들고 다음 코드를 붙여넣으세요.

import { Resource } from "sst";
import { Util } from "@notes/core/util";
import { DynamoDBClient } from "@aws-sdk/client-dynamodb";
import { DeleteCommand, DynamoDBDocumentClient } from "@aws-sdk/lib-dynamodb";

const dynamoDb = DynamoDBDocumentClient.from(new DynamoDBClient({}));

export const main = Util.handler(async (event) => {
  const params = {
    TableName: Resource.Notes.name,
    Key: {
      userId: "123", // 작성자 ID
      noteId: event?.pathParameters?.id, // 경로에서 가져온 노트 ID
    },
  };

  await dynamoDb.send(new DeleteCommand(params));

  return JSON.stringify({ status: true });
});

이 코드는 userIdnoteId를 키로 사용해 DynamoDB에서 delete 호출을 수행하여 노트를 삭제합니다. 현재는 userId를 하드코딩한 상태입니다.

라우트 추가하기

노트 삭제 API를 위한 새로운 라우트를 추가해 보겠습니다.

Change indicator infra/api.ts 파일에서 PUT /notes{id} 라우트 아래에 다음 코드를 추가하세요.

api.route("DELETE /notes/{id}", "packages/functions/src/delete.main");

변경 사항 배포하기

터미널로 이동하면 변경 사항이 배포되고 있음을 확인할 수 있습니다.

새로운 API 스택이 배포된 것을 확인할 수 있습니다.

✓  Deployed:
   StorageStack
   ApiStack
   ApiEndpoint: https://5bv7x0iuga.execute-api.us-east-1.amazonaws.com

API 테스트하기

노트 삭제 API를 테스트해 보겠습니다.

이전 챕터에서 노트 생성 API를 테스트했습니다. 이때 새 노트의 ID가 noteId로 반환되었을 것입니다.

Change indicator 터미널에서 다음 명령어를 실행하세요.

$ curl -X DELETE https://5bv7x0iuga.execute-api.us-east-1.amazonaws.com/notes/<NOTE_ID>

URL 끝부분의 ID를 이전에 받은 noteId로 바꿔주세요.

여기서는 삭제하려는 노트에 DELETE 요청을 보냅니다. 응답은 다음과 같이 표시됩니다.

{"status":true}

변경 사항 커밋하기

Change indicator 이제 변경 사항을 커밋하고 GitHub에 푸시해 보겠습니다.

$ git add .
$ git commit -m "API 추가"
$ git push

이제 우리의 API가 공개적으로 사용 가능해졌습니다. 이는 누구나 접근하여 노트를 생성할 수 있다는 의미입니다. 또한 항상 123 사용자 ID에 연결됩니다. 다음으로 사용자와 인증을 처리하여 이 문제를 해결해 보겠습니다.