lemonpie313 / spartaNodejs06-recruitment

0 stars 0 forks source link

채용 서비스 백엔드 서버

API 명세서

ex_screenshot https://taropie313.notion.site/=Node-js-API-e3ec13d5f4944246a2cd1ec939c0afd2

ERD

ex_screenshot https://drawsql.app/teams/own-64/diagrams/spartanodejs04-resume

프로젝트 소개

express.js, mySQL을 이용하여 채용 서비스 백엔드 서버를 구현하여 이력서 작성, 조회, 수정, 삭제가 가능하도록 하였다.

코드 설명

회원가입과 로그인을 제외한 모든 기능은 로그인 된 사용자(AccessToken 보유)에 한해 접근 가능하다.

1. 미들웨어

2. 라우터

1) auth.router.js

2) users.router.js

2) resume.router.js

3. Controller / Service / Repository

문제 발생 및 해결

1. 레이어 분리 후 에러 처리

3-Layered-Architectrue로 라우터를 분리한 후, 모든 에러처리는 Controller 계층에서 이뤄져야 한다는 점에서 어려움을 겪었다.

1) Service 계층 에러처리

Service 계층에서 발생한 에러를 모두 throw new Error ('에러메시지') 방식으로 처리를 한 결과, 콘솔창에만 에러메시지가 출력되고 API Client에서는 확인이 되지 않았다.

따라서, error 폴더에 http-error.js 라는 파일에 http-status별로 에러 status와 message를 생성할 수 있는 클래스를 만들어 export하였다. 이 클래스는 service 계층에서 import 받아, throw new Error ('에러메시지')로 에러를 발생시키는 것이 아닌, throw new HttpStatus.클래스명('에러메시지') 형태로 에러를 throw 하여 에러처리 미들웨어에서 에러를 처리할 수 있도록 하였다.

2) 인증/인가 미들웨어 에러처리

이전에는 미들웨어에서 직접 에러를 response로 반환시켰으나, 레이어를 분리한 후 1)과 같이 에러를 throw해주어야 했다.

1)과 마찬가지로, res.status(상태코드).json(message: '에러메시지') 형식으로 에러를 발생시키는 것이 아니라, throw new HttpStatus.클래스명('에러메시지') 형태로 에러를 throw 시켰다. 또한, 미들웨어의 catch(err)에서 처리하는 예외처리 부분은 모두 지우고 next(err)로 넘겨준 뒤, 이 역시 에러처리 미들웨어에서 한번에 처리할 수 있도록 하였다.