Lewis's Tech Keep

[Programmers] [2기] 실무와 가까워지는 Node.js 백엔드 개발 - 2주차 정리 본문

Typescript/Typescript 스터디

[Programmers] [2기] 실무와 가까워지는 Node.js 백엔드 개발 - 2주차 정리

Lewis Seo 2021. 11. 7. 23:23

2주차


최근 스터디를 우연히 두 개를 진행하게 되었다. (본인도 이렇게 될 줄은 꿈에도 몰랐다.)


노트를 남기지 않으면 개념이 섞일 것 같아 두려워서
PR을 TODO-LIST 형태로 정리하고 있었는데 스터디 영상을 리뷰 중에 글로 남겨보라는 코멘트가 있어서 남기려고 한다.

 

2주차에는 프로젝트의 메서드 정리 및 개선, 기본적인 router 이용 및 validation 진행이었다.


개요 및 주요 내용

DONE-LIST

  • request 메서드(GET, POST, PUT)별 함수 분리
  • validate request parameter 하나로 합치기
  • validate exist doc (doc 존재 확인)
  • validate correct owner (현재 doc owner 와 userId 가 같은 지)
  • firebase get, update 메서드 분리
  • validate token 메서드 분리

1. 메서드별 function을 만들어 분리 (handleEventsGet, Put, Post)

export default async function handle(req: NextApiRequest, res: NextApiResponse): Promise<void> {
  /* ... */
  switch (method) {
    case 'GET':
      handleEventsGet(req, res);
      break;
    case 'PUT':
      handleEventsPut(req, res);
      break;
    default:
      res.status(405).end('알 수 없는 메서드입니다.');
      break;
  }
}

2. validate Parameter 부분을 하나로 합침

export function validateEventsRequest<T>(
  paramObj: any,
  schema: JSONSchema6,
  res: NextApiResponse,
): IValidateResponse<T> {
  // 검증
 /* ... */
}

3. validate exist doc 메서드를 합침

function validateExistDoc(
  doc: FirebaseFirestore.DocumentSnapshot<FirebaseFirestore.DocumentData>,
  res: NextApiResponse,
) {
  /* ... */
}

4. validate correct onwer 메서드를 통해 owner 와 userId를 확인

function validateCorrectOwner(ownerId: string, userId: string, res: NextApiResponse) {
  /* ... */
}

5. getDoc, updateDoc, addDoc firebase이벤트 메서드로 분리

async function getDocFromEventsByEventId(eventId: string) {
  /* ... */
}

async function updateDocFromEvents(eventInfo: IEvent, body: any, eventId: string) {
  /* ... */
}

async function addDocFromEvents(addData: Omit<IEvent, 'id'>) {
  /* ... */
}

느낀점

  • API Route에 대해서 다루어 볼 수 있어서 좋았다.
    switch를 통해 get, post, put 과 같은 메서드들을 나눔
    참고링크 API Routes, Router Method Switch
  • ajv를 쓰면 json 유효성 검증할 때 얼마나 편하게 쓸 수 있는지 알 수 있었다.
    json 유효성이 맞지 않을 때 에러를 보내준다. (라이브러리에서)
    참고링크 AJV란
  • event client model 에 FirebaseAdmin을 받아서 global하게 메서드를 다루어 보려고 했는데 실패했다.
    시간 여유가 난다면 연구가 필요할듯
  • addData 시에 필요없는 속성을 제거하는 Omit 타입은 정말 신기하고 획기적이었다.
    참고링크 Omit 타입
  • nextjs를 처음 써 봤는데 run dev 시에 컴파일 속도가 엄청 빨라서 놀랐다.
Comments