layout.tsx, page.tsx 개념 정리대상: Next.js 13+ App Router (
app/디렉터리 기반)
핵심: 폴더 구조가 곧 URL이며,page.tsx는 “페이지”,layout.tsx는 “공용 틀(프레임)”이다.
Next.js App Router에서는 app/ 디렉터리 아래의 폴더 구조가 URL 경로를 결정한다.
app/login/page.tsx → /loginapp/signin/page.tsx → /signinapp/admin/users/page.tsx → /admin/users즉, page.tsx 파일이 존재하는 폴더가 하나의 라우트(경로)이다.
page.tsx가 없으면 해당 경로는 페이지로 동작하지 않는다.
App Router에서는 모든 컴포넌트가 기본적으로 Server Component로 동작한다.
브라우저에서 다음 기능을 사용하려면 Client Component로 선언해야 한다.
useState)useEffect)useRouter)Client Component 선언 방법:
"use client";
page.tsx란?page.tsx는 특정 URL에서 실제로 렌더링되는 화면을 정의한다.
각 라우트 폴더에는 반드시 page.tsx가 존재해야 페이지로 인식된다.
app/
signin/
page.tsx
page.tsx에서 주로 하는 일layout.tsx란?layout.tsx는 해당 폴더(세그먼트) 아래 모든 페이지에 공통으로 적용되는 프레임(틀)이다.
한 번 정의하면, 그 하위의 모든 page.tsx는 이 레이아웃 안에서 렌더링된다.
app/
(auth)/
layout.tsx
signin/
page.tsx
verify-email/
page.tsx
layout.tsx에서 주로 하는 일두 파일의 역할 범위가 다르기 때문이다.
layout.tsx > 여러 페이지가 공유하는 공통 구조page.tsx > 해당 페이지 하나만을 위한 전용 배치layout.tsx
signin/page.tsx
이것이 정상적인 구조이며, App Router의 권장 패턴이다.
layout.tsx는 여러 개가 중첩될 수 있다App Router에서는 폴더마다 layout.tsx를 둘 수 있으며, 하위로 내려갈수록 레이아웃이 중첩 적용된다.
app/
layout.tsx # 사이트 전체 공통
(auth)/
layout.tsx # 인증 구간 공통
signin/
page.tsx
(dashboard)/
layout.tsx # 대시보드 구간 공통
e-wallet/
page.tsx
/signin 접근 시 실제 적용 구조app/layout.tsx
+ app/(auth)/layout.tsx
+ app/(auth)/signin/page.tsx
loading.tsx해당 라우트 또는 세그먼트가 로딩 중일 때 표시되는 UI이다.
app/signin/loading.tsx
error.tsx해당 라우트에서 에러가 발생했을 때 표시되는 UI이다.
대부분 Client Component로 작성
app/signin/error.tsx
not-found.tsx404(Not Found) 페이지를 정의한다.
app/not-found.tsx
(auth)처럼 괄호로 감싼 폴더는 URL 경로에 포함되지 않는다.
이 폴더는 구조와 레이아웃을 묶기 위한 용도이다.
app/(auth)/signin/page.tsx # 예시
/signin # 실제 URL
app/ 아래 폴더 구조로 결정된다.layout.tsx를 둔다.page.tsx가 담당한다.components/ 폴더 또는 같은 폴더 내 컴포넌트로 분리한다.app/
(auth)/
layout.tsx
signin/
page.tsx
forgot-password/
page.tsx
verify-email/
page.tsx
components/
AuthForm.tsx
(auth)/layout.tsx : 인증 페이지 공통 배경 및 센터링signin/page.tsx : 로그인 화면forgot-password/page.tsx : 비밀번호 재설정 화면AuthForm.tsx: 폼 로직 재사용page.tsx는 URL 하나에 대응하는 화면이다.layout.tsx는 해당 구간 페이지들이 공유하는 공용 틀이다."use client"가 있으면 Client Component이다.GraphQL 기반의 API 통신 [graphql.tsx 파일]