๐ Front-End/Next.js
_app.tsx const router = useRouter() useEffect(() => { window.history.scrollRestoration = 'auto' const cacheScrollPositions: Array = [] let shouldScrollRestore : null | {x: number; y: number} router.events.on('routeChangeStart', () => { cacheScrollPositions.push([window.scrollX, window.scrollY]) }) router.events.on('routeChangeComplete', () => { if (shouldScrollRestore) { const {x, y} = shouldScr..
๐ Front-End/Next.js
[slug] ๊ฐ์ ์ด๋ป๊ฒ ํ์ฉํ ๊ฒ ์ธ๊ฐ? - pages/category/[slug].js slug ๊ฐ์ ๋ฐ๋ผ์ ์ฐ๋ฆฌ๊ฐ ์ํ๋ ํ์ด์ง๊ฐ ๋ค๋ฅด๊ฒ ๋ณด์ฌ์ ธ์ผ ํฉ๋๋ค. 1. useRouter Next.js ์์ ์ ๊ณตํ๊ณ ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ import { useRouter } from 'next/router' // ์ ์ธ const router = useRouter(); const { slug } = router.query; 1.1 category.js import { useRouter } from "next/router"; const CategorySlug = () => { const router = useRouter() const { slug } = router.query return ( Category {slu..
๐ Front-End/Next.js
1. Assets 1.1 public ๋๋ ํ ๋ฆฌ ์ ์ ๋ฐ์ดํฐ๋ฅผ ์ ๊ณตํ๋ ๊ฒฝ์ฐ ์ต์์ ๋๋ ํ ๋ฆฌ์ public ๋ฅผ ์ด์ฉํ๋ฉด ๋ฉ๋๋ค. ์ด๋ฏธ์ง ๊ฒฝ๋ก๋ public ํด๋๊ฐ / ๋ก ๋งค์นญ ๋ฉ๋๋ค. 1.2 ์ต์ ํ ๋์ง ์์ ์ด๋ฏธ์ง ๊ทธ๋ฌ๋, ์ผ๋ฐ HTML ์ img ๋ฅผ ์ฌ์ฉํ๋ฉด ์๋์ ์ํฉ๋ค์ ์๋์ผ๋ก ์ฒ๋ฆฌํด์ผ ํฉ๋๋ค. ๋ค์ํ ํ๋ฉด ํฌ๊ธฐ์ ์ด๋ฏธ์ง๊ฐ ๋ฐ์ํ์ผ๋ก ์ ์ฉ๋๋์ง ๋ค๋ฅธ ํด ๋๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ์ด๋ฏธ์ง ์ต์ ํ ๋ทฐํฌํธ์ ๋ค์ด๊ฐ ๋๋ง ์ด๋ฏธ์ง ๋ก๋ ๋ฑ ... ํ์ง๋ง, Next.js ๋ Image ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํด ์ฆ์ ์ฌ์ฉ ํ ์ ์๋ ๊ตฌ์ฑ ์์๋ฅผ ์ ๊ณต ํฉ๋๋ค. 1.3 Image Component - ์ด๋ฏธ์ง ์๋ ์ต์ ํ Next.js ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ด๋ฏธ์ง ์ต์ ํ๋ ์ง์ ํฉ๋๋ค. ์ด๋ฏธ์ง ํฌ๊ธฐ ์กฐ์ , ์ต์ ํ์ ์ต์ ์ด๋ฏธ์ง ํฌ๋ฉง (..
๐ Front-End/Next.js
Next.js ์์๋ ํ๊ทธ๋ฅผ ์ฌ์ฉํด์ ํ์ด์ง ์ด๋ํ๋ ๊ฒ์ ๋ฐ๊ฐ์ ํ์ง ์์ต๋๋ค. ์ด์ ๋, ์ฑ ๋ด์์ ํ์ด์ง๋ฅผ ์ด๋ ํ ๋ ์ฌ์ฉํ๋ ํน์ ์ปดํฌ๋ํธ๊ฐ ์กด์ฌํ๊ธฐ ๋๋ฌธ ์
๋๋ค. React ์์ React router link ๋ฅผ ์ฌ์ฉํ๋ ์ด์ ์ ๊ฐ์ต๋๋ค. ํ๊ทธ๋ฅผ ์ฌ์ฉํด์ ํ์ด์ง๋ฅผ ์ด๋ํ๊ฒ ๋๋ฉด ์ ํ๋ฆฌ์ผ์ด์
์ ์๋ก๊ณ ์นจ์ด ๋ฐ์ ํฉ๋๋ค. Link ํ์ด์ง๊ฐ์ ํ์์ CSR์ผ๋ก ์งํ ํ ์ ์์ต๋๋ค. Code Splitting์ด ํ์ด์ง ๋ณ๋ก ์งํ ๋์ด ๊ฐ ํ์ด์ง์์ ํ์ํ ๊ฒ๋ง ๋ก๋ํ ์ ์๋๋ก ํฉ๋๋ค. ํน์ ํ์ด์ง์์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋๋ผ๋ ๋๋จธ์ง ์ฑ์ ์ ์ ์๋ ํฉ๋๋ค. ๋ผ์ฐํ
๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ํ์ํ์ง ์์ต๋๋ค. next/link ๊ฐ์ฅ ๋จผ์ import ๋ฅผ ํฉ๋๋ค. ๋ณ๋์ ์ค์น๋ ํ์ํ์ง ์์ต๋๋ค. import Link ..
๐ Front-End/Next.js
Next.js ์ Router ๋ file-system ๊ธฐ๋ฐ file-system : ํ์ผ์ ๋ง๋ค๋ฉด ๊ทธ ์ฆ์ ๋ผ์ฐํฐ๋ก ์ธ์ง๋๊ณ ์ฃผ์๊ฐ ๋งตํ์ด ๋ฉ๋๋ค. pages/ src/pages/ ๋ฆฌ์กํธ์์๋ ๋ณ๋์ Router ๋ฅผ ์ ๊ณตํ์ง ์๊ธฐ ๋๋ฌธ์ ๋ณ๋์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํด์ผ ํ์ง๋ง, Next.js ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๊ณต์ ํฉ๋๋ค. pages/ OR src/pages ๋ ์ค ์ฐ์ ์์๋? ์ฐ์ ์์๋ pages/ ๊ฐ ์ฐ์ ์
๋๋ค. pages/index.js import Link from 'next/link' import { useEffect, useState } from 'react' export async function getStaticProps(){ console.log('server') return { props..
๐ Front-End/Next.js
1. React.js ์ ๋ฐฉ์ 1.1 ๊ธฐ์กด์ React ๋ CSR ๋ฐฉ์์ผ๋ก ํ๋ฉด์ ๋ ๋๋ง ํฉ๋๋ค. ํด๋ผ์ด์ธํธ ์ธก์์ ํ๋ฉด์ ์ง์ ๋ ๋๋ง ํฉ๋๋ค. ์ฆ, ๋ธ๋ผ์ฐ์ ๊ฐ ์ ์ ๊ฐ ๋ณด๋ UI ๋ฅผ ๋ง๋ญ๋๋ค. React ๋ก ๋ง๋ค์ด์ง ํ๋ฉด์ ๋ชจ๋ ๊ฒ์ HTML ์์ค์ฝ๋ ์์ ๋ค์ด์์ง ์์ต๋๋ค. React ๋ก ๋ง๋ค์ด์ง ์ฑ์ ๊ฐ๋ฐ์ ๋๊ตฌ๋ก ํ์ธํ๋ฉด, ํ๋์ ๋ง์ ๊ฐ์ง๊ณ ์์ ๊ฒ ์
๋๋ค. ๋ธ๋ผ์ฐ์ ๊ฐ HTML ์ ๊ฐ์ ธ์ฌ ๋ ๋น์ด์๋ div ์ผ๋ก ๊ฐ์ ธ์ต๋๋ค. ๊ทธ ํ, ๋ธ๋ผ์ฐ์ ๊ฐ ๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์์ฒญํด์ ์๋ฐ์คํฌ๋ฆฝํธ์ React.js ๋ฅผ ์คํ ์ํค๊ณ ๊ทธ ๋ค์ ํ๋ฉด์ด ์ ์ ์๊ฒ ๋ณด์ด๊ฒ ๋ฉ๋๋ค. 1.2 ๋ง์ฝ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ๊ฐ์ ธ์ค๋ ์๋๊ฐ ๋๋ฆฌ๋ค๋ฉด? ์ฌ์ฉ์๋ ํ๋ฉด์ด ๋ ๋๋ง ๋๋ ์๊ฐ์ ์ค๋ ๋์ ๊ธฐ๋ค๋ ค์ผ ํ ๊ฒ ์
๋๋ค. ๋ธ๋ผ์ฐ์ ๋ ์๋ฐ..
๐ Front-End/Next.js
๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ, ํ๋ฉด์ ๋ฌด์์ธ๊ฐ๋ฅผ ๊ทธ๋ฆฌ๋ ค๋ฉด ์ด๋์ ๊ฐ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์์ผ ํฉ๋๋ค. 1. SSR (Server Side Render) ํ์ด์ง์ ๋ํ ์์ฒญ์ด ์์ ๋๋ง๋ค ์๋ฒ์์ ํ์ด์ง๋ฅผ ๋ง๋ค์ด ๋ฐํ ํฉ๋๋ค. ์๋ฒ์์ ๋งค๋ฒ ์ฐ์ฐ์ ํด์ผํ๋ฉฐ ์บ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์๋์ ์ผ๋ก ์ด๋ ต๊ธฐ ๋๋ฌธ์ SSG์ ๋นํด ๋๋ฆฝ๋๋ค. ํ์ง๋ง ํญ์ ์ต์ ์ ์ ๋ณด๋ฅผ ๋ณด์ฌ์ฃผ์ด์ผํ๋ ๊ฒฝ์ฐ, SSR๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค. (ํ๋ก ํธ)์๋ฒ์์ HTML ํ์ผ์ ๋ง๋ค์ด์ ๋ณด๋ด๊ธฐ ๋๋ฌธ์ CSR์ ๋นํด ์ฌ์ฉ์๊ฐ ๋ ๋น ๋ฅด๊ฒ ํ๋ฉด์ ์ธ์ํ ์ ์์ต๋๋ค. ํ์ง๋ง ์ด๋ฒคํธ ๋ฑ ํ์ด์ง์ ๋์์ ์ํด์๋ hydrate๋ผ๋ ๊ณผ์ ์ ํตํด์ JS ์ฝ๋๊ฐ ์คํ๋์ด์ผ ํฉ๋๋ค. ์๋ฒ ๊ฐ ๊ทธ๋ฆฝ๋๋ค. ๊ทธ๋ฆฐ๋ค : ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์์ ๋ํ๋ธ๋ค. ์ฆ, ์๋ฒ๊ฐ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์์ ๊ทธ๋ฆฐ๋ค...
๐ Front-End/Next.js
React์ ๋ฒ๊ฑฐ๋ก์ด ๋ถ๋ถ ๋ฆฌ์กํธ๋ ์ ํ๋ฆฌ์ผ์ด์
์ ์ฒ์๋ถํฐ ๋น๋ํ๋ ค๋ฉด ์ ๊ฒฝ ์จ์ผํ๋ ์ธ๋ถ์ฌํญ์ด ๋ง์ต๋๋ค. Webpack์ผ๋ก ๋ฒ๋ค๋ง & Babel ์ปดํ์ผ๋ฌ๋ก JSX → JS ๋ก ๋ณํ ์ต์ ํ (Code Splitting ๋ฑ)๋ฅผ ํด์ผํจ Static Pre-Rendering (์ฑ๋ฅ๊ณผ SEO๋ฅผ ์ํด) / SSR ๋๋ CSR ๋ฅผ ํด์ผํจ ๋ฆฌ์กํธ ์ฑ๊ณผ ๋ฐ์ดํฐ ์ ์ฅ์๋ฅผ ์ฐ๊ฒฐํ๊ธฐ ์ํ ์๋ฒ ์ธก ์ฝ๋ ์์ฑ NextJS: React ํ๋ ์์ํฌ NextJS๋ React ์ ๋ฒ๊ฑฐ๋ก์ด ์ ์ ๊ฐํธํ๊ฒ ํด๊ฒฐ ํ์ต๋๋ค. ์ง๊ด์ ์ธ ํ์ด์ง ๊ธฐ๋ฐ ๋ผ์ฐํ
(Dynamic routes ๋ ์ง์ํจ) Pre-rendering, static generation (SSG), server-side rendering (SSR) ์ด ํ์ด์ง ๋จ์๋ก ์ ๊ณต๋จ ์..