노트 조회 API 추가하기

이제 노트를 생성하고 데이터베이스에 저장했습니다. 노트 ID를 기반으로 노트를 조회할 수 있는 API를 추가해 보겠습니다.

함수 추가하기

Change indicator 프로젝트 루트에 get.js 파일을 새로 만들고 다음 코드를 붙여넣으세요:

import handler from "./libs/handler-lib";
import dynamoDb from "./libs/dynamodb-lib";

export const main = handler(async (event, context) => {
  const params = {
    TableName: process.env.tableName,
    // 'Key'는 조회할 항목의 파티션 키와 정렬 키를 정의합니다
    Key: {
      userId: "123", // 작성자의 ID
      noteId: event.pathParameters.id, // 경로에서 전달된 노트의 ID
    },
  };

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

  // 조회된 항목을 반환합니다
  return result.Item;
});

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

API 엔드포인트 설정

Change indicator serverless.yml 파일을 열고 다음 내용을 추가하세요.

get:
  # get.js의 main 함수를 호출하는 HTTP API 엔드포인트를 정의합니다.
  # - path: URL 경로는 /notes/{id}
  # - method: GET 요청
  handler: get.main
  events:
    - http:
        path: notes/{id}
        cors: true
        method: get

이 블록이 앞의 create 블록과 동일한 들여쓰기로 되어 있는지 확인하세요.

이 설정은 노트 조회 API를 정의합니다. /notes/{id} 엔드포인트에 GET 요청 핸들러를 추가합니다. 여기서 {id}는 위 함수에서 사용한 event.pathParameters.id로 변환됩니다.

테스트

노트 조회 API를 테스트하려면 noteId 파라미터를 모킹해야 합니다. 이전 장에서 생성한 노트의 noteId를 사용하고, 모의 데이터에 pathParameters 블록을 추가합니다. 아래와 비슷한 형태가 될 것입니다. id 값을 이전에 create.js 함수를 실행했을 때 받은 ID로 바꿔주세요.

Change indicator mocks/get-event.json 파일을 생성하고 다음 내용을 추가합니다.

{
  "pathParameters": {
    "id": "a63c5450-1274-11eb-81db-b9d1e2c85f15"
  }
}

그리고 프로젝트 루트 디렉토리에서 새로 만든 함수를 실행합니다.

$ serverless invoke local --function get --path mocks/get-event.json

응답은 다음과 비슷하게 나올 것입니다.

{
    "statusCode": 200,
    "body": "{\"attachment\":\"hello.jpg\",\"content\":\"hello world\",\"createdAt\":1603157777941,\"noteId\":\"a63c5450-1274-11eb-81db-b9d1e2c85f15\",\"userId\":\"123\"}"
}

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