Skip to content

Conversation

@hammoooo
Copy link

@hammoooo hammoooo commented Nov 8, 2025

링크: https://next-netflix-22nd-eosin.vercel.app/



협업 과정

카톡을 통해서 역할을 조율하고 이슈를 공유하였습니다.

뿌듯한 점: Branch를 페이지 단위로 나누어서 개발을 진행하였는데, 이 과정에서 시행착오가 많았지만 값진 경험이었고 보다 더 실무적으로 개발할 수 있어 좋았습니다.

아쉬운 점: PR이나 이슈를 제대로 적용하지 못한 점이 아쉬웠습니다



Research Question
5->6주차 과제 진행하면서 중점적으로 고려한 사항에 대해 작성해 주세요.

무헌:
저는 이번 6주차에서 상세 페이지를 구현하게 되었습니다. 

처음에 따로 상세페이지 API를 만들어서 파라미터로 해당 영화의 ID 값을 넘겨주어 정보들을 받아와야 한다고 생각했습니다
그러나 6주 차의 예시 템플릿을 보고 search param으로 필요한 정보들을 전달하고 있다는 것을 발견하였습니다.
따라서 추가적인 API요청 없이 기존에 받아온 DATA를 이용해 클릭 시 링크 형태로 넘겨주어 상세페이지를 구현할 수 있었습니다.


용섭:
검색페이지에서 실제로 우리는 끝까지 내려가야만 스크롤이 되지 않기에 UX 관점에서 200px전에 다음 페이지 로딩이 되도록 했습니다. useInfiniteQuery를 사용해 getNextPageParam으로 다음 페이지 계산하고, hasNextPage, isFetchingNextPage로 중복 요청을 방지했습니다. 또한 UX관점에서 자연스러움을 주기 위해 로딩 중 스켈레톤UI를 적용했습니다.



최종폴더구조

├── app
│   ├── api
│   │   └── tmdb
│   │       └── [...path]
│   │           └── route.ts
│   ├── detail
│   │   └── [id]
│   │       └── page.tsx
│   ├── favicon.ico
│   ├── globals.css
│   ├── home
│   │   └── page.tsx
│   ├── layout.tsx
│   ├── page.tsx
│   ├── providers.tsx
│   └── search
│       └── page.tsx
├── components
│   └── features
│       ├── Detail.tsx
│       ├── Home
│       │   ├── Continue.tsx
│       │   ├── Home.tsx
│       │   ├── Popular.tsx
│       │   ├── Previews.tsx
│       │   └── Thumb.tsx
│       ├── landingPage.tsx
│       ├── NavBar.tsx
│       └── TabBar.tsx
├── eslint.config.mjs
├── hooks
│   ├── usePopularMovies.ts
│   ├── useSearchMovies.ts
│   ├── useTopRatedMovies.ts
│   └── useTrendingMoviesDay.ts
├── images
│   ├── info.svg
│   ├── landingPage
│   │   ├── NetflixLogo.svg
│   │   └── NetflixLogoMotion.json
│   ├── navBar
│   │   └── netflixIcon.svg
│   ├── plus.svg
│   ├── searchPage
│   │   ├── delete.svg
│   │   ├── play.svg
│   │   └── search.svg
│   ├── tabBar
│   │   ├── burger.svg
│   │   ├── download.svg
│   │   ├── home.svg
│   │   ├── play.svg
│   │   └── search.svg
│   └── top10.svg
├── lib
│   ├── tmdbImage.ts
│   └── tmdbServer.ts
├── next-env.d.ts
├── next.config.ts
├── package-lock.json
├── package.json
├── postcss.config.mjs
├── public
│   ├── fallback.svg
│   ├── file.svg
│   ├── globe.svg
│   ├── next.svg
│   ├── vercel.svg
│   └── window.svg
├── README.md
├── structure.txt
├── tsconfig.json
├── types
│   └── tmdb.ts
└── unused
    └── TrendingMovies.tsx

