[Assignment 4 회고록] 원티드 - 코드리뷰와 확장성/재사용 가능한 코드

이다은·2021년 8월 10일
1

프리온보딩-회고록

목록 보기
5/11
post-thumbnail

🔗 최종 코드리뷰 사항

🔗 1차 코드리뷰 사항


과제내용

지금부터 이응수 대리를 도와 책 찾기 프로젝트를 진행해 나가실 팀원이며 이응수 대리가 과거 작성한 코드와 결과물을 분석해서 앞으로 어떻게 하면 더 큰 규모의 프로그램을 만들어 나갈 수 있을지 코드 리뷰를 해주시면 됩니다.

  • 실제 프로덕트라고 가정하고 리뷰한다.
  • 확장 가능성에 주안점을 둔다.
  • 좋은 점, 나쁜 점에 대해 솔직하게 반응한다.
  • 본인의 개발 경험 중심으로 풀어나간다.
  • 버그 발견 시, 추측이 아닌 구체적 방법을 제시한다.

🔰 코드 리뷰 방향성 설정

코드 리뷰...? 어떤 부분을, 어떻게 작성해야할지 모르겠어서 구글링을 했다.
그 결과 아래와 같이 6가지 항목을 정했고, 코드를 보면서 항목별로 1차 수정사항을 작성하였다.

  • 설계(Design): 코드가 잘 설계되었고 시스템에 적합한가?
  • 기능(Functionality): 코드가 작성자의 의도대로 동작하는가? 사용자에게 적합하게 동작하는가?
  • 테스트(Tests) : 잘 설계된 자동 테스트가 있는가?
  • 작명(Naming): 개발자가 변수, 클래스, 메소드 등에 명확한 이름을 선택했는가?
  • 스타일(Style): 스타일 가이드(코딩 컨벤션)를 따르고 있는가?
  • 문서화(Documentation): 개발자가 관련 문서도 업데이트 했는가?

> 1차 코드리뷰 사항 정리 내용 <


🔰 팀원간 코드 리뷰 내용 회의

보현님과 각자 작성한 내용을 공유하는 시간을 가졌고, 아래와 같이 과제를 수행하였다.

1. 작성한 1차 리뷰 내용 공유 및 분류/머지하기

  • 서로 공통적으로 찾은 부분과 생각하지 못했던 부분에 대해서 얘기하고, 코드 리뷰에 작성할 리스트 내역을 만들기

2. 에러(버그) 사항에 대해 파일별로 정리하여, 문제점과 해결방안 작성하기

  • 📁 Books/Pagination.js
    (문제점) 더 이상 불러올 데이터가 없을 때, TypeError: Cannot read property 'id' of undefined 라는 에러가 발생한다.

    (✔ 해결방안) 전체 데이터 목록의 개수(totalItems)와 새롭게 불러올 데이터의 인덱스 넘버 (startIndex)가 동일하다면, API 호출이 더 이상 되지 않게 한다.


  • 📁 pages/Filters/index.js
    (문제점) 필터링 조건 선택에 따른 관련순, 최신순 onChange 이벤트가 반영되지 않는다.

    (✔ 해결방안) 구글 Books API에서 제공되는 데이터의 값이 반영되지 않는 상황이기 때문에 publisedDate로 새로 정렬하거나 다른 API 사용을 고려해야 한다.


  • 📁 store/books.js
    (문제점) 구글 Books API 호출 시 필터링 조건에 만족하는 데이터가 없는 경우, 반환된 데이터에 items가 없어서 getItemsSuccess 함수 내에 nextItems.length 부분에서 에러가 발생한다.

    (✔ 해결방안) nextItems가 존재하는 경우에만 startIndex를 불러올 수 있게 옵셔널 체이닝을 사용하여 처리한다.


  • 📁 index.js
    (문제점) 페이지 내에서 에러 발생 시 화면에 에러 페이지가 그대로 노출된다.

    (✔ 해결방안) ErrorBoundary 관련 파일을 생성하여 componentDidCatch 시 분기 처리를 해준다.


3. 코드를 작성한 사람의 마음을 생각해보며, 미사용된 함수/파일 용도가 무엇인지 확인해보기

  • 📁 hooks/useForm.js
    (문제점) handleSelect 함수가 만들어져 있으나 전혀 사용되고 있지 않다.
    handleSelect 함수의 이름만 봐서는 무슨 역할을 하는 함수인지 알기가 힘들다.

    (✔ 해결방안) 책 검색 결과의 필터링 조건 클릭 시 바로 검색 조건을 반영 후 페이지 이동을 하기 위해 만든 함수라면, 현재 "확인"버튼을 눌렀을 때의 handleChange 함수와 동일한 결과를 보여주는 함수이기 때문에 중복이다. 또한 지금처럼 여러 조건을 선택하고 "확인"버튼을 눌러 이벤트를 발생시키는 것이 UX 측면에서도 훨씬 좋기 때문에 handleSelect는 불필요한 함수라고 판단된다.
    handleSelecthandleFilterAndMoveToPath와 같이 보다 더 명확한 함수 네이밍이 필요하다.


  • 📁 hooks/useSync.js
    (문제점) useSync 함수가 만들어져 있으나 전혀 사용되지 않고 있다. 함수의 이름이나 로직을 봤을 때 어떤 역할을 하는지 한눈에 파악하기 힘들다.

    (✔ 해결방안) useLocation을 관리하기 위해 만든 함수라면 리덕스 설계와 함께 내부 로직을 추가 구현하고 함수명도 보다 더 명확하게 변경한다.


  • 📁 Loading/index.js
    (문제점) <marquee> 태그를 사용하여 로딩 컴포넌트를 생성했으나 전혀 사용되지 않고 있다.

    (✔ 해결방안) 사용되지 않는 불필요한 컴포넌트는 삭제하거나 components/Pagination.js 에 활용한다.


4. 글 작성을 어떤 방식으로 할지 결정

  • AS-IS/TO-BE 형식으로 현 코드의 상황과 개선사항을 작성하기로 결정.
  • notion에 깔끔하게 내용 정리하기
  • 변경된 사항에 대한 코드 예시 넣어주기

> 최종 코드리뷰 결과 <

profile
단단_프로트엔드개발자!

0개의 댓글