Next.jsNext.js 기초강의 8개 중 1번째난이도 기초

Next.js란? — App Router와 풀스택 React

발행 읽는 시간 약 1 분

  • Next.js
  • AppRouter
  • SSR
  • SSG
  • 풀스택

강의 소개

Next.js가 React와 어떻게 다른지, App Router 구조가 무엇인지 이해합니다. SSR, SSG, ISR의 개념과 차이점, 그리고 Next.js 프로젝트를 시작하는 방법을 배웁니다.

React vs Next.js#

React는 UI 라이브러리, Next.js는 React 기반 풀스택 프레임워크입니다.

Diagram · Mermaid

렌더링 방식#

방식언제 생성사용 사례
CSR브라우저에서대시보드, 인증 후 페이지
SSR요청마다 서버에서사용자별 피드, 실시간 데이터
SSG빌드 시 1번블로그, 문서, 마케팅
ISR빌드 후 주기적 재생성제품 목록, 뉴스

프로젝트 생성#

Bash
npx create-next-app@latest my-app --typescript --tailwind --eslint --app
cd my-app
npm run dev
# http://localhost:3000

App Router 폴더 구조#

Text
app/
├── layout.tsx          ← 루트 레이아웃 (항상 유지)
├── page.tsx            ← / 경로
├── loading.tsx         ← 로딩 UI
├── error.tsx           ← 에러 UI
├── not-found.tsx       ← 404
├── about/
│   └── page.tsx        ← /about
├── users/
│   ├── page.tsx        ← /users
│   └── [id]/
│       └── page.tsx    ← /users/123
└── api/
    └── users/
        └── route.ts    ← API 엔드포인트

서버 컴포넌트 vs 클라이언트 컴포넌트#

TSX
// 서버 컴포넌트 (기본값)
// - 서버에서만 실행
// - useState, useEffect 사용 불가
// - DB, 파일 직접 접근 가능
// - 번들 크기에 포함 안 됨

async function ProductPage({ params }: { params: { id: string } }) {
    // 직접 DB 쿼리 가능 (서버에서만 실행)
    const product = await db.products.findById(params.id);
    return <div>{product.name}</div>;
}

// 클라이언트 컴포넌트
// "use client" 지시어 필요
"use client";
import { useState } from "react";

function AddToCart({ productId }: { productId: string }) {
    const [count, setCount] = useState(0);
    return (
        <button onClick={() => setCount(c => c + 1)}>
            장바구니 ({count})
        </button>
    );
}

루트 레이아웃#

TSX
// app/layout.tsx
import type { Metadata } from "next";
import { Inter } from "next/font/google";
import "./globals.css";

const inter = Inter({ subsets: ["latin"] });

export const metadata: Metadata = {
    title: "My App",
    description: "Next.js 앱",
};

export default function RootLayout({
    children,
}: {
    children: React.ReactNode;
}) {
    return (
        <html lang="ko">
            <body className={inter.className}>
                <header>헤더</header>
                <main>{children}</main>
                <footer>푸터</footer>
            </body>
        </html>
    );
}

첫 페이지#

TSX
// app/page.tsx
export default function HomePage() {
    return (
        <div>
            <h1>Next.js 앱에 오신 것을 환영합니다!</h1>
            <p>App Router를 사용하고 있습니다.</p>
        </div>
    );
}

정리#

개념설명
App Routerapp/ 폴더 기반 파일 라우팅
서버 컴포넌트기본값, 서버에서만 실행
클라이언트 컴포넌트"use client", 브라우저에서 실행
SSR요청마다 서버 렌더링
SSG빌드 시 정적 생성

다음 편에서는 페이지와 라우팅 — 동적 라우트, 중첩 레이아웃, 라우트 그룹을 배웁니다.

Follow · Ask · Work

이 글이 도움이 됐다면

짧은 작업 기록과 데모는 인스타그램에 올립니다. 만들고 싶은 것이 있다면 프로젝트 의뢰나 협업 제안도 편하게 보내 주세요.

글쓴이

파란여우

직접 만든 AI 앱·제품의 개발·배포를 공개하는 실전형 테크 크리에이터

파란여우 소개 Instagram @bluefox._.hi

이어서 보기

만들고 싶은 것이 있다면 프로젝트 의뢰로 알려 주세요.