๐Ÿ“– ์ฑ… ๋ฆฌ๋ทฐ - ใ€Ž ์ „๋ฌธ๊ฐ€๋ฅผ ์œ„ํ•œ ๋ฆฌ์•กํŠธใ€

Maria Kimยท2025๋…„ 1์›” 20์ผ
1
post-thumbnail

https://www.yes24.com/product/goods/140407282

์ถœ์‹œ์ผ

๋น ๋ฅด๊ฒŒ ๋ณ€ํ•˜๋Š” ํ”„๋ก ํŠธ ๊ธฐ์ˆ ์ธ ๋งŒํผ ๊ฐœ๋ฐœ ์ฑ…์€ ์ถœ์‹œ์ผ๊ณผ ํฌํ•จํ•˜๋Š” ๋ฒ„์ „์ด ์ค‘์š”ํ•˜๋‹ค๊ณ  ๋Š๊ปด์ง„๋‹ค.

์ด ์ฑ…์€ 2024๋…„ 12์›” 23์ผ์— ์ถœ๊ฐ„๋œ ๋”ฐ๋ˆ๋”ฐ๋ˆํ•œ ๋ฆฌ์•กํŠธ ์‹ ์ƒ ์ฑ…์ด๋‹ค.
์˜์–ดํŒ์€ 2024๋…„ 03์›” 19์ผ์— ์ถœ์‹œ๋˜์—ˆ๋‹ค๊ณ  ํ•œ๋‹ค.

๊ทธ๋ฆฌ๊ณ , 2024๋…„ 12์›” ์ดˆ์— ์ถœ์‹œ๋œ ๋ฆฌ์•กํŠธ 19...ใ…Ž

ํ•˜์ง€๋งŒ, ์ฑ… ๋‚ด์šฉ์„ ์ฝ์–ด๋ณด๋‹ˆ ๋ฆฌ์•กํŠธ 19์˜ ๋‚ด์šฉ๊นŒ์ง€ ์ฐธ๊ณ ๋œ ํ•œ๊ตญ์–ด ๋ฒˆ์—ญํŒ์ด๋‹ˆ
์ด ๋ถ€๋ถ„์— ๋Œ€ํ•ด์„œ๋Š” ๊ฑฑ์ •ํ•˜์ง€ ์•Š์•„๋„ ๋  ๋“ฏํ•˜๋‹ค.

๋ˆ„๊ตฌ์—๊ฒŒ ์ถ”์ฒœํ• ๊นŒ?

์‚ฌ์‹ค ์ด ์ฑ…์€ ๊ธฐ์ˆ  ํ•˜๋‚˜ํ•˜๋‚˜๋ฅผ ํ•™์Šตํ•˜๊ธฐ ์œ„ํ•œ ์ฑ…์ด๋ผ๊ธฐ๋ณด๋‹จ
์ตœ์‹  ๋ฆฌ์•กํŠธ๊ฐ€ ๋‚˜์•„๊ฐ€๋Š” ๋ฐฉํ–ฅ๊ณผ ์ „์ฒด์ ์ธ ํ๋ฆ„์„ ์•Œ์•„๋ณด๊ธฐ์— ์ข‹์€ ์ฑ…์ด๋‹ค.
ํŠนํžˆ ๋ฆฌ์•กํŠธ๊ฐ€ ์„œ๋ฒ„ ์‚ฌ์ด๋“œ ๋ Œ๋”๋ง์— ์—ด์‹ฌํžˆ์ธ ๋งŒํผ
Next.js๋ฅผ ๋ฐฐ์šฐ๊ธฐ ์‹œ์ž‘ํ–ˆ๊ฑฐ๋‚˜ ํฐ ๊ทธ๋ฆผ์„ ๋‹ค์‹œ ๊ทธ๋ ค๋ณด๊ณ  ์‹ถ์€ ์‚ฌ๋žŒ์—๊ฒŒ ์ข‹์€ ์ฑ…์ธ ๊ฒƒ ๊ฐ™๋‹ค.

