<week 1-1.사전 과제 리팩토링 기간 2일차, 본격 코드 리팩토링 시작>
리팩토링 방식
discord 와 vscode live-share 기능을 사용하여 팀원이 모두 함께 리팩토링이 적용된 코드를 처음부터 작성.
코드 작성 진행 순서
1) 디렉토리 분류
- 컴포넌트 : src/components
- 각종 함수와 hooks : src/utils
- 컴포넌트들을 렌더링할 페이지 : src/pages
- 각종 스타일 관련 src/styles
2) 스타일링은 styled-components를 활용, 디테일한 스타일은 우선 생략하고 기본 홈페이지인 LoginPage.jsx에 렌더링 할 컴포넌트들을 만들어서 레이아웃 구성.
3) 로그인 페이지 관련 디테일한 스타일링 진행. 팀원들이 각자 작성하였던 스타일링을 가져와 적용하고 다른 팀원들의 의견 취합해가면서 수정.
4) styled-components의 전역 스타일링 GlobalStyle에 프로젝트에 사용할 메인 컬러를 전역 변수로 선언하여 따로 import 하지 않고도 자유롭게 사용함.
5) 위와 같은 순서로 MainPage.jsx 및 하위 컴포넌트들 작성+스타일링.
6) json형식의 mock data를 가져오는 함수 getFeeds는 axios를 사용, 모듈 파일로 따로 분리.
7) getFeeds()로 가져온 mock data를 렌더링할 Feed 컴포넌트에 뿌리고 image.onLoad() 사용하여 이미지 로딩시 컴포넌트 렌더링 성공한 것 까지 확인 후 금일 일정 마무리.
협업 과정에서 발생한 이슈
1) 디렉토리와 컴포넌트 분리- 팀원들이 디렉토리를 분류한 방법은 공통되게 1차적으로는 기능별로 분리하고 -> '같은 페이지에 렌더링되는 컴포넌트끼리 2차 분리', '컴포넌트 별로 전부 쪼갬', '더이상 쪼개지 않음' 등 다양했다. 서로의 스타일이 많이 달라 1차적으로 기능별 디렉토리 분류까지는 좋았지만 다음 단계에서 컴포넌트 분리를 어떻게 할지에 대해 의견 충돌이 생겨 결론에 도달하기까지가 가장 오래 걸린 부분이다. 서로 컴포넌트 분리에 대해 토론 하다가 크게 두가지 옵션으로 좁혀졌고, 각자 점심시간 겸 휴식시간에 생각을 정리하여 돌아가며 각자의 의견을 피력 -> 다수결로 정했다.
2) 스타일링 방식 선택 -> styled-components 사용이 익숙하지 않은 팀원도 있었지만 프로젝트의 확장성을 생각하여 재사용 가능한 컴포넌트 제작을 위해 styled-components 라이브러리가 가장 적합하다는 의견 동조, 모르던 팀원분들도 코드 작성을 통해 해당 라이브러리를 접하고 싶다고 해서 사용하게 됨.
3) 메인컬러 사용 방법 -> 이 부분도 팀원마다의 취향차이가 두드러지게 나타났으나 여러 팀원의 메인 컬러 사용 방식을 각각 비교하여 import 부분이 방대해지는 것도 막고, 변수로 편하게 가져다 쓸수 있는 전역 변수를 사용하기로 결정.
4) image.onload 이벤트 핸들링 관련 -> FeedList라는 컴포넌트의 하위 컴포넌트인 Feed에 mock data를 뿌려 렌더링하는데, 이과정에서 Feed 컴포넌트에서 image.onload 속성을 사용하여 이미지가 로딩되면 Feed 컴포넌트가 렌더링되게 구현하였으나, 실제 웹사이트 실행시 이미지 로딩이 순차적으로 이루어지지 않아 첫번째 feed는 건너뛰고 두번째 feed가 먼저 렌더링 되는 현상이 보기에 좋지 않다고 판단 -> 상위 컴포넌트인 FeedList에 image.onload 속성을 적용해 FeedList 통째로 렌더링되게 변경 예정-?
아직 진행 못한 부분
협업하면서 새로 얻은 tip + 궁금한 부분 따로 찾아본 내용 정리
html 목록 태그인 ul,ol tag 사용시 직계 자식은 li만 사용한다. li는 3개이상일때 사용하는 것이 베스트 _ https://velog.io/@samkong/HTML-Tags 글 인용
(그 외 참고 사이트 : , https://okky.kr/article/1171779, https://library.gabia.com/contents/domain/4359/,
https://ui.toast.com/fe-guide/ko_HTMLCSS)
리액트 컴포넌트에서 props 전달시 props가 추후 추가될 것을 고려해 props.속성명으로 사용
커스텀 hooks 만드는 방법 - 나중에 읽어보기 https://leego.tistory.com/entry/React-Custom-hook%EC%9D%84-%EB%A7%8C%EB%93%A4%EA%B8%B0-%EC%A0%84%EC%97%90-%EA%B3%A0%EB%A0%A4%ED%95%B4%EC%95%BC-%ED%95%A0-%EA%B2%83%EB%93%A4, https://react.vlpt.us/basic/21-custom-hook.html
옵셔널 체이닝 - 작성 예정
수요일 세션 예습 - 특히 중요하다고 생각하는 부분
if : 어떤 조건이 참일때 실행될 코드 블럭{}을 가짐
else : 위와 같은 조건에서 거짓일때 실행될 코드 블럭{}을 가짐
★else if : 첫번째 조건이 거짓일때 새로운 조건을 걸고, 그 조건이 참일 때 실행될 코드 블럭을 가짐. => 이때의 else는 첫번째와 두번째 조건이 모두 거짓일 때 실행되게 됨.
스스로 작성한 메모를 보면 되는 것을.. else 코드는 if 조건이 만족하지 않으면 실행되는 부분이니 if 문에서 조건이 만족하지 않았을때 return값을 정의했다면 else 부분은 생략해도 무방하다고 한다.(원래도 else는 생략가능)
validation 코드 캡슐화 + 수정한 부분 작성 예정
+) 구글링 하면서 쭉 보니 클린 코드 작성시 if-else문을 최소한으로 사용하는 것을 지향하는듯(가독성 떨어지니까)