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

[항해 14기] 개발일지22 (Node.js 4lv 과제)

스쿼트잘함 2023. 4. 27. 23:30

4레벨 리뷰

 

1. 과제 요구 사항

1) ERD 작성

2) 댓글 추가

3) 좋아요 기능 추가

 

 

 

2. 구상

- 3레벨과 동일하게 댓글부분 mongoose -> sequelize로교체

- 좋아요 테이블 추가, 좋아요 라우터 추가

- 게시글 테이블에 좋아요 추가

- 유저가 좋아요를 누를 시 좋아요 테이블에 값추가, 취소시 값 삭제

- 좋아요 on/off 시 게시글 테이블의 좋아요 수 변경

 

 

 

3. 구현

1) ERD

2) Directory Structure

3) 댓글 기능 추가

- 3레벨에 작성했던 댓글 기능 재활용, 문법만 교체

 

4) 좋아요 기능 추가

- like 라우터, 모델, 테이블 추가, post테이블에 likes 추가

- like테이블에 userid와 postid 저장 및 참조

- 좋아요 on off는 테이블값에 데이터 생성/삭제(user가 누른 post -> userid,postid)

- 좋아요 on시 해당 post의 likes 1증가, off시 1감소

 

 

 

4. 리뷰

1) 4lv

- MySQL과 Sequelize를 다시 한번 진행하며 숙련됨

- ERD 제작을 통해 견고한 설계가 가능했고, 테이블/컬럼의 설계 실수가 줄어들었다

- SQL 데이터들의 외부키값, 테이블들 간의 레퍼런스/조인 등에 익숙해졌다

 

2) 매니저님 피드백

- 좋아요 on/off시 데이터 생성/삭제 보다 true,false 로 진행하는걸 추천

- 트랜잭션 사용을 통하여 좋아요 기능 안정성 추가

 

3) 고찰

- 처음엔 Likes테이블의 postId 컬럼의 데이터를 조회 및 합산하여 좋아요 수(likes)를 표현하려고 하였으나, 데이터가 많아질 경우 연산이 길어질 것으로 예상되어 좋아요/좋아요취소 시에 바로바로 Posts테이블에 반영되도록 로직을 변경

- 연산 속도는 개선하였으나 특정 오류(좋아요가 있는상태인데 중복으로 좋아요가 눌린다던지)로 인하여 Posts테이블의 좋아요수가 실제와는 다르게 표시될 위험이 있을거로 예상됨 -> 트랜잭션으로 안정성 추가 예정
- 시험문제 destroy메소드에서 where 조건에서 postid로만 삭제를 했으나 안정성을 위해 userid도 추가해 주는거이 좋음