์ž์„ธํ•œ ๋‚ด์šฉ์„ ์•Œ๊ณ  ์‹ถ์€ ์‚ฌ๋žŒ๋“ค์€ 2024๋…„ 1์›”์— ์ถœ์‹œ๋œ ๋ชจ๋˜ ๋ฆฌ์•กํŠธ Deep Dive์„ ์ฐธ๊ณ ํ•˜๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค.

๋„์›€์ด ๋๋˜ ๋‚ด์šฉ

'use client' ์•„๋ž˜์˜ ํด๋ผ์ด์–ธํŠธ ์ปดํฌ๋„ŒํŠธ์— ํด๋ผ์ด์–ธํŠธ ๋กœ์ง์ด ์™œ ๋ฌธ์ œ๊ฐ€ ๋˜์–ด ์—๋Ÿฌ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ฌ๊นŒ?

ํด๋ผ์ด์–ธํŠธ ์ปดํฌ๋„ŒํŠธ๋Š” ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ ๋ชจ๋‘์—์„œ ์‹คํ–‰๋œ๋‹ค.

์‹คํ–‰๊ณผ ๋ Œ๋”๋ง๊ณผ๋Š” ๋‹ค๋ฅธ๋‹ค. ์‹คํ–‰์€ ํ•จ์ˆ˜ ํ˜ธ์ถœ์„ ์˜๋ฏธํ•œ๋‹ค.

์„œ๋ฒ„ ์ปดํฌ๋„ŒํŠธ : ์„œ๋ฒ„์—์„œ๋งŒ ์‹คํ–‰๋˜๋Š” ๊ฒƒ์ด ๋งž๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ Œ๋”๋ง๋„ ๋œ๋‹ค.
ํด๋ผ์ด์–ธํŠธ ์ปดํฌ๋„ŒํŠธ : ์„œ๋ฒ„์—์„œ ์‹คํ–‰ -> ๋ฆฌ์•กํŠธ ์—˜๋ฆฌ๋จผํŠธ ๊ฐ์ฒด -> HTML ๋ฌธ์ž์—ด๋กœ ์ง๋ ฌํ™” -> ํด๋ผ์ด์–ธํŠธ๋กœ ์ „์†ก
๊ทธ๋ž˜์„œ, ํด๋ผ์ด์–ธํŠธ ์ปดํฌ๋„ŒํŠธ๋Š” ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ ๋ชจ๋‘์—์„œ ์‹คํ–‰๋œ๋‹ค.

  • 9์žฅ ๋ฆฌ์•กํŠธ ์„œ๋ฒ„ ์ปดํฌ๋„ŒํŠธ 341p, 345p

ํด๋ผ์ด์–ธํŠธ๋Š” ์„œ๋ฒ„์—์„œ ์‹คํ–‰๋œ๋‹ค.

ํ•˜์ง€๋งŒ, ๋ Œ๋”๋ง์ด ๋˜์ง€๋Š” ์•Š๋Š”๋‹ค.
๋Œ€์‹ , ์„œ๋ฒ„๋Š” ํด๋ผ์ด์–ธํŠธ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์œ„ํ•œ ํ”Œ๋ ˆ์ด์Šคํ™€๋”๋ฅผ ๋ Œ๋”๋งํ•œ๋‹ค.
ํ”Œ๋ ˆ์ด์Šคํ™€๋”: ํด๋ผ์ด์–ธํŠธ ๋ฒˆ๋“ค๋Ÿฌ๊ฐ€ ์ƒ์„ฑํ•œ ํŠน์ • ๋ชจ๋“ˆ์— ๋Œ€ํ•œ ์ฐธ์กฐ

ํŠธ๋ฆฌ์˜ ์ง€์ ์— ๋„๋‹ฌํ•˜๋ฉด ํŠน์ • ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์•Œ๋ ค ์ฃผ๋Š” ๊ฒƒ์ด๋‹ค.

  • 9์žฅ ๋ฆฌ์•กํŠธ ์„œ๋ฒ„ ์ปดํฌ๋„ŒํŠธ 341p

