FrontEnd/Next.js

[ Next.js ] Router

ChatjihoiPT 2025. 4. 21. 10:01

1. 라우팅 ( Client-side routing )

사용자의 요청(URL 경로)에 따라 어떤 화면 또는 기능을 보여줄지 결정하는 기술

- 사용자가 페이지를 이동해도 전체 페이지를 새로고침하지 않고, 일부만 바꿔주는 방식

- 대표적으로 React, Vue, Angular


2. path='*'

정확한  path 요청이 들어오면 해당  Component 로 분기하고,
그 외는 모두 처리하는 기법
특정 URL 경로에 해당하는 컴포넌트를 매칭하는 라우팅 주소
<Route path="/home" element={<Home />} />
  • 사용자가 /home 주소로 접속하면 <Home /> 컴포넌트를 렌더링함
  • path="/": 루트 경로 (홈페이지)
  • path="/about": About 페이지
  • path="/user/:id": 동적 경로

3. 동적 파라미터 

<Route path="/user/:id" element={<User />} />
  • /user/123 요청이 들어오면 <User /> 컴포넌트가 뜨고, id=123으로 받을 수 있음
  • React Router v6 기준으로 useParams()로 받아옴
const { id } = useParams();

4. 중첩 라우팅

하나의 페이지 내에 또 다른 라우트가 중첩되어 렌더링되는 구조

- 부모 컴포넌트 안에 자식 컴포넌트를 라우팅

 

< SSR vs CSR >

1. CSR (Client-Side Rendering)

초기 HTML 파일이 로드될 때 내용이 거의 비어 있고,

이후 JavaScript가 실행되면서 React가 컴포넌트를 렌더링하여 화면에 표시하는 방식

 

2. CSR의 장점

1. 브라우저에서 View 렌더링하기 때문에 서버 트래픽을 감소시키고, 사용자에게 더 빠른 인터렉션을 제공

2. 새로고침이 발생하지 않아 사용자에게 네이티브 앱과 비슷한 경험을 제공

 

3. CSR의 문제점

1. 첫 페이지 로딩 속도가 SSR보다 느리다 첫 요청 시 전체 페이지에 대한 모든 파일을 다운 받은 후에 렌더링하기 때문.

2. JS를 무시하면 화면이 안보인다.

3. SEO(Search Engine Optimization)가 웹 사이트에 대한 데이터를 수집하지 못하기 때문에 CSR로 작성된 페이지는 검색결과에서 제외될 수 있으므로 별도의 보완 작 업이 필요하다.(ex sitemap 문서)

단, 구글은 검색엔진에 자바스크립트 엔진이 내장되어 있다.

 

4. public에서 동적인 것 

 

 

5. next는 mapping 필요없이 단순하게 경로만 주면 해당 경로 path가 됨

 

6. App에 들어가는 경로 파일 이름은 다 소문자~!

 

7. path variable 

 

8. [isbn]

- 동적 경로

isbn props를 직접 받고 싶어서 바로 type 지정

import React from "react";

const BookDetail = ({ params: { isbn } }: { params: { isbn: string } }) => {
  console.log("isbn:", isbn);
  return (
    <div>
      <h1>Book Detail: {isbn}</h1>
    </div>
  );
};

export default BookDetail;
-> next/link
link로 바로 전달됨

 

9. csr

JS를 꺼놨기때문에 렌더링이 안 됨

use로 시작하는 건 다 import 위에 "use client" 붙이기

Debugger JS


5.  모던 산세리프(Sans-serif) 폰트

디지털 화면에서의 가독성을 고려해서 설계된 폰트로,

구글, 애플, 마이크로소프트 디자인 가이드라인에 모두 잘 어울려서 디자이너와 개발자 모두가 애용

 

✨ Code 1. inter 단일 폰트만 적용

<html lang="en"> <body className={inter.className}> {children} </body> </html>

 

특징

  • inter 폰트 하나만 적용됨
  • 별도 레이아웃 구성 없음
  • 공통 UI(헤더, 네비게이션 등) 없음 → 정적이고 단순

사용 예시

  • 빠르게 MVP 만들 때
  • 정적 페이지 기반의 단순 프로젝트

✨ Code 2. 공통 레이아웃 + 다중 폰트 + CSS 모듈

<html lang="en"> 
    <body className={`${geistSans.variable} ${geistMono.variable}`}> 
   	 <div className={Styles.main}> <Navigation /> {children} </div> 
    </body>
</html>

 

특징

  • geistSans, geistMono 두 가지 폰트 모두 body에 적용
  • Navigation 컴포넌트 항상 보여짐 → 페이지 공통 요소
  • Styles.main으로 전체 레이아웃 스타일링 적용

사용 예시

  • 블로그, 대시보드, 다중 페이지 앱
  • 모든 페이지에서 Navigation이 고정되어야 하는 경우

📌 결론

상황추천 코드
폰트 하나, 간단한 구성 코드 1 (inter)
다중 폰트 + 공통 네비 + CSS 모듈 사용 코드 2 (geistSans + Navigation)

6. 경로 


1. 상대경로 방식

 

- 복잡하고 지저분

import Navigation from '../../../components/common/Navigation';

 

2. 절대경로 방식

 

- 깔끔한 스타일

@는 보통 src 폴더를 가리키도록 설정해놓음 → @ = src

import Navigation from '@/components/common/Navigation';

'FrontEnd > Next.js' 카테고리의 다른 글

[ Next.js ] Book 기능사항 구현하기  (4) 2025.04.22
[ Next.js ] Axios  (1) 2025.04.17