Milestone | Tag | Release | Purpose |
---|---|---|---|
Prototpye : 기본 서버 구현 | @1.0.0 | Prototype | 안정된 프로토타입 구현 |
항해 주특기 주차 (1/3) - 게시글 CRUD
을 진행하면서, 구조화된 방식으로 개선해나가는 것을 경험했습니다.
오랜만에 Express 를 쓰는 감을 다시 찾았기 때문에, 이번에는 OOP, Object Oriented Programming
에 입각해서 구조화되고 안정적인 개발을 진행해보도록 하였습니다.
이번 과제는 MySQL 을 사용하는 것이었습니다.
몇 가지 필수 구현사항과 API 요구사항을 받고 과제를 진행하게 되었습니다.
이번에는 Layered Architecture
를 적용하였습니다.
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 를 만들어서 매개변수를 직관적인 영역으로 개선했습니다.
또한, BaseEntity 에 2가지 핵심 요소를 설계했습니다.
[Symbol.iterator]: generator
를 통한 모든 Entity, Dto 를 @@iterable
화 하여 구조분해 사용 가능하게 변경_getJoiInstance()
메서드를 정의하고 에러를 던져서 Java 의 추상 클래스를 이용한 특정 메서드의오버라이드 강요
와 같이 구현해당 부분들을 이용해서 JoiValidator
와 같은 특정 클래스들의 추상화 단계를 올릴 수 있었습니다.
await new JoiValidator()
.validate(dto, dto._getJoiInstance());
위와 같이 실행할 수 있는 함수를 만들었습니다.
프로젝트 종료 후, 다시 생각 해보니, 그냥 dto 만 넘기고 내부에서 _getJoiInstance() 를 하게 만드는 것도 나쁘지 않았을 것 같습니다.
곧 시작될 항해 팀 프로젝트
들을 대비하고 있는데요, 그 중에서 원활한 의사소통을 위한 API 명세서
작성을 연습하고 있습니다.
다음의 카카오 DOCS - API 문서 톺아보기 를 읽고 공감 가는 부분을 반영하고 있습니다.
unchaptered/hanghae-backend-2 중 API 명세서 파일 에 들어가셔서 명세서 작성 파일을 확인하실 수 있습니다.
이번 주차의 구현 목표는 모두 성공했습니다. 하지만, 주특기 전 주차에 계획했던 CI/CD : EC2 배포 자동화 파이프 라인 구축 에 도전하지 못한 것이 아쉬웠습니다.
아무래도, 주특기 주차 동안 다른 분들의 QnA 에 응하고 에러를 같이 보거나, 항해톡 - SQL vs NoSQL 과 주특기 주차 시작부터 2 주간 별도로 진행한 사이드 프로젝트 - Broccoli Velog 를 병행하느라 시간 소요가 컸던 것 같습니다.