๋ช ๋ น์ด๋ฅผ ํตํด ํ๋ก์ ํธ ์์ฑํ๊ฒ ๋๋ฉด ์ฌ์ง๊ณผ ๊ฐ์ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๊ฒ ๋ ๊ฒ์ ๋๋ค.
์ถ๊ฐ ์ต์
์ผ๋ก ์ฌ์ง๊ณผ ๊ฐ์ด ์ค์ ํด ์ฃผ์์ต๋๋ค.
Next 13 ๋ฒ์ ๋ถํฐ ์๊ธด app router๋ฅผ ์ฌ์ฉํด๋ณด๋ ค๊ณ ํฉ๋๋ค. (์ด์ ๋ฒ์ ๊น์ง๋ ๋ณดํต pages๋ฅผ ํ์ฉํ์ฌ ๋ผ์ฐํ
์ ํ์ต๋๋ค.)
npx create-next-app@latest
์ด๋ ๊ฒ ์์ฑ๋ ํด๋ ๊ตฌ์กฐ์์ ์์ฑ๋ ํ์ผ์ ๋ณด๊ฒ ์ต๋๋ค.
Layout.tsx
ํ์ ์คํฌ๋ฆฝํธ๋ก ์ค์นํ๊ธฐ ๋๋ฌธ์ tsxํ์ผ์ ๋๋ค.
ํด๋น ํ์ผ์ ๊ธฐ๋ณธ์ ์ด ํ๋ก์ ํธ, ์นํ์ด์ง์ ๊ณจ๊ฒฉ์ด๋ผ๊ณ ๋ณด์๋ฉด ๋ฉ๋๋ค.
_app์ด๋ ๋น์ทํ๊ฐ? ์ถ์ต๋๋ค.
import './globals.css'
import type { Metadata } from 'next'
import { Inter } from 'next/font/google'
const inter = Inter({ subsets: ['latin'] })
export const metadata: Metadata = {
title: 'Create Next App',
description: 'Generated by create next app',
}
export default function RootLayout({
children,
}: {
children: React.ReactNode
}) {
return (
<html lang="en">
<body className={inter.className}>{children}</body>
</html>
)
}
page.tsx
layout ํ์ผ์ ๋ณด๋ฉด body์์ children ์ด ๋ถ๋ถ์ด ์ด์ page.tsx์ return ๊ฐ๋ค์ด ๋ค์ด๊ฐ๊ฒ ๋ฉ๋๋ค.
์ด์ ์ _documentํ์ผ?์ด๋ผ๊ณ ๋ณด์๋ฉด ๋ ๊ฒ ๊ฐ์ต๋๋ค.
import Image from 'next/image'
import styles from './page.module.css'
export default function Home() {
return (
<main className={styles.main}>
<div className={styles.description}>
...
</div>
</main>
)
}
global.css
ํ๋ก์ ํธ ์ ์ฒด์ ์ ์ญ cssํ์ผ์ด๋ผ๊ณ ๋ณด์๋ฉด ๋ฉ๋๋ค. css์ด๊ธฐ ์ธํ ? ๊ณผ ๊ฐ์ต๋๋ค.
๊ทธ ์ธ ํ์ผ
- next.config.js : next ์ค์ ํ์ผ
- package.json : ํ๋ก์ ํธ์์ ์ฌ์ฉํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
- middleware.ts : ์๋ฒ์ ํด๋ผ์ด์ธํธ ์ค๊ฐ์ ๊ฑฐ์น๋ ๋จ๊ณ(?)
- .env : ํ๊ฒฝ๋ณ์์ค์ ๊ด๋ จ ํ์ผ (.env.local, .env.development, .env.production)
'Front-End > Next.js' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Next.js] Next.js ์ค์น ๋ฐ ์์, ํ๋ก์ ํธ ์์ฑ (Insallation) (0) | 2023.08.09 |
---|---|
Next.js] Next.js๋? (0) | 2023.08.06 |