[프리온보딩] 첫번째 과제 회고

이동훈·2021년 11월 2일
0

프리온보딩

목록 보기
2/8

첫번째 과제는 프리온보딩에 지원하기 위해 제출했던 사전 과제의 연장선 상의 과제였다. 게시판 CRUD에 댓글 + 대댓글 기능카테고리별 검색 기능, 게시글 읽힘 수를 추가해야 했고, 테스트 과정도 거쳐야 했다. 나는 DB 파트를 담당했다. MongoDB와 Mongoose(ODM)이 익숙치 않아 열심히 구글링하며 구현해 나갔다.

배웠던 점

팀장을 맡아주신 어유선님 께서 많이 알려주시고 도와주셨다.

  • 컨트롤러 내에서 DB 부 나누기

    • 이전에는 컨트롤러 내에서 DB처리까지 모두 작성하는 방식으로만 구현을 했었다. 하지만 이번엔 DB부를 따로 빼서, 함수화 하는 작업을 거쳤다. 역할의 분리로 코드 가독성이 좋아지고, 협업에도 도움이 되었다.
  • 성능을 고려한 페이지네이션 구현

    • mongoose로 pagination을 간단하게 구현할 수 있는 방법으로 skip, limit을 사용하는 방식이 있다. 하지만 skip의 경우, 데이터 전부를 빌드업한 후에 skip하는 방식으로 이루어지기에 성능 문제가 발생한다.

    • 이에 최신 게시글id를 활용하여 페이지네이션을 구현하였다. 다음 링크의 글을 참고하였다. 링크

      let border = lastPostId - page * 10;
      Board.find({ postId: { $lte: border } }).sort({ createdAt: -1 }).limit(10)
      • page * size 값을 활용하여, 경계값을 지정하여 구현!
  • 대댓글 정보 받아오기

    • 게시글에 속한 댓글과 대댓글의 정보들을 모두 가져오기 위한 작업을 하던 중, 대댓글을 댓글 객체 내에 삽입하여 resolve하는 과정을 구현하기가 다소 난해했다. 팀장님이 Promise의 Queue를 활용하는 아이디어를 주셨고, Array.push를 임시로 활용하여 문제를 해결할 수 있었다.

      const findAllComments = (boardId) => {
        return new Promise((resolve, reject) => {
          Comment.find({ parentType: "board", parentId: boardId })
            .then((comments) => {
              let size = comments.length;
              let done = [];
      
              comments.forEach((comment, _, _comments) => {
                findAllNestedComments(comment._id)
                  .then((nestedComments) => {
                    _comments.nestedComments = nestedComments;
                    done.push(comment);
                    if (done.length === size) {
                      resolve(_comments);
                    }
                  })
                  .catch((err) => {
                    reject(err);
                  });
              });
            })
            .catch((err) => {
              reject(err);
            });
        });
      };

아쉬웠던 점

  • 시간 부족

    • 이틀이 안되는 시간동안 완성해서 제출을 해야했기 때문에, 컨벤션, 협업 방식, 프로젝트 구조 등을 잘 의논하지 못하고 급하게 진행한 감이 있었다. 매 과제마다 기간이 비슷하기 때문에, 팀원들과 해결 방안을 모색해야 할 것 같다.

    • (회고를 작성할 시간조차 부족했다.)

    • 하지만 현업에서는 이보다 더한 상황을 마주할 가능성이 많을 것이다. 푸념보단 발전하기 위한 노력이 필요할 때인 것 같다.

profile
I will find a way, I always have.

0개의 댓글