항해 주특기 주차 (2/3) - 유저/게시글/댓글 CRUD

일상의 기록·2022년 8월 7일
0

항해99 8기

목록 보기
7/12
post-thumbnail
post-custom-banner

작업 순서

MilestoneTagReleasePurpose
Prototpye : 기본 서버 구현@1.0.0Prototype안정된 프로토타입 구현

구조


Express.JS

항해 주특기 주차 (1/3) - 게시글 CRUD
을 진행하면서, 구조화된 방식으로 개선해나가는 것을 경험했습니다.

오랜만에 Express 를 쓰는 감을 다시 찾았기 때문에, 이번에는 OOP, Object Oriented Programming 에 입각해서 구조화되고 안정적인 개발을 진행해보도록 하였습니다.


😊 과제

이번 과제는 MySQL 을 사용하는 것이었습니다.

  • 유저 CRUD
  • 게시글 및 댓글 CRUD
  • 좋아요 기능

몇 가지 필수 구현사항과 API 요구사항을 받고 과제를 진행하게 되었습니다.

이번에는 Layered Architecture 를 적용하였습니다.


😂 불편한 JS (타입 추론 지원)

JavaScript 에서도 함수 주석을 이용하면 TypeScript 처럼 타입 추론을 쓸 수 있는 것을 알아냈습니다.

항해 주특기 주차 (1/3) - 게시글 CRUD ### 😂 불편한 JS


👌 커스텀 예외 + 예외 미들웨어

커스텀 예외와 글로벌 미들웨어를 통한 글로벌 예외 처리 파이프라인 을 만들어서 사용했습니다.

항해 주특기 주차 (1/3) - 게시글 CRUD ### 👌 커스텀 예외 + 예외 미들웨어

단, 잘못된 경로로 접속할 경우에 res.locals.error 가 없어서 Cannot read property from 'undefined' 가 발생했던 문제점을 찾고 이를 개선했습니다.

// 예시

if (!res.locals?.error) {
    res.status(404).json({
       isSuccess: false,
       message: `Not Found Exception : 해당 경로는 지원되지 않습니다.`,
       result: {}
    });
}

⚡ Entity + Dto

단순하게 설계된 테이블에 Entity 와 Dto 를 만들어서 매개변수를 직관적인 영역으로 개선했습니다.

또한, BaseEntity 에 2가지 핵심 요소를 설계했습니다.

  1. [Symbol.iterator]: generator 를 통한 모든 Entity, Dto 를 @@iterable 화 하여 구조분해 사용 가능하게 변경
  2. _getJoiInstance() 메서드를 정의하고 에러를 던져서 Java 의 추상 클래스를 이용한 특정 메서드의오버라이드 강요 와 같이 구현

해당 부분들을 이용해서 JoiValidator 와 같은 특정 클래스들의 추상화 단계를 올릴 수 있었습니다.

await new JoiValidator()
  .validate(dto, dto._getJoiInstance());

위와 같이 실행할 수 있는 함수를 만들었습니다.

프로젝트 종료 후, 다시 생각 해보니, 그냥 dto 만 넘기고 내부에서 _getJoiInstance() 를 하게 만드는 것도 나쁘지 않았을 것 같습니다.


💌 API 명세서 작성

곧 시작될 항해 팀 프로젝트 들을 대비하고 있는데요, 그 중에서 원활한 의사소통을 위한 API 명세서 작성을 연습하고 있습니다.

다음의 카카오 DOCS - API 문서 톺아보기 를 읽고 공감 가는 부분을 반영하고 있습니다.

unchaptered/hanghae-backend-2 중 API 명세서 파일 에 들어가셔서 명세서 작성 파일을 확인하실 수 있습니다.


아쉬웠던 점

이번 주차의 구현 목표는 모두 성공했습니다. 하지만, 주특기 전 주차에 계획했던 CI/CD : EC2 배포 자동화 파이프 라인 구축 에 도전하지 못한 것이 아쉬웠습니다.

아무래도, 주특기 주차 동안 다른 분들의 QnA 에 응하고 에러를 같이 보거나, 항해톡 - SQL vs NoSQL 과 주특기 주차 시작부터 2 주간 별도로 진행한 사이드 프로젝트 - Broccoli Velog 를 병행하느라 시간 소요가 컸던 것 같습니다.

profile
2022년 12월 9일 부터 노션 페이지에서 작성을 이어가고 있습니다.
post-custom-banner

0개의 댓글