โžก๏ธ ์ด๋ ‡๊ฒŒ ํด๋ผ์ด์–ธํŠธ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ฒ˜์Œ ํด๋ผ์ด์–ธํŠธ์—์„œ ๋ Œ๋”๋ง๋  ๋•Œ ๊ฐ™์€ ์žฅ์†Œ์— ๊ฐ™์€ ์ฐธ์กฐ ๊ฐ’์„ ๋ Œ๋”๋ง ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์—.
์„œ๋ฒ„์—์„œ์˜ ๋ Œ๋”๋ง๊ณผ๋Š” ๋‹ค๋ฅธ ๋ Œ๋”๋ง์ด ์ผ์–ด๋‚˜๋ฉด ์ฐธ์กฐ ์˜ค๋ฅ˜๊ฐ€ ๋‚  ์ˆ˜ ์žˆ์–ด์„œ,
์„œ๋ฒ„์™€ ๋‹ค๋ฅธ ๋ Œ๋”๋ง์ด ํด๋ผ์ด์–ธํŠธ์—์„œ ์ผ์–ด๋‚˜๋ฉด ์˜ค๋ฅ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋“ฏํ•˜๋‹ค.

Next.js๋Š” ํด๋ผ์ด์–ธํŠธ๋กœ ์ „๋‹ฌ๋˜๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ์–‘์„ ์ค„์ด๋ ค ํ•œ๋‹ค.

๊ธฐ๋ณธ์ ์œผ๋กœ ์ •์  ์ƒ์„ฑ์„ ์‚ฌ์šฉํ•˜๋ ค ํ•œ๋‹ค.

  • 8์žฅ ํ”„๋ ˆ์ž„์›Œํฌ 319p

์ตœ๋Œ€ํ•œ ์„œ๋ฒ„ ์ปดํฌ๋„ŒํŠธ๋กœ ๋งŒ๋“œ๋ ค ํ•œ๋‹ค.

  • 8์žฅ ํ”„๋ ˆ์ž„์›Œํฌ 320p

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 ๊ฐ™์€ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ทฐ๋ฅผ ๋ฉ”๋ชจํ™”ํ•˜์—ฌ ๋ฆฌ๋ Œ๋”๋ง์„ ๋ง‰์„ ์ˆ˜ ์žˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์•„์ง ์‹œํ—˜ ์ค‘์ด์ง€๋งŒ ํ‰๊ฐ€๊ฐ€ ์ข‹์€ ๋ฆฌ์•กํŠธ ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ œ๋Œ€๋กœ ์ถœ์‹œ๋˜๋ฉด, ๋ฉ”๋ชจํ™”์— ๋Œ€ํ•œ ๊ณ ๋ฏผ๋„ ๋งŽ์ด ์‚ฌ๋ผ์งˆ ๊ฒƒ์œผ๋กœ ๋ณด์ธ๋‹ค. ์ข‹์€ ํŠธ๋ ˆ์ด๋“œ ์˜คํ”„์˜€๋‹ค๊ณ  ๋‚˜๋„ ์ƒ๊ฐํ•œ๋‹ค.

  • 10์žฅ ๋ฆฌ์•กํŠธ ๋Œ€์ฒด์ œ 376p

๋ฒˆ์—ญ ์ฑ…์ด์—ˆ์ง€๋งŒ ์ž˜ ์ฝํžˆ๋Š” ์ฑ…์ด์—ˆ๋‹ค.
ํฐ ๊ทธ๋ฆผ์„ ๋‹ค์‹œ ๊ทธ๋ฆฌ๋ฉฐ ์ฝ์„ ์ˆ˜ ์žˆ์–ด ๋” ์ข‹์€ ์ฑ…์ด์—ˆ๋‹ค.

์กฐ๋งŒ๊ฐ„ ๋‹ค์‹œ ๋ชจ๋˜ ๋ฆฌ์•กํŠธ Deep Dive๋„ ์ฝ์–ด ๋ด์•ผ๊ฒ ๋‹ค.

profile
Frontend Developer, who has business in mind.

0๊ฐœ์˜ ๋Œ“๊ธ€

๊ด€๋ จ ์ฑ„์šฉ ์ •๋ณด