정권찌르기[리팩토링 2-4일차]: EditorList 오류 수정하기

밍구·2023년 7월 11일
0
post-thumbnail

취업을 위한 정권찌르기 오늘도 역시나..

프로젝트 코드 리팩토링

💥문제:

1. 기술 부채로 인한 코드 오류..

  • 현재 리팩토링 하고 있는 프로젝트는 약 기획 제외하고 4~5주 정도의 시간이 주어진 프로젝트였는데,
    컨설턴트 님에게 매주 피드백을 받을 때 마다 우선순위(하)에 있던 기능 + 추가 기능 요청으로 인해 빠르게 반영하는데 초점을 두다 보니 기술부채가 무시무시하게 쌓여 있었다..........
    개발 끝나면 꼭 리팩토링 해야지 결심했었지만 마지막에 부탁 받은 전체 에셋 추가 기능을 구현하다 결국 오류가 터지고 말았다...

오류를 고치기 위해 덕지덕지 쓴 코드를 보면서 과거의 나를 혼내고 싶었다 ㅠ

문제 원인은 배열안의 객체가 생성 될 때 마다 idx 값을 부여하였는데

idx 4번 값을 삭제하게되면

사진과 같은 상태가 된다.
사실 key값과 index 값이 안 맞는것도 거슬렸고,idx 값에 의존해서 터치이벤트와 스크롤 이벤트가 실행되도록 뷰어 페이지에 코드를 작성하였기에 idx 값을 변경할 필요가 있었다.
그래서 당시 삭제, 미리보기, 발행하기, 텍스트 등록하기를 실행 할 경우 재배치 함수가 작동하도록 코드를 작성하였는데...

 const relocationHandler = () => {
    if (contents[contents.length - 1]?.idx != contents.length) {
      // console.log("여기 안들어온건가");
      contents.map((content, index) => {
        reLocation.push({
          idx: index + 1,
          context: content.context,
          event: content.event,
        });
      });
      setEpisode({ ...episode, contents: reLocation });
    }
  };

위와 같은 방식으로 작성하였다.
저 코드도 useState는 불변성을 유지하기 위해 push 함수를 사용하면 안되는데 push를 사용해서 배열 자체를 직접 바꿔버려 많은 잘못들이 엮여 있는 코드이다..........

💡방법:

위의 문제점을 해결하기 위해서 2가지의 방법을 생각하였다.

1. idx 값은 따로 변경하지 않은 채로 사용

  • 그대로 넘어갈 경우 뷰어에서 idx값에 의존한 반복문을 돌릴 때 없는 숫자가 나올 시 넘기는 코드를 추가로 작성하는 방법

  • 팀원이 주신 아이디어인데 근본적인 해결 방법은 아니지만 프로젝트 당시에 사용했다면 기존 방법보다는 코드를 적게 작성하고 오류가 적었을 것이라 생각한다!

  • 하지만 문제의 완전한 해결책이 된다고 생각되진 않아 채택하진 않았다.

2. 객체의 고유성을 지키기 위해 idx 값을 uuid로 지정하고 반복문 설정시에만 array index 값을 사용하는 경우

⚽결과:

1. 텍스트 블록 삭제, 미리보기 시 오류 제거

2. 뷰어 idx 값에 의존하던 부분 객체 key 값을 반복문에 사용하도록 변경

3.퍼포먼스 점수 8점 상승


퍼포먼스 점수가 8점이나 올랐다!

상세 내용을 살펴보니 기존의 long main thread task가 6개 있었는데 2개로 줄여서 점수가 올라 간 것으로 확인 된다!
기분이 너무 좋다..! 얼른 다른 부분도 리팩토링해서 사이트 성능을 올리고 싶다!!!!!

profile
알고 싶은게 많은 front-end 개발자 입니다.

0개의 댓글