inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

한 입 크기로 잘라먹는 Next.js

2.8) 페이지별 레이아웃 설정하기

page 컴포넌트명을 동일하게 Page 로 짓는 이유가 있나요?

해결된 질문

89

Codingbear

작성한 질문수 18

1

안녕하세요.

layout 컴포넌트는 레이아웃 용도에 맞게 컴포넌트 함수명을 짓는데..

page 컴포넌트는 일관되게 Page 로 컴포넌트 명을 사용하는 이유가 있나요?
page 컴포넌트도 IndexPage, SearchPage, BookDetailPage 식으로 의미를 부여했으면 합니다.

react typescript next.js 카카오공채-개발

답변 2

1

이정환 Winterlood

안녕하세요 이정환입니다.

컴포넌트의 이름이나 파일명의 규칙은 어디까지나 팀이나 개인의 스타일에 따라 정해지는 것이므로 정답은 없습니다. 따라서 원하신다면 그렇게 명명하셔도 상관없습니다.

 

강의에서 이렇게 명명하지 않은 이유는 여러가지 인데요

첫째로는 페이지 라우터에서는 파일의 이름과 경로 자체가 이미 페이지의 역할과 경로를 명확히 설명해주기 때문입니다. 예를 들어, pages/index.tsx는 루트 경로(/)를, pages/search.tsx는 /search 경로를, pages/book/[id].tsx는 /book/:id 경로를 담당합니다. 즉, 파일의 위치와 이름이 이미 라우트를 표현하기 때문에, 내부 함수 이름까지 SearchPage나 BookDetailPage로 구체화하는 것은 중복적인 표현이 됩니다.

 

또한 Next.js는 내부적으로 페이지를 인식할 때 파일의 기본 내보내기(default export)만 사용하기 때문에, 함수 이름 자체에는 아무런 제약이나 의미가 없습니다. 다시 말해, 함수 이름을 Page로 하든 SearchPage로 하든 실제 동작에는 차이가 없습니다. 이런 이유로 공식 예제나 대부분의 프로젝트에서는 페이지 컴포넌트를 단순히 function Page() 혹은 export default function Page()로 통일하는 방식을 사용합니다. 이렇게 하면 일관성이 유지되고, 파일 경로만 봐도 어떤 페이지인지 쉽게 파악할 수 있어 코드 가독성도 높아집니다.

 

반면 layout의 경우에는 상황이 다릅니다. layout은 여러 페이지에서 공통으로 사용되거나 중첩되어 적용되기 때문에, RootLayout, DashboardLayout, AuthLayout처럼 명시적인 이름을 붙이는 것이 유지보수에 도움이 됩니다. 그러나 page 컴포넌트는 파일 구조상 고유한 위치를 가지므로, 중복이나 혼동의 여지가 없고 단순히 Page 하나로 통일하는 것이 가장 간결하고 자연스러운 패턴입니다.

0

Codingbear

답변 감사합니다.

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다. Coding bear님, 질문 주셔서 감사합니다!

리액트와 넥스트.js 같이 컴포넌트 기반 프레임워크를 사용하면서 컨벤션은 일관성을 잡아주는 중요한 요소입니다. 질문하신 page 컴포넌트와 관련된 파일 및 네이밍 규칙에 대해 설명드리겠습니다.

Page라는 이름으로 일관되게 사용하는가?

  1. 일관성과 유지보수: 프로젝트 전반에서 컴포넌트가 특정한 역할을 한다는 것을 일관성 있게 보여주기 위함입니다. Page는 해당 컴포넌트가 페이지 역할을 한다는 걸 명확히 해주기 때문에 다른 개발자나 팀원이 쉽게 프로젝트 구조를 이해할 수 있습니다.

  2. 파일 기반 라우팅과의 조화: 넥스트.js는 파일 기반 라우팅을 지원합니다. 이러한 라우팅 구조와 맞추기 위해 페이지 파일 이름과 컴포넌트 이름도 일관되게 유지하는 것이 도움이 됩니다. 예를 들어 index.tsx 파일 안의 컴포넌트 이름을 IndexPage 대신 Page로 두면, 모든 페이지 파일에서 일관성을 유지하고, 컴포넌트를 좀 더 쉽게 찾고 식별하기 쉽습니다.

  3. 단순화된 초기 설정: 넥스트.js의 경우 디렉토리 구조 자체가 라우팅을 나타내는 경우가 많아 파일 이름만 보고도 해당 컴포넌트가 어떤 페이지를 나타내는지 이미 알 수 있는 경우가 많습니다. 따라서 굳이 파일 내부의 컴포넌트 이름을 다르게 지어야 할 필요성이 줄어듭니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 비슷한 질문이 기존에 있던 경험을 참조하면, “컴포넌트,페이지 파일명 기준” 포스트가 도움이 될 수 있습니다.

현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

풀라우트캐시 동작 원리에서 데이터 캐시 관련 질문

0

32

2

next.js 프로젝트

0

33

1

Next.js + Tanstack Query BFF 구조 질문

0

34

2

Next.js 사전렌더링 이해하기 부분

0

39

2

모달 관련 질문

0

45

3

렌더링 관련 질문

0

81

2

중복으로 하나의 api를 요청할 때 캐싱 옵션 통일화

0

64

2

라우트 세그먼트 옵션 강좌 노트에 사소한 제보 남깁니다.

0

66

2

SSR시 context에 params말고 query를 사용하면 안되나요?

0

75

2

npx prisma db push 시 에러가 뜹니다.

0

96

3

vercel 배포를 실패하였습니다.

0

105

3

Image 컴포넌트 사용시 브라우저 콘솔에 경고는 왜 뜨는걸까요?

0

60

2

getServerSideProps 함수와 SSR의 관계

0

79

6

없는 페이지인데 풀라우트캐시로 저장이 되는 이유가 궁금합니다

0

61

2

실제 프로젝트에서 SSR 사용에 관해서 질문드립니다.

0

118

2

일반적인 nextjs project architecture에 대하여..

0

93

2

2.14 Search에서 작성한건 static이긴하지만 CSR이 아닌가요?

0

74

2

배포 시 오류 발생

0

91

2

백엔드 서버 오류납니다.

0

86

2

취약점 제거시 nestjs 버전 문제가 생길까요?

0

94

1

eslint.config.mjs 내 rules 어떻게 설정 하나요?

0

109

1

[book]/[id]/page.tsx 모달 띄울 때 성능 하락 현상은 ReviewList를 불러오면서 발생하는 문제 같습니다.

0

63

2

빨간줄 설정

0

80

2

익스텐션 질문

0

61

1