노트 조회 API 추가하기

이전에 노트를 생성하고 데이터베이스에 저장했으니, 이제는 특정 id를 가진 노트를 조회할 수 있는 API를 추가해 보겠습니다.

함수 추가하기

Change indicator packages/functions/src/get.ts 파일을 생성하고 다음 내용을 추가합니다:

import { Resource } from "sst";
import { Util } from "@notes/core/util";
import { DynamoDBClient } from "@aws-sdk/client-dynamodb";
import { GetCommand, 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'는 검색할 항목의 파티션 키와 정렬 키를 정의합니다
    Key: {
      userId: "123", // 작성자 ID
      noteId: event?.pathParameters?.id, // 경로에서 전달된 노트 ID
    },
  };

  const result = await dynamoDb.send(new GetCommand(params));
  if (!result.Item) {
    throw new Error("항목을 찾을 수 없습니다.");
  }

  // 검색된 항목을 반환합니다
  return JSON.stringify(result.Item);
});

이 코드는 이전에 작성한 create.ts 함수와 동일한 구조를 따릅니다. 주요 차이점은 요청을 통해 전달된 userId (아직 하드코딩됨)와 noteId를 사용하여 노트 객체를 가져오기 위해 GetCommand(params)를 사용한다는 점입니다.

라우트 추가

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

Change indicator infra/api.ts 파일에서 POST /notes 라우트 아래에 다음 코드를 추가합니다.

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

변경 사항 배포하기

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

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

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

API 테스트하기

노트 조회 API를 테스트해 보겠습니다. 이전 장에서 노트 생성 API를 테스트했는데, 이때 새로 생성된 노트의 ID가 noteId로 반환되었을 것입니다.

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

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

ApiEndpoint 값을 여러분의 엔드포인트 URL로 바꾸고, URL 끝의 <NOTE_ID>를 이전에 생성된 noteId로 변경해야 합니다.

단순한 GET 요청이기 때문에 브라우저에서 이 URL로 직접 접속해도 됩니다.

응답은 다음과 비슷하게 나타납니다.

{"attachment":"hello.jpg","content":"Hello World","createdAt":1629336889054,"noteId":"a46b7fe0-008d-11ec-a6d5-a1d39a077784","userId":"123"}

다음으로, 사용자가 가진 모든 노트를 나열하는 API를 만들어 보겠습니다.