https://www.yes24.com/product/goods/140407282
๋น ๋ฅด๊ฒ ๋ณํ๋ ํ๋ก ํธ ๊ธฐ์ ์ธ ๋งํผ ๊ฐ๋ฐ ์ฑ ์ ์ถ์์ผ๊ณผ ํฌํจํ๋ ๋ฒ์ ์ด ์ค์ํ๋ค๊ณ ๋๊ปด์ง๋ค.
์ด ์ฑ
์ 2024๋
12์ 23์ผ์ ์ถ๊ฐ๋ ๋ฐ๋๋ฐ๋ํ ๋ฆฌ์กํธ ์ ์ ์ฑ
์ด๋ค.
์์ดํ์ 2024๋
03์ 19์ผ์ ์ถ์๋์๋ค๊ณ ํ๋ค.
๊ทธ๋ฆฌ๊ณ , 2024๋ 12์ ์ด์ ์ถ์๋ ๋ฆฌ์กํธ 19...ใ
ํ์ง๋ง, ์ฑ
๋ด์ฉ์ ์ฝ์ด๋ณด๋ ๋ฆฌ์กํธ 19์ ๋ด์ฉ๊น์ง ์ฐธ๊ณ ๋ ํ๊ตญ์ด ๋ฒ์ญํ์ด๋
์ด ๋ถ๋ถ์ ๋ํด์๋ ๊ฑฑ์ ํ์ง ์์๋ ๋ ๋ฏํ๋ค.
์ฌ์ค ์ด ์ฑ
์ ๊ธฐ์ ํ๋ํ๋๋ฅผ ํ์ตํ๊ธฐ ์ํ ์ฑ
์ด๋ผ๊ธฐ๋ณด๋จ
์ต์ ๋ฆฌ์กํธ๊ฐ ๋์๊ฐ๋ ๋ฐฉํฅ๊ณผ ์ ์ฒด์ ์ธ ํ๋ฆ์ ์์๋ณด๊ธฐ์ ์ข์ ์ฑ
์ด๋ค.
ํนํ ๋ฆฌ์กํธ๊ฐ ์๋ฒ ์ฌ์ด๋ ๋ ๋๋ง์ ์ด์ฌํ์ธ ๋งํผ
Next.js๋ฅผ ๋ฐฐ์ฐ๊ธฐ ์์ํ๊ฑฐ๋ ํฐ ๊ทธ๋ฆผ์ ๋ค์ ๊ทธ๋ ค๋ณด๊ณ ์ถ์ ์ฌ๋์๊ฒ ์ข์ ์ฑ
์ธ ๊ฒ ๊ฐ๋ค.
์์ธํ ๋ด์ฉ์ ์๊ณ ์ถ์ ์ฌ๋๋ค์ 2024๋ 1์์ ์ถ์๋ ๋ชจ๋ ๋ฆฌ์กํธ Deep Dive์ ์ฐธ๊ณ ํ๋ฉด ์ข์ ๊ฒ ๊ฐ๋ค.
์คํ๊ณผ ๋ ๋๋ง๊ณผ๋ ๋ค๋ฅธ๋ค. ์คํ์ ํจ์ ํธ์ถ์ ์๋ฏธํ๋ค.
์๋ฒ ์ปดํฌ๋ํธ : ์๋ฒ์์๋ง ์คํ๋๋ ๊ฒ์ด ๋ง๋ค. ๊ทธ๋ฆฌ๊ณ ๋ ๋๋ง๋ ๋๋ค.
ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ : ์๋ฒ์์ ์คํ -> ๋ฆฌ์กํธ ์๋ฆฌ๋จผํธ ๊ฐ์ฒด -> HTML ๋ฌธ์์ด๋ก ์ง๋ ฌํ -> ํด๋ผ์ด์ธํธ๋ก ์ ์ก
๊ทธ๋์, ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ๋ ์๋ฒ์ ํด๋ผ์ด์ธํธ ๋ชจ๋์์ ์คํ๋๋ค.
ํ์ง๋ง, ๋ ๋๋ง์ด ๋์ง๋ ์๋๋ค.
๋์ , ์๋ฒ๋ ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ๋ฅผ ์ํ ํ๋ ์ด์คํ๋๋ฅผ ๋ ๋๋งํ๋ค.
ํ๋ ์ด์คํ๋: ํด๋ผ์ด์ธํธ ๋ฒ๋ค๋ฌ๊ฐ ์์ฑํ ํน์ ๋ชจ๋์ ๋ํ ์ฐธ์กฐ
ํธ๋ฆฌ์ ์ง์ ์ ๋๋ฌํ๋ฉด ํน์ ๋ชจ๋์ ์ฌ์ฉํด์ผ ํ๋ค๊ณ ์๋ ค ์ฃผ๋ ๊ฒ์ด๋ค.
โก๏ธ ์ด๋ ๊ฒ ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ๊ฐ ์ฒ์ ํด๋ผ์ด์ธํธ์์ ๋ ๋๋ง๋ ๋ ๊ฐ์ ์ฅ์์ ๊ฐ์ ์ฐธ์กฐ ๊ฐ์ ๋ ๋๋ง ํ ์ ์๊ฒ ํด์ผ ํ๊ธฐ ๋๋ฌธ์.
์๋ฒ์์์ ๋ ๋๋ง๊ณผ๋ ๋ค๋ฅธ ๋ ๋๋ง์ด ์ผ์ด๋๋ฉด ์ฐธ์กฐ ์ค๋ฅ๊ฐ ๋ ์ ์์ด์,
์๋ฒ์ ๋ค๋ฅธ ๋ ๋๋ง์ด ํด๋ผ์ด์ธํธ์์ ์ผ์ด๋๋ฉด ์ค๋ฅ๋ฅผ ๋ํ๋ด๋ ๋ฏํ๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก ์ ์ ์์ฑ์ ์ฌ์ฉํ๋ ค ํ๋ค.
์ต๋ํ ์๋ฒ ์ปดํฌ๋ํธ๋ก ๋ง๋๋ ค ํ๋ค.
Next.js ๊ฐ๋ฐ์ ํ๋ฉฐ '์๋ฒ์์ ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ๋ฅผ ์คํ ๋ ๋๊น์ง ์ฝ์ง ์๋ ๊ฒ ๊ฐ๋ค'๋ผ๋ ์๊ฐ์ ํ์๋ค.
์๋์ ์ฝ๋์ฒ๋ผ ๋ฆฌ์กํธ์์๋ 1๊ณผ 2์ ์ฝ๋๊ฐ ๊ฐ์ง๋ง,
Next.js์์๋ 1์ ์์์ฒ๋ผ ๋ชจ๋ ๊ฒ์ ์ฝ์๋ค.
ํ์ง๋ง 2)์ ์ฝ๋๋ฅผ ์์ฑํ๋ฉด useEffect๊ฐ ํด๋ผ์ด์ธํธ์์ ์คํ๋์ง ์์๋ค.
๊ทธ ์ด์ ๋ฅผ ์ ๊ฒ ๊ฐ๋ค.
Next.js๊ฐ ์ต๋ํ ์๋ฒ ์ปดํฌ๋ํธ๋ก ๋ง๋ค๋ ค ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ ์ฝ๋๋ค. ํ์ง๋ง, ์ต์ ํํ๊ธฐ ์ํด null์ ๋ง๋๋ฉด ๋ ์ด์ ์ฝ์ ํ์๊ฐ ์๋ค๊ณ ์๊ฐํ๋ค. ๊ทธ์ ๊น์ง์ ์ฝ๋๋ง ์ ์ฅํด์ ํด๋ผ์ด์ธํธ์๊ฒ ๋๊ธด๋ค. ๊ฑฐ๊ธฐ๊น์ง์ ์ฝ๋๋ง ํด๋ผ์ด์ธํธ์์ ์คํ๋์ด ๋ฒ๊ทธ๊ฐ ๋๋ ๊ฒ์ด๋ค.
1)
const [isClient, setIsClient] = useState(false);
useEffect(()=>{
setIsClient(true)
},[])
if(!isClient) return null;
2)
const [isClient, setIsClient] = useState(false);
if(!isClient) return null;
useEffect(()=>{
setIsClient(true)
},[])
*์ ๋ง ํด๋ผ์ด์ธํธ์์๋ง ์คํํ๊ณ ์ถ๋ค๋ฉด Next.js dynamic์ ์ฌ์ฉํ๋ฉด ๋๋ค.
'use client'
import dynamic from 'next/dynamic'
const DynamicHeader = dynamic(() => import('../components/header'), {
ssr: false,
})
์๋ฒ ์ปดํฌ๋ํธ๋ ์ง๋ ฌํํด์ ํด๋ผ์ด์ธํธ์๊ฒ ๋ณด๋ด์ง๋ค.
ํ์ง๋ง, ์๋ค์ํผ ํจ์
๋ ์ง๋ ฌํํ ์ ์๋ค.
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์๋ฒ ์ปดํฌ๋ํธ๋ ํจ์ ๋ฑ ์ง๋ ฌํํ ์ ์๋ ๊ฒ๋ค์ด ํฌํจ๋ ์ ์๋ ๊ฒ์ด๋ค.
๊ทธ๋์ ํ๋กญ ํจํด ๊ฐ์ ๊ฒ๋ ํ ์ ์๋ค.
์ฌ์ค ๋๋ ๋ฆฌ์กํธ๊ฐ ์๋ ๋ทฐ๋ ์ค๋ฒจํธ ๊ฐ์ ๋ค๋ฅธ ํ๋ก ํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ? ํ๋ ์์ํฌ?๋ฅผ ์ฌ์ฉํด ๋ณธ ์ ์ด ์๋ค.
๊ทธ๋์, ์ํ ๋ณํ์ ๋ฐ๋ฅธ ๋ทฐ ์ ์ฒด์ ๋ฆฌ๋ ๋๋ง์ ํตํ ์ํ ๊ฐ ์
๋ฐ์ดํธ๊ฐ ์์ฐ์ค๋ฌ์ ๋ค.
ํ์ง๋ง, ๋ค๋ฅธ ํ๋ ์์ํฌ๋ค ์ค์๋ ์๊ทธ๋์ ํตํ ๋ฐ์์ฑ ๋ชจ๋ธ์ ์ ์ฉํ๋ ๊ณณ๋ค์ด ์์๋ค. ์๊ทธ๋์ ํตํ ์ ๋ฐ์ดํธ๋ ๋ ์ธ๋ฐํ๊ณ ๋ ์์ ์์ญ์ ์ ๋ฐ์ดํธํ ์ ์๋ค.
๋ฆฌ์กํธ์ ๋ฐฉ๋ฒ์ ๊ฑฐ์น ๋ฐ์์ฑ์ด๋ค. ์ ์ํ์ ํจ์(์ปดํฌ๋ํธ)๊ฐ ๋ค์ ์คํ๋์ด์ผ ๋ทฐ๊ฐ ์ ๋ฐ์ดํธ ๋๊ธฐ ๋๋ฌธ์ด๋ค.
์ด๋ ๊ฒ ๋ณด๋ฉด ๋ฆฌ์กํธ์ ๋ฐฉ๋ฒ์ด ๋นํจ์จ์ ์ด๋ผ๊ณ ํ ์ ์๋ค.
ํ์ง๋ง, ์ด ๋ฐฉ๋ฒ์ผ๋ก ๋ฆฌ์กํธ๋ ์์ธก ๊ฐ๋ฅ์ฑ์ ๋์ด๊ณ , ์ํ ์
๋ฐ์ดํธ ์ผ๊ด ์ฒ๋ฆฌ๋ ๊ฐ๋ฅํ ๊ฒ์ด๋ค.
memo ๊ฐ์ ํจ์๋ฅผ ์ฌ์ฉํ๋ฉด ๋ทฐ๋ฅผ ๋ฉ๋ชจํํ์ฌ ๋ฆฌ๋ ๋๋ง์ ๋ง์ ์ ์๋ค.
๊ทธ๋ฆฌ๊ณ ์์ง ์ํ ์ค์ด์ง๋ง ํ๊ฐ๊ฐ ์ข์ ๋ฆฌ์กํธ ์ปดํ์ผ๋ฌ๊ฐ ์ ๋๋ก ์ถ์๋๋ฉด, ๋ฉ๋ชจํ์ ๋ํ ๊ณ ๋ฏผ๋ ๋ง์ด ์ฌ๋ผ์ง ๊ฒ์ผ๋ก ๋ณด์ธ๋ค. ์ข์ ํธ๋ ์ด๋ ์คํ์๋ค๊ณ ๋๋ ์๊ฐํ๋ค.
๋ฒ์ญ ์ฑ
์ด์์ง๋ง ์ ์ฝํ๋ ์ฑ
์ด์๋ค.
ํฐ ๊ทธ๋ฆผ์ ๋ค์ ๊ทธ๋ฆฌ๋ฉฐ ์ฝ์ ์ ์์ด ๋ ์ข์ ์ฑ
์ด์๋ค.
์กฐ๋ง๊ฐ ๋ค์ ๋ชจ๋ ๋ฆฌ์กํธ Deep Dive๋ ์ฝ์ด ๋ด์ผ๊ฒ ๋ค.