메인 홈
home
사이트 맵 - 한눈에
home

Next.js 기초 가이드: 초보자도 쉽게 배우는 모든 명령어와 기초 문법 총정리

웹 개발의 세계에 발을 들여놓으셨나요?
그렇다면 Next.js라는 이름을 한 번쯤은 들어보셨을 겁니다. React 기반의 이 강력한 프레임워크는 현재 전 세계 개발자들이 가장 사랑하는 도구 중 하나로 자리 잡았습니다.
하지만 막상 시작하려니 어디서부터 손을 대야 할지 막막하시죠? 걱정 마세요. 오늘 이 글 하나로 Next.js의 모든 명령어와 기초 문법을 완벽하게 정리해드리겠습니다.

1. Next.js란 무엇인가요? 왜 배워야 하나요?

Next.js는 React 애플리케이션을 만들기 위한 풀스택 프레임워크입니다. 쉽게 말해, React로 웹사이트를 만들 때 필요한 모든 도구를 한 번에 제공하는 종합 선물세트라고 생각하시면 됩니다.
1.
서버 사이드 렌더링(SSR): 웹페이지가 검색엔진에 잘 노출되도록 도와줍니다
2.
정적 사이트 생성(SSG): 미리 페이지를 만들어두어 속도가 매우 빠릅니다
3.
API 라우트: 백엔드 기능도 함께 구현할 수 있습니다
4.
자동 코드 분할: 필요한 부분만 로드하여 성능을 최적화합니다
5.
이미지 최적화: 이미지를 자동으로 최적화하여 로딩 속도를 개선합니다

2. Next.js 시작하기: 설치부터 실행까지

Next.js를 시작하는 방법은 정말 간단합니다. 터미널을 열고 다음 명령어를 입력하기만 하면 됩니다.
1.
새 프로젝트 생성하기
npx create-next-app@latest my-app # 또는 yarn create next-app my-app # 또는 pnpm create next-app my-app
Shell
복사
1.
프로젝트 폴더로 이동
cd my-app
Shell
복사
1.
개발 서버 실행
npm run dev # 또는 yarn dev # 또는 pnpm dev
Shell
복사
브라우저에서 http://localhost:3000을 열면 Next.js 앱이 실행되는 것을 확인할 수 있습니다!

3. Next.js 핵심 명령어 완벽 정리

Next.js를 사용할 때 꼭 알아야 할 명령어들을 모두 정리했습니다.
1.
개발 관련 명령어
npm run dev # 개발 서버 실행 (핫 리로딩 지원) npm run build # 프로덕션용 빌드 생성 npm run start # 프로덕션 서버 실행 npm run lint # 코드 품질 검사
Shell
복사
2.
추가 유용한 명령어
npm run export # 정적 HTML 파일로 내보내기 npm run analyze # 번들 크기 분석 (별도 설정 필요)
Shell
복사
3.
TypeScript 프로젝트 생성
npx create-next-app@latest --typescript
Shell
복사
4.
특정 템플릿으로 프로젝트 생성
npx create-next-app@latest --example [템플릿명] # 예시: npx create-next-app@latest --example with-tailwindcss
Shell
복사

4. Next.js 폴더 구조와 파일 시스템 라우팅

Next.js의 가장 큰 특징 중 하나는 파일 시스템 기반 라우팅입니다. 폴더와 파일을 만들면 자동으로 URL 경로가 생성됩니다.
1.
기본 폴더 구조
my-app/ ├── app/ # App Router (Next.js 13+) │ ├── page.js # 홈페이지 (/) │ ├── layout.js # 공통 레이아웃 │ └── globals.css # 전역 스타일 ├── public/ # 정적 파일 (이미지, 폰트 등) ├── components/ # 재사용 가능한 컴포넌트 └── package.json # 프로젝트 설정
Plain Text
복사
2.
페이지 라우팅 예시
app/page.js/ (홈페이지)
app/about/page.js/about
app/blog/[id]/page.js/blog/123 (동적 라우팅)
3.
특수 파일들
layout.js: 페이지의 공통 레이아웃 정의
loading.js: 로딩 중 표시할 UI
error.js: 에러 발생 시 표시할 UI
not-found.js: 404 페이지

5. Next.js 기초 문법: 페이지 만들기

실제로 페이지를 만들어보면서 기초 문법을 익혀봅시다.
1.
기본 페이지 생성 (app/page.js)
export default function HomePage() { return ( <div> <h1>안녕하세요, Next.js!</h1> <p>첫 번째 페이지입니다.</p> </div> ) }
JavaScript
복사
2.
동적 라우팅 (app/posts/[id]/page.js)
export default function Post({ params }) { return ( <div> <h1>포스트 ID: {params.id}</h1> </div> ) }
JavaScript
복사
3.
레이아웃 컴포넌트 (app/layout.js)
export default function RootLayout({ children }) { return ( <html lang="ko"> <body> <header>공통 헤더</header> <main>{children}</main> <footer>공통 푸터</footer> </body> </html> ) }
JavaScript
복사

6. 데이터 페칭: 서버와 클라이언트에서 데이터 가져오기

Next.js에서는 다양한 방법으로 데이터를 가져올 수 있습니다.
1.
서버 컴포넌트에서 데이터 가져오기 (기본값)
async function getData() { const res = await fetch('<https://api.example.com/data>') return res.json() } export default async function Page() { const data = await getData() return <div>{data.title}</div> }
JavaScript
복사
2.
클라이언트 컴포넌트 사용하기
'use client' import { useState, useEffect } from 'react' export default function ClientComponent() { const [data, setData] = useState(null) useEffect(() => { fetch('/api/data') .then(res => res.json()) .then(setData) }, []) return <div>{data?.title}</div> }
JavaScript
복사
3.
정적 생성과 재검증
export const revalidate = 60 // 60초마다 재검증 async function getData() { const res = await fetch('<https://api.example.com/data>') return res.json() }
JavaScript
복사

7. API 라우트 만들기: 백엔드 기능 구현

Next.js에서는 API 엔드포인트도 쉽게 만들 수 있습니다.
1.
기본 API 라우트 (app/api/hello/route.js)
export async function GET(request) { return Response.json({ message: '안녕하세요!' }) } export async function POST(request) { const data = await request.json() return Response.json({ received: data }) }
JavaScript
복사
2.
동적 API 라우트 (app/api/users/[id]/route.js)
export async function GET(request, { params }) { const { id } = params return Response.json({ userId: id }) }
JavaScript
복사

8. 스타일링: CSS 모듈부터 Tailwind까지

Next.js는 다양한 스타일링 방법을 지원합니다.
1.
CSS 모듈 사용하기
/* styles/Home.module.css */ .container { padding: 2rem; background: #f0f0f0; }
CSS
복사
import styles from './Home.module.css' export default function Home() { return <div className={styles.container}>홈페이지</div> }
JavaScript
복사
2.
전역 CSS
/* app/globals.css */ body { margin: 0; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif; }
CSS
복사
3.
Tailwind CSS 설정
npm install -D tailwindcss postcss autoprefixer npx tailwindcss init -p
Shell
복사

9. 이미지와 폰트 최적화

Next.js는 자동으로 이미지와 폰트를 최적화합니다.
1.
Image 컴포넌트 사용
import Image from 'next/image' export default function Profile() { return ( <Image src="/profile.jpg" alt="프로필 사진" width={500} height={300} priority /> ) }
JavaScript
복사
2.
폰트 최적화
import { Inter } from 'next/font/google' const inter = Inter({ subsets: ['latin'] }) export default function Layout({ children }) { return ( <html className={inter.className}> <body>{children}</body> </html> ) }
JavaScript
복사

10. 환경 변수와 설정 파일

프로젝트 설정을 관리하는 방법을 알아봅시다.
1.
환경 변수 설정 (.env.local)
NEXT_PUBLIC_API_URL=https://api.example.com DATABASE_URL=postgresql://localhost:5432/mydb
Shell
복사
2.
next.config.js 설정
/** @type {import('next').NextConfig} */ const nextConfig = { images: { domains: ['example.com'], }, redirects: async () => { return [ { source: '/old-page', destination: '/new-page', permanent: true, }, ] }, } module.exports = nextConfig
JavaScript
복사

11. 배포하기: Vercel부터 다른 플랫폼까지

Next.js 앱을 배포하는 방법은 여러 가지가 있습니다.
1.
Vercel 배포 (가장 쉬운 방법)
npm i -g vercel vercel
Shell
복사
2.
빌드 후 Node.js 서버에서 실행
npm run build npm run start
Shell
복사
3.
정적 사이트로 내보내기
npm run build npm run export
Shell
복사

12. 성능 최적화 팁

Next.js 앱의 성능을 더욱 향상시키는 방법들입니다.
1.
동적 임포트 사용
import dynamic from 'next/dynamic' const DynamicComponent = dynamic(() => import('../components/heavy'), { loading: () => <p>로딩 중...</p>, })
JavaScript
복사
2.
이미지 최적화
WebP 형식 자동 변환
지연 로딩 기본 적용
반응형 이미지 자동 생성
3.
번들 크기 줄이기
사용하지 않는 의존성 제거
Tree shaking 활용
코드 분할 최적화
Next.js는 처음에는 복잡해 보일 수 있지만, 하나씩 차근차근 배워나가면 누구나 마스터할 수 있습니다.
이 가이드에서 소개한 명령어와 기초 문법들을 직접 실습해보면서 익혀보세요.
작은 프로젝트부터 시작해서 점차 복잡한 애플리케이션을 만들어가다 보면, 어느새 Next.js 전문가가 되어 있을 겁니다.
Next.js 공식 문서(https://nextjs.org/docs)도 함께 참고하시면 더욱 깊이 있는 학습이 가능합니다. 코딩의 즐거움을 만끽하시길 바랍니다!