@codus02
Copy link

codus02 commented Nov 9, 2025

고생하셨습니다!! 후기에서 말씀하신것처럼 폴더 구조를 많이 고민한것같아보입니다!!

Copy link

Choose a reason for hiding this comment

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

그냥 개인적 궁금인데 prettier 설정도 두분이 협의하셨나요?? 다른팀은 어떤지 궁금해서요..

Copy link

Choose a reason for hiding this comment

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

안쓰는 파일은 정리해도 좋을것같습니다


return (
<div className="min-h-screen bg-black pt-[44px]">
{/* 검색창 */}
Copy link

Choose a reason for hiding this comment

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

image 화면을 아래로 스크롤하면 현재 검색창이 상단에 고정되어서 작품목록과 겹쳐 나오는데 스크롤하면 위로 올라가 안보이게 해도 좋을것같습니다

},
{
threshold: 0,
rootMargin: "200px", // 화면 하단 200px 전에 미리 로드
Copy link

Choose a reason for hiding this comment

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

그리고 무한스크롤이 작동 안하고있는것같습니다

}
return undefined;
},
//staleTime: 1000 * 60 * 5, // 5분간 캐시 유지
Copy link

Choose a reason for hiding this comment

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

5분간 캐시 유지되게 한점 좋은것같습니다 !! 이런 생각은 안해봤는데 좋은 아이디어같습니다

Copy link

Choose a reason for hiding this comment

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

화면 전체 크기를 설정하지 않고 축소하면 계속 축소되도록 의도하신건가요?? 개인적으로는 화면 크기가 고정되어있는것도 좋을것같습니다

onChange={(e) => setQuery(e.target.value)}
autoFocus
/>
<button onClick={() => setQuery("")} className="p-1 shrink-0">
Copy link

Choose a reason for hiding this comment

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

검색창에서 x 버튼을 누르면 입력 내용이 삭제되는 기능이 있으니까 호버 기능도 넣었어도 좋았을것 같습니다!!

@@ -0,0 +1,25 @@
import Previews from "../../components/features/Home/Previews";

Choose a reason for hiding this comment

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

절대경로 일관되게 적용하시는게 더 좋을 거 같습니다..!

.filter(Boolean)
.join(" ")}
/>
<span className={`text-[8.2px] ${active ? "text-white" : "text-[#8c8787]"}`}>

Choose a reason for hiding this comment

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

현재 서치, 커밍순,.. 등 다른 버튼을 눌러도 홈 아이콘만 흰색입니다..! 이 부분 수정 필요할 거 같습니
스크린샷 2025-11-10 124008

const url = `/api/tmdb/movie/popular?language=${encodeURIComponent(language)}`;
const res = await fetch(url, { cache: "no-store" });
if (!res.ok) throw new Error(`TMDB error: ${res.status}`);
return res.json();

Choose a reason for hiding this comment

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

axios 적용 추천 드려요!

Choose a reason for hiding this comment

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

TabBar 파일 위치가 components 안에 Home폴더 밖에 있는게 더 자연스러울 거 같습니다.

Choose a reason for hiding this comment

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

스크린샷 2025-11-10 153903 comming-soon페이지, download 페이지 등이 없는데 라우티잉 되어있어서 이런 오류들이 나는거 같아요

key={i}
className="flex items-center bg-[#424242] mb-[3px] h-[76px] animate-pulse"
/>
))

Choose a reason for hiding this comment

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

검석어가 없을 때에는 무한스크롤이 작동이 안하는거 같은데 의도하신건가요..?? 아니라면 수정이 필요해 보입니다

Copy link

@sungahChooo sungahChooo left a comment

Choose a reason for hiding this comment

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

안녕하세요! 코드 잘 봤습니다 과제하느라 수고 정말 많으셨어요 !!!!👏🏻

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants