항해14기 본과정/항해14기 개발일지

[항해 14기] 개발일지17 (Node.js 1LV 과제, 2LV 과제)

스쿼트잘함 2023. 4. 24. 22:01

2레벨 리뷰(1레벨 포함)

 

1. 과제 요구 사항

1) 개요

- express, 몽고디비, jwt, 쿠키파서 이용

- 게시판 게시글/댓글 CRUD 구현, 예외처리, 로그인/회원가입 구현

2) 로그인/회원가입 API

- 닉네임 조건, 비밀번호 조건, 예외처리, req조건

- jwt,와 cookie이용

3) 게시글 CRUD

- 특정 조건으로 조회, 상세 조회 구현

- 작성/수정/삭제 시 상요자 인증진행, 예외처리

4) 댓글 CRUD

- 게시글과 동일

 

 

 

2. 구상

- API 명세서대로 진행

- 게시글이 지워질 경우 소속된 댓글도 삭제하는 기능 추가

 

 

 

3. 구현

1) Directory Structure

2) 스키마

- user : 닉네임과 패스워드, 닉네입은 유니크값 지정

- index : 생략

- post : 명세서대로 진행, createdAt과 updatedAt의 경우 default:Date.now로 디폴트값 지정

- comments : post와 동일, postId를 추가로 참조해줌

- versionKey:false 입력시 몽고db의 version값 누락 가능

 

3) 인증

- jwt 라이브러리와 user스키마 임폴트

- 이후 기본적인 인증문법 진행

 

4) app.js

(1) 선언부

- express, cookieparser라이브러를 불러오고 스키마와 연결 및 실행, 각 라우터들과 연결 선언

(2) 미들웨어

- body값을 받기위한 express.json

- url 쿼리값을 body로 파싱하기위한 express.urlencoded

- 쿠키 이용을 위한 cookieparser

- 각 라우터들과 미들웨어 연결

- 이후 listen으로 포트바인딩하여 서버 실행

 

5) 라우트

(1)auth

- 로그인과 회원가입 관리

- 기본적인 인증 문법 진행

- 정규식 등으로 아이디 형식에 제한

(2) 공통 CRUD

- C : 인증 후 바디로 데이터 받아서 post메소드와 몽구스create로생성

- R : get메소드와 몽구스find로 진행, 명세서에 맞게 데이터 가공 후 표시

- U : 인증 후 바디로 데이터 받아서 put메소드와 몽구스updateOne으로 진행

- D : 인증 후 delete메소드와 몽구스 deleteOne으로 진행

 

 

 

4. 리뷰

1) lv1

- api, 라우터, 미들웨어, CRUD, REST 아키텍쳐, db 등 서버의 기본적인 개념을 익힘

- 기능 구현은 전부 성공하였으나, crud 메소드와 db다루는것에 집중하여 예외처리를 신경쓰지 못하였다

 

2) lv2

- jwt와 cookie개념을 인증미들웨어 구현을 통해 익힘

- lv1때 소홀하였던 예외처리에 집중함

 

3) 기술매니저님 지적 부분

(1) lv1

- 상세 조회시 전체조회 코드를 복붙해버려서 find로 모든 데이터를 불러와 포스트아이디 값에 만든 결과로 재가공해 주었음. findById/findOne으로 코드 최적화 가능. 다음부턴 작동이 되는 코드도 섬세하게 재검토 하자.

- 게시글 삭제시 게시글만 삭제되어 댓글들이 붕 떠버림. 다음 레벨에서 개선하였음

- 예외처리(로직적인 부분과 try/catch 메소드 문법)에 미흡한 부분이 많았음. 다음 레벨에서 개선완료.

 

(2)lv2

- 중복 선언

이미 _id값을 commentId로 가공해 주었지만 몽고디비에 익숙하지 못하여 _id값을 굳이 누락시키는 코드가 됨

- 명세서에 update,delete 에서 해당 코드가 실패할 경우 catch단으로 넘기지 않고 try안에서 바로 예외처리를 하는 부분이 있었는데 몽구스의 update,delete 문법안에 내장된 수정/삭제 내역을 기록한 메소드를 불러와서 처리해주었음. 시도는 좋았으나, 더 안전한 예외처리를 위해 해당 문법 전체를 catch로 감싸주도록 개선함