Skip to content

Conversation

@kwonjin2
Copy link
Collaborator

@kwonjin2 kwonjin2 commented Apr 10, 2025

요구사항

  • Github에 PR(Pull Request)을 만들어서 미션을 제출합니다.
  • 피그마 디자인에 맞게 페이지를 만들어 주세요.
  • React를 사용합니다

체크리스트 기본

중고마켓

  • 중고마켓 페이지 주소는 “/items” 입니다.
  • 페이지 주소가 “/items” 일때 상단네비게이션바의 '중고마켓' 버튼의 색상은 “3692FF”입니다.
  • 상단 네비게이션 바는 이전 미션에서 구현한 랜딩 페이지와 동일한 스타일로 만들어 주세요.
  • 상품 데이터 정보는 https://panda-market-api.vercel.app/docs/#/ 에 명세된 GET 메소드 “/products” 를 사용해주세요.
  • '상품 등록하기' 버튼을 누르면 “/additem” 로 이동합니다. ( 빈 페이지 )
  • 전체 상품에서 드롭 다운으로 “최신 순” 또는 “좋아요 순”을 선택해서 정렬을 할 수 있습니다.

반응형

  • 베스트 상품
  • Desktop : 4개 보이기
  • Tablet : 2개 보이기
  • Mobile : 1개 보이기
  • 전체 상품
  • Desktop : 12개 보이기
  • Tablet : 6개 보이기
  • Mobile : 4개 보이기

체크리스트 [심화]

  • 페이지 네이션 기능을 구현합니다.

주요 변경사항

  • 스프린트 1~5까지 리액트로 변경했습니다.

멘토에게

  1. 컴포넌트 분리 관련
    Items 페이지의 컴포넌트가 너무 많이 쪼개진 것 같다는 생각이 듭니다. 구현하면서도 헷갈릴 때가 많았어요..
    → 가독성, 예측 가능성, 응집도/결합도 관점에서 적절하게 쪼갠 건지 피드백 부탁드립니다.
    → 굳이 분리하지 않아도 되는 컴포넌트가 있다면 지적해주시면 감사하겠습니다!

  2. 네이밍 관련
    일부 컴포넌트나 함수 네이밍이 애매하다고 느껴집니다.
    → 헷갈릴 수 있는 네이밍, 더 명확하게 개선할 수 있는 네이밍이 있다면 지적해주시면 감사하겠습니다.

  3. ErrorBoundary 사용
    ErrorBoundary를 적용해보긴 했는데, 제가 적용한 방식이 맞는지 확신이 없습니다.
    → 실무에서 흔히 사용하는 구조인지, 보완할 점이 있는지도 궁금합니다.
    → ErrorBoundary가 만능이 아니라는 이야기도 블로그에서 봤던 것 같아서, 적용 위치나 방식에 문제가 있을지도 고민이 됩니다.

  4. 상태관리 관련
    현재는 Context API나 상태관리 라이브러리를 사용하지 않았습니다.
    → 제 코드에서 Context API를 사용했으면 더 좋았을 부분이 있었을까요?
    → 상태관리 라이브러리를 적용했어야 했던 부분이 있다면 알려주시면 감사하겠습니다.

  5. Tailwind CSS 관련
    처음 Tailwind를 적용해봤는데 아직 tailwind.config.js 활용이 어렵습니다.
    → 효율적으로 사용하는 팁이나, 실무에서 많이 쓰는 설정 방식이 있다면 알려주세요!
    → 더 잘 사용하는 방법이 있다면 공유 부탁드립니다.

기초 프로젝트가 끝나고 나태해졌다가 시간에 쫒겨서 급하게 진행하다보니 아쉬운 부분이 많습니다.
→ 앞으로 계속 리팩토링 하면서 개선할 예정인데, 우선 지금 구조나 흐름에서 가장 아쉬운 부분이나 우선적으로 고치면 좋을 점이 있다면 알려주세요!

@kwonjin2 kwonjin2 changed the title React 최권진 [최권진] Sprint5 Apr 10, 2025
@kwonjin2 kwonjin2 requested a review from dongqui April 10, 2025 11:16
@kwonjin2 kwonjin2 self-assigned this Apr 10, 2025
@kwonjin2 kwonjin2 added the 매운맛🔥 뒤는 없습니다. 그냥 필터 없이 말해주세요. 책임은 제가 집니다. label Apr 10, 2025
Copy link
Collaborator

@dongqui dongqui left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

권진님..! 그동안 많은 성취가 있으셨군요!? 👍 👍
기본적인 리액트는 익숙하신 것 같습니다.
이제는 재사용 가능한 공통 컴포넌트를 만들어보는 연습을 해보시면 좋을 거 같아요 :)
조금 더 깊이 있게 도전하고 싶으시다면, Select 같은 컴포넌트에 Compound Pattern을 적용해 보시는 것도 좋습니다~!

컴포넌트 분리 관련
Items 페이지의 컴포넌트가 너무 많이 쪼개진 것 같다는 생각이 듭니다. 구현하면서도 헷갈릴 때가 많았어요..
→ 가독성, 예측 가능성, 응집도/결합도 관점에서 적절하게 쪼갠 건지 피드백 부탁드립니다.
→ 굳이 분리하지 않아도 되는 컴포넌트가 있다면 지적해주시면 감사하겠습니다!

-> 저는 컴포넌트는 적절하게 잘 쪼개셨다고 생각합니다. :)
JSX도 깔끔하고, 기능에 맞게 유의미하게 나뉜 것 같아요. 다만 헷갈리다고 느끼셨다면, 상태 문제일 것 같습니다.
useAllProductsController의 경우 너무 과하게 추상화됐다고 생각합니다. 어떤 값들인지, 어떤 값들이 어떻게 쓰이는지 모두 가려져 있고, 코드를 파악하기 위해 한 뎁스 더 들어가야 합니다.

추상화에 정답이 있는 것은 아닙니다. 상황에 맞게, 혹은 팀 문화나 개인의 취향에 따라 많이 달라지긴 합니다.
다만 모든 것을 일단 치워버리는 것은 커스텀 훅의 대표적인 안티 패턴 중 하나입니다. 🤣 (의견 정도로 받아주세요! 틀렸다는 게 아니라, 주의할 점입니다~!)

네이밍 관련
일부 컴포넌트나 함수 네이밍이 애매하다고 느껴집니다.
→ 헷갈릴 수 있는 네이밍, 더 명확하게 개선할 수 있는 네이밍이 있다면 지적해주시면 감사하겠습니다.

-> 어떤 부분이 애매하셨나요? 🤣 저는 전반적으로 편안하게 봤습니다!

ErrorBoundary 사용
ErrorBoundary를 적용해보긴 했는데, 제가 적용한 방식이 맞는지 확신이 없습니다.
→ 실무에서 흔히 사용하는 구조인지, 보완할 점이 있는지도 궁금합니다.
→ ErrorBoundary가 만능이 아니라는 이야기도 블로그에서 봤던 것 같아서, 적용 위치나 방식에 문제가 있을지도 고민이 됩니다.

->
기본적으로는 잘 활용하셨습니다. :)
적용 범위나 방식은 서비스에서 추구하는 UI나 정책 등에 따라 달라질 수 있습니다.

<ErrorBoundary>
  <BestProducts />
  <AllProducts />
</ErrorBoundary>

지금은 페이지 메인 부분 대부분을 감싸고 있는데, 이럴 경우 BestProducts에서만 에러가 발생해도 AllProducts에도 영향을 주게 되죠.
또한 페이지 이동을 시키기 때문에, 사용자 입장에서는 에러를 핸들링하기 불편할 수 있습니다. :)
에러 바운더리의 범위를 좁히거나, 페이지 이동이 아닌 다른 방법으로 핸들링하는 방식으로 대응할 수 있겠죠!
(이건 기술적이라기보다는 서비스 정책에 따라 달라질 수 있어요.)

또 추가적으로 해보시면 좋은 건, BestProducts에 이미 에러 관련 로직과 UI가 포함되어 있는 것으로 보입니다.
이미 ErrorMessage 컴포넌트를 만들어 두셨는데, 해당 컴포넌트를 fallback으로 활용하실 수 있어요.

<ErrorBoundary fallback={<ErrorMessage />}>
  <BestProducts />
</ErrorBoundary>

이렇게 하면 BestProducts 컴포넌트는 에러와 관련된 로직을 신경 쓰지 않아도 되겠죠!
(이렇게 하려면 지금처럼 try-catch로 에러를 잡는 대신, 에러를 ErrorBoundary로 보내야 합니다.)
react-error-boundary를 활용하면 좀 더 쉽게 구현 가능합니다!

상태관리 관련
현재는 Context API나 상태관리 라이브러리를 사용하지 않았습니다.
→ 제 코드에서 Context API를 사용했으면 더 좋았을 부분이 있었을까요?
→ 상태관리 라이브러리를 적용했어야 했던 부분이 있다면 알려주시면 감사하겠습니다.

->아직은 프로젝트가 복잡하지 않아서 굳이 안 써도 될 것 같습니다. :)

Tailwind CSS 관련
처음 Tailwind를 적용해봤는데 아직 tailwind.config.js 활용이 어렵습니다.
→ 효율적으로 사용하는 팁이나, 실무에서 많이 쓰는 설정 방식이 있다면 알려주세요!
→ 더 잘 사용하는 방법이 있다면 공유 부탁드립니다.

특별한 방법이 따로 있지는 않습니다. (혹시 찾으면 공유드릴게요. 🤣)
지금은 아직 디자인 토큰이 많지 않아서 tailwind.config.js를 적극적으로 확장할 필요는 커 보이지 않아요.
굳이 추가한다면 colors 정도 확장하거나, Arbitrary values 사용을 줄이는 방향 정도가 있을 것 같습니다.

다만 지금 설정이 복잡하게 느껴지셨다면, 그 이유는 오히려 컴포넌트 단위의 스타일 관리 때문일 수도 있어요.
이럴 땐 먼저 UI를 React 컴포넌트 단위로 먼저 구현해 보시고, 꼭 재사용 해야하는 스타일만 css단에서 만드시면 좋을 거 같습니다! 또, config에 모든 스타일을 넣기보다는, @apply와 함께 적절히 역할을 나누는 게 유지보수에 더 좋습니다. :)

@dongqui dongqui merged commit 40f45cf into codeit-bootcamp-frontend:React-최권진 Apr 11, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

매운맛🔥 뒤는 없습니다. 그냥 필터 없이 말해주세요. 책임은 제가 집니다.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants