[Next.js] 4. 페이지 라우팅 설정하기

2025. 3. 18. 22:21·🌃 Next.js/🔜 next.js-study

- 앱라우터는 page router 와 다르게 page.tsx 파일만 페이지로 취급한다.

- 경로를 만들고싶으면 무조건 파일 먼저 만들기 !

 

- 동적 경로일 경우에도 [id] 파일 밑에 page.tsx 파일을 만들어줘야한다.

💭 App router 버전으로 다시 만들기

- App -> Search -> page.tsx 생성
- App router는 props로 쿼리의 값이 전달됨

- searchParams의 q 값만 쓸것이기 때문에 q?: string  q값은 string이며 없을 수도 있다고 타입명시 해주면 된다.

 

- id는 string 일수도있고 배열일 수도 있기때문에 타입은 {id: string | string[]}으로 정해주자
- [[...id]] 로 정하면 optional catch all segment로 book/123/1222 등 여러 url 경우 사용가능하다.

🔖 레이아웃 설정하기

레이아웃은 layout.tsx 파일을 만들면 된다

 

- 아래 새로운 layout.tsx를 생성하면 위에 생성된 layout.tsx와 중첩되어 적용되게 된다.

- layout.tsx는 {chlidren}를 명시해줘야 page.tsx가 적용될 수 있다.
{children}의 타입은 ReactNode로 정해주기

 

 

특정 페이지들에만 적용되는 레이아웃 파일을 만들어보자
(book 페이지를 제외한 search, page에 적용: Route group 사용

 

 

 

- Next.js에서 ()소괄호는 Route group을 의미한다. 경로상에 아무런 영향을 미치지 않는 폴더이므로
같은 레이아웃을 적용하고 싶은 페이지들을 옮기면 된다.

 


- layout.tsx를 page.tsx와 search에 같이 적용시키고 싶기 때문에 같은 폴더에 모은다

 

🔖 리액트 서버 컴포넌트 이해하기

 

 

React Server Component : 서버가 아닌 브라우저 측에서는 아예 실행되지 않는 컴포넌트

 

 

 

🔴 서버 컴포넌트 : 사전 렌더링을 진행할 때 딱 한번만 실행됨 - >  ` 상호작용이 필요없는 컴포넌트`


🟢 클라이언트 컴포넌트 : 사전 렌더링을 진행할때 , 하이드레이션 진행할때 총 2 번 실행됨 - ` 상호작용 필요`


-> Next.js 공식문서에서는 페이지의 대부분을 `서버 컴포넌트` 로 구성 할 것을 권장하며, `클라이언트 컴포넌트` 는 꼭 필요한 경우에만 사용할 것을 권장한다. 

 

 

-  Next.js 는 기본값이  `서버 컴포넌트` 이기 때문에 index의 page.tsx console창을 확인해보면  `서버측 콘솔에서만 출력` 되는것을 알수 있다.

 

- 클라이언트 컴포넌트로 사용하고 싶다면 use client를 위에 선언해주면 되는데, 이제 브라우저측에서 콘솔창이 출력되는 것을 볼 수 있다!

 

🔖 리액트 서버 컴포넌트 주의사항

 

 

 

추가로

1. 브라우저 측에서 실행되는 React Hooks(useState 등)와 이벤트 핸들러(onclick 등)은 서버 컴포넌트에 포함되면 안된다

2. 클라이언트 컴포넌트는 서버측, 클라이언트측 총 2번 실행되므로 서버측에서도 1 번 실행된다

3. 클라이언트 컴포넌트는 하이드레이션을 위해 2번 실행되어 서버 컴포넌트가 하이드레이션될 때 없는 코드라고 뜨게된다.

 

 

-  이때 next.js는 서버컴포넌트를 자동으로 클라이언트 컴포넌트로 변환시킨다.

 

 

 서버 컴포넌트로 사용하고 싶다면, 클라이언트 컴포넌트 안에  `{children}` 요소를 사용해주면 된다.

 

직렬화: 단순한 형태로 변화시키는것, 직렬화로 전달이 불가능하다 ~

 

🔖 네비게이팅

 

App router도 page router와 동일하게 Client Side Rendering방식으로 처리된다. 

 

 

Pre-Fetching(프리페칭) 

= JS Bundle 파일을 불러오는데 걸리는 시간을 줄여주기 위해, 데이터를 미리 불러오는 기능.


=>  App router 방식에는 서버컴포넌트가 추가돼서 방식이 약간 달라짐

 

 

 

 

🟢 JS Bundle : 클라언트 컴포넌트만 포함되어 있음. (서버 컴포넌트❌)
🔴 RSE Payload : 서버 컴포넌트를 실행한 결과물.

마지막에는 JS Bundle만 하이드레이션하고 RSC Payload과 합쳐서 페이지를 교체하게 된다. 

 

 

 

 

 

 

 

 

 

 

 

 

https://velog.io/@realeun243/Day-11-%EB%84%A4%EB%B9%84%EA%B2%8C%EC%9D%B4%ED%8C%85-UI-%EA%B5%AC%ED%98%84

 

'🌃 Next.js > 🔜 next.js-study' 카테고리의 다른 글

[Next.js] 6. 페이지 캐싱  (0) 2025.03.27
[Next.js] 5. 데이터패칭  (0) 2025.03.25
'🌃 Next.js/🔜 next.js-study' 카테고리의 다른 글
  • [Next.js] 6. 페이지 캐싱
  • [Next.js] 5. 데이터패칭
gprorogpfus
gprorogpfus
:- >
  • gprorogpfus
    gpfusdldks
    gprorogpfus
  • 전체
    오늘
    어제
    • 분류 전체보기 (55)
      • 🎭JavaScript (2)
      • 👚 CSS (1)
      • ⚛️ React (13)
      • 🌃 Next.js (5)
        • 🔜 next.js-study (3)
      • 🥏TypeScript (10)
      • 🏴알고리즘 (2)
      • 🌴트러블슈팅 (3)
      • ⛲ 프로젝트 (6)
        • 👖gproro-shop-app (8)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
    • 글쓰기
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    react
    TypeScript
    GIT
    JavaScript
    Redux
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.2
gprorogpfus
[Next.js] 4. 페이지 라우팅 설정하기
상단으로

티스토리툴바