아랄라랄라
R 스토리
아랄라랄라
전체 방문자
오늘
어제
  • All (207) N
    • Web (152) N
      • Markup | WEB (9)
      • Styles (45)
      • javascript (32)
      • jquery (28)
      • vue (16)
      • react (17) N
      • more (5)
    • IT (32)
      • CS (3)
      • git hub (5)
      • UI | UX (18)
      • more (6)
    • ETC (23) N
      • 이슈노트 (13) N
      • 스터디 (10)
      • 아랄라 ☞☜ (0)
      • JOB🛠 (0)

인기 글

반응형
hELLO · Designed By 정상우.
아랄라랄라

R 스토리

Web/react

[Next.js] Next.js App Router 경계 정리표

2026. 5. 18. 10:47

 

 

🔥 1. Server vs Client 핵심 구조

 

구분                                                  Server Component                          Client Component

기본 동작 기본값 "use client" 필요
실행 위치 서버 (Node.js) 브라우저
상태 관리 ❌ 불가 ⭕ useState 가능
이벤트(onClick) ❌ 불가 ⭕ 가능
router ❌ 사용 불가 ⭕ useRouter
hooks ❌ 대부분 불가 ⭕ useEffect, useState
데이터 fetch ⭕ 직접 가능 ⭕ 가능 (보통 API 호출)

 

 

 

 

 

 

🧠 2. “무조건 외워야 하는 기준”

 

🔵 Server Component에서 가능한 것

✔ 데이터 가져오기 (DB / fetch)
✔ props 전달
✔ HTML 렌더링
✔ async/await

 

예:

export default async function Page() {
    const data = await fetch(...)
    return <div>{data}</div>
}

 

 

 

 

🔴 Server Component에서 절대 금지

❌ useState
❌ useEffect
❌ onClick
❌ useRouter
❌ window / document

 

 

 

 

🟢 Client Component ("use client")

✔ useState
✔ useEffect
✔ 이벤트 처리
✔ router 사용
✔ form handling

 

예:

"use client";

import { useRouter } from "next/navigation";
import { useState } from "react";

 

 

 

 

 

 

 

🚨 3. router 정리

 

❌ 절대 금지

import { router } from "next/client";
import router from "next/router";

 

 

✅ App Router 정답

import { useRouter } from "next/navigation";

 

사용:

const router = useRouter();

router.push("/admin/ads");
router.refresh();
router.back();

 

 

 

 

 

 

 

🧭 4. params / dynamic route

 

Server Component

export default function Page({ params }: {
    params: { id: string }
}) {
}

 

 

Client Component

import { useParams } from "next/navigation";

const params = useParams();

 

 

 

 

 

 

 

🧱 5. 구조 설계 기준

✔ 추천 구조

/app
  /admin
    /ads
      page.tsx          (SERVER - 리스트)
      /[id]
        /edit
          page.tsx      (CLIENT - 수정)
        page.tsx        (SERVER - optional)

 

 

 

✔ UI 컴포넌트 분리

components/
  DeleteModal.tsx  → CLIENT
  AdForm.tsx       → CLIENT

 

 

 

 

 

 

 

💥 6. 지금 내 프로젝트 기준 핵심 판단

 

✔ 올바른 방향

  • 리스트 → Server
  • 수정 → Client
  • 삭제 → API Route
  • 이동 → useRouter

 

❌ 지금까지 에러 원인 패턴

Server Component
  ↓
client hook 들어간 컴포넌트 import
  ↓
router 잘못 import
  ↓
Class extends undefined 에러

 

 

 

 

 

 

 

🧨 7. 에러 빠른 판별법

이런 에러 나오면 무조건 이거

Class extends value undefined

 

👉 90% 확률:

  • router 잘못 import
  • client/server 혼용
  • useState 서버에서 사용

 

 

 

 

 

🚀 8. 한 줄 최종 요약

Server는 “데이터”, Client는 “동작”
router / state / event는 무조건 Client로 빼라

 

 

728x90
저작자표시 (새창열림)

'Web > react' 카테고리의 다른 글

[Next.js] Next.js + TypeScript + Tailwind CSS 관리자 페이지 만들기 2  (0) 2026.05.14
[Next.js] Server vs Client Component 완전 정리  (0) 2026.05.08
[Next.js] Next.js + TypeScript + Tailwind CSS 관리자 페이지 만들기 1  (1) 2026.05.08
[Next.js] 초보의 관리자 페이지 만들기 시작기  (0) 2026.04.28
[Next.js] 프로젝트 시작하기  (0) 2026.04.24

티스토리툴바