๐ Next.js๋?
- Vercel์ด๋ผ๋ ๋ฏธ๊ตญ ์คํํธ์
์์ ๋ง๋ ๋ฆฌ์กํธ ๊ธฐ๋ฐ SSR ํ๋ ์์ํฌ
- PHP์ ์๊ฐ์ ๋ฐ์ ๋ง๋ค์ด์ง
- ๋ค๋ฅธ ๋ฆฌ์กํธ ๊ธฐ๋ฐ SSR ํ๋ ์์ํฌ์ธ Remix, Hydrogen์ ๋นํด ํจ์ฌ ์ญ์ฌ๋ ์ค๋๋๊ณ ์ฌ์ฉ์๋ ์๋์ ์ผ๋ก ๋ง์ด ๋ณด์
- ๋ชจ๊ธฐ์
์ธ Vercel์ ์ ํญ์ ์ธ ์ง์์ ๋ฐ๊ณ ์์
- Next.js๋ฟ๋ง ์๋๋ผ SWR, SWC, Turbopack, Svelte ๋ฑ ์น ์ํ๊ณ ์ ๋ฐ์ ์ํฅ๋ ฅ ์๋ ํ๋ก์ ํธ๋ฅผ ๊ณ์ํด์ ๊ฐ๋ฐํ๊ฑฐ๋ ์ธ์ํ์
- ๊พธ์คํ ์๋ก์ด ๊ธฐ๋ฅ์ ์ถ๊ฐํด์ ๋ฆด๋ฆฌ์คํ๊ณ ์์
<br />
<br />
๐ Next.js ์์ํ๊ธฐ
npx create-next-app@latest --ts
โ๏ธ package.json
- ์ฃผ์ ์์กด์ฑ
- next: Next.js์ ๊ธฐ๋ฐ์ด ๋๋ ํจํค์ง
- eslint-config-next
- Next.js ๊ธฐ๋ฐ ํ๋ก์ ํธ์์ ์ฌ์ฉํ๋๋ก ๋ง๋ค์ด์ง ESLint ์ค์
- ๊ตฌ๊ธ๊ณผ ํ์
ํด ๋ง๋ ํต์ฌ ์น ์งํ์ ๋์์ด ๋๋ ๊ท์น๋ค์ด ๋ด์ฅ๋ผ ์์
- Next.js ๊ธฐ๋ฐ ํ๋ก์ ํธ๋ผ๋ฉด ๊ผญ ์ฌ์ฉํ๋ ๊ฒ์ ์ถ์ฒํจ
- eslint-config-airbnb์ ๊ฐ์ ๊ธฐ์กด์ ์ฌ์ฉํ๋ ๊ท์น์ด ์๋ค๋ฉด ์ด์ ์ถ๊ฐ๋ก ํจ๊ป ์ฌ์ฉํ๋ ๊ฒ์ ์ถ์ฒํจ
โ๏ธ next.config.js
- Next.js ํ๋ก์ ํธ์ ํ๊ฒฝ ์ค์ ๋ด๋น. Next.js๋ฅผ ์์ ์์ฌ๋ก ๋ค๋ฃจ๋ ค๋ฉด ๋ฐ๋์ ์์์ผ ํ๋ ํ์ผ
/** @type {import('next').NextConfig} */
const nextConfig = {
reactStrictMode: true,
swcMinify: true,
};
module.exports = nextConfig;
- ์ฒซ ์ค ์ฃผ์: js ํ์ผ์ ts์ ํ์
๋์์ ๋ฐ๊ธฐ ์ํด ์ถ๊ฐ๋ ์ฝ๋ (์๋ค๋ฉด ์ผ์ผ์ด ํ์ดํํด์ผ ํจ)
reactStrictMode
swcMinify
- ๋ฒ๋ค๋ง๊ณผ ์ปดํ์ผ์ ๋์ฑ ๋น ๋ฅด๊ฒ ์ํํ๊ธฐ ์ํด ๋ง๋ค์ด์ง.
- ๋ฐ๋ฒจ๋ณด๋ค ๋น ๋ฅธ ์ด์ ?
- js ๊ธฐ๋ฐ์ ๋ฐ๋ฒจ๊ณผ๋ ๋ค๋ฅด๊ฒ ๋ฌ์คํธ(Rust)๋ผ๋ ์์ ํ ๋ค๋ฅธ ์ธ์ด๋ก ์์ฑํ๋ค๋ ์ (๋ฌ์คํธ๋ C/C++์ ๋๋ฑํ ์์ค์ ์๋)
- ๋ณ๋ ฌ๋ก ์์
์ ์ฒ๋ฆฌํ๋ค๋ ์ ๋ฑ
- ์ด๋ฌํ SWC๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ฝ๋ ์ต์ํ ์์
์ ํ ๊ฒ์ธ์ง ์ฌ๋ถ๋ฅผ ์ค์ ํ๋ ์์ฑ
- SWC๊ฐ ๋ฐ๋ฒจ์ ๋นํด ๋ ๋น ๋ฅธ ์๋๋ฅผ ๋ณด์ฌ์ฃผ๊ธฐ ๋๋ฌธ์ ํน๋ณํ ์ด์ ๊ฐ ์๋ค๋ฉด SWC๋ฅผ ์ฐ๋ ๊ฒ์ ๊ถ์ฅ
- 13๋ถํฐ๋ ๊ธฐ๋ณธ๊ฐ์ด true๋ก ์ค์ ๋์ด ์์
โ๏ธ pages/_app.tsx
- \_app.tsx, ๊ทธ๋ฆฌ๊ณ ๋ด๋ถ์ ์๋ default export๋ก ๋ด๋ณด๋ธ ํจ์๋ ์ ํ๋ฆฌ์ผ์ด์
์ ์ ์ฒด ํ์ด์ง์ ์์์ ์
- ํ์ด์ง์ ์์์ ์ด๋ผ๋ ํน์ง ๋๋ฌธ์ ์น ์ ํ๋ฆฌ์ผ์ด์
์์ ๊ณตํต์ผ๋ก ์ค์ ํด์ผ ํ๋ ๊ฒ๋ค์ ์ฌ๊ธฐ์์ ์คํํ ์ ์์
- \_app.tsx์์ ํ ์ ์๋ ๋ด์ฉ
error boundary
๋ฅผ ์ฌ์ฉํด ์ ํ๋ฆฌ์ผ์ด์
์ ์ญ์์ ๋ฐ์ํ๋ ์๋ฌ ์ฒ๋ฆฌ
reset.css
๊ฐ์ ์ ์ญ CSS ์ ์ธ
- ๋ชจ๋ ํ์ด์ง์ ๊ณตํต์ผ๋ก ์ฌ์ฉ ๋๋ ์ ๊ณตํด์ผ ํใ
ก๋ ๋ฐ์ดํฐ ์ ๊ณต ๋ฑ
- ์ต์ด: SSR -> ์ดํ์๋ ํด๋ผ์ด์ธํธ์์ \_app.tsx์ ๋ ๋๋ง์ด ์คํ๋จ