geonhwiii 님의 상세페이지[7팀 정건휘] Chapter 2-2. 디자인 패턴과 함수형 프로그래밍

과제 링크

https://geonhwiii.github.io/front_6th_chapter2-2/

과제의 핵심취지

  • React의 hook 이해하기
  • 함수형 프로그래밍에 대한 이해
  • 액션과 순수함수의 분리

과제에서 꼭 알아가길 바라는 점

  • 엔티티를 다루는 상태와 그렇지 않은 상태 - cart, isCartFull vs isShowPopup
  • 엔티티를 다루는 컴포넌트와 훅 - CartItemView, useCart(), useProduct()
  • 엔티티를 다루지 않는 컴포넌트와 훅 - Button, useRoute, useEvent 등
  • 엔티티를 다루는 함수와 그렇지 않은 함수 - calculateCartTotal(cart) vs capaitalize(str)

기본과제

  • Component에서 비즈니스 로직을 분리하기

  • 비즈니스 로직에서 특정 엔티티만 다루는 계산을 분리하기

  • 뷰데이터와 엔티티데이터의 분리에 대한 이해

  • entities -> features -> UI 계층에 대한 이해

  • Component에서 사용되는 Data가 아닌 로직들은 hook으로 옮겨졌나요?

  • 주어진 hook의 책임에 맞도록 코드가 분리가 되었나요?

  • 계산함수는 순수함수로 작성이 되었나요?

  • Component에서 사용되는 Data가 아닌 로직들은 hook으로 옮겨졌나요?

  • 주어진 hook의 책임에 맞도록 코드가 분리가 되었나요?

  • 계산함수는 순수함수로 작성이 되었나요?

  • 특정 Entitiy만 다루는 함수는 분리되어 있나요?

  • 특정 Entitiy만 다루는 Component와 UI를 다루는 Component는 분리되어 있나요?

  • 데이터 흐름에 맞는 계층구조를 이루고 의존성이 맞게 작성이 되었나요?

심화과제

  • 이번 심화과제는 Context나 Jotai를 사용해서 Props drilling을 없애는 것입니다.

  • 어떤 props는 남겨야 하는지, 어떤 props는 제거해야 하는지에 대한 기준을 세워보세요.

  • Context나 Jotai를 사용하여 상태를 관리하는 방법을 익히고, 이를 통해 컴포넌트 간의 데이터 전달을 효율적으로 처리할 수 있습니다.

  • Context나 Jotai를 사용해서 전역상태관리를 구축했나요?

  • 전역상태관리를 통해 domain custom hook을 적절하게 리팩토링 했나요?

  • 도메인 컴포넌트에 도메인 props는 남기고 props drilling을 유발하는 불필요한 props는 잘 제거했나요?

  • 전체적으로 분리와 재조립이 더 수월해진 결합도가 낮아진 코드가 되었나요?

과제 셀프회고

고민 Point?

  • 주제가 함수형 프로그래밍이었는데, 고민할 시간이 없었습니다...!

  • AI를 안쓰니까 일단 리팩토링 시간이 상대적으로 오래걸렸습니다.

  • 목표는 FSD를 떠나서, entities와 같은 각 모델들을 잘 구분해서 분리하는 것에 집중하였습니다.

  • 처음에 분리하다보니 무작정 hooks로 분리하는 자신을 발견하게 되었고,

  • 정신차리고 예시를 참고해서 기능별 entities에 집중해서 model 분리에 집중하였습니다

느낀점 및 리뷰 요청

  • 과제다보니 client에서 상태를 다 다루니까, server에서 데이터를 다루는게 코드적으로 이점이 많다는걸 알게되었습니다.
  • 의존성 관계에 따라 Provider를 아래로 내리는 방식을 사용했습니다.
    export function AppProvider({ children }: AppProviderProps) {
        return (
          <NotificationProvider>
            <ProductProvider>
              <CouponProvider>
                <CartProvider>{children}</CartProvider>
              </CouponProvider>
            </ProductProvider>
          </NotificationProvider>
        );
      }
  • Flow상으로 현업에서도 자주 이런방식으로 구현이 되는데, 아쉬운 부분은 각 Provider가 상위 Provider를 참조하다보니 좋은 구조라고는 생각은 안됩니다.
  • 이런 부분을 개선하기 위해 zustand, jotai등의 상태 관리 라이브러리를 사용하거나, 내부에서 context를 직접 사용하지 않고 의존성을 주입하는 것이 좋을 것이라 생각은 듭니다.

[질문] Context API를 사용할 때 보통 이런 구조로 Provider를 연계해서 사용하는 경우가 자주 나오는데, 각 Provider가 내부적으로 외부 Context를 덜 참조되게 구성할 수 있을까요?

과제 피드백

안녕하세요 건휘님! 5주차 과제 잘 진행해주셨네요 ㅎㅎ 다만 과제 회고가 현 과제에서 무척 중요한 부분이기 때문에 늦더라도, 꼭 과제 PR이 아니여도, 개인적으로 회고를 해보시면 좋겠어요!

고생하셨습니다!