Skip to content

harryk-im/NextJS13_Playground

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

197 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

NEXT.js 13 PlayGround ํšŒ๊ณ ๋ก

๋ชฉ์ฐจ

๋ชจ๋ฐ”์ผ ๋Œ€์‘

๋ Œ๋”๋ง ๋ฐฉ์‹

์„ฑ๋Šฅ๊ฐœ์„ 

UX ํ–ฅ์ƒ (์ค€๋น„์ค‘)

  • ์Šค์ผˆ๋ ˆํ†คUI์™€ Suspense
  • local์—์„œ์˜ hydration์—๋Ÿฌ

์ •๋ฆฌ (์ค€๋น„์ค‘)

  • ๋‚ด๊ฐ€ ๋А๋‚€ NEXT.js 13์˜ app ๋””๋ ‰ํ„ฐ๋ฆฌ
  • SSR SSG CSR
  • next/font, next/image, loading์ปดํฌ๋„ŒํŠธ
  • ๋งˆ๋ฌด๋ฆฌ


๋ชจ๋ฐ”์ผ ๋Œ€์‘

์•ฑ & ์›น ๋ทฐ

"์˜ค ์ด๊ฒŒ ๋„ˆ๊ฐ€ ๋งŒ๋“ ๊ฑฐ์ž„? ์ด๊ฑฐ ์ธํ„ฐ๋„ท์ด์•ผ? ๊ทผ๋ฐ ์š”์ฆ˜ ์•ฑ ๋งŽ์ด ์“ฐ์ง€์•Š์Œ?"

์ด์ „์— ์ง„ํ–‰ํ–ˆ๋˜ '๋‹ค๋…๋‹ค๋…' ํ”„๋กœ์ ํŠธ๋ฅผ ๋น„๊ฐœ๋ฐœ์ž ISTP ์นœ๊ตฌ์—๊ฒŒ ๋ณด์—ฌ์ฃผ๊ณ  ๋งจ ์ฒ˜์Œ์œผ๋กœ ๋“ค์—ˆ๋˜ ๋ง.

์ •๋ณด: ISTP๋Š” ํ”„๋กœ ํŒฉํญ๋Ÿฌ ์ด๋‹ค.


์ ์  ๋ชจ๋ฐ”์ผ ๊ธฐ๊ธฐ๋ฅผ ํ†ตํ•ด ์„œ๋น„์Šค๋ฅผ ์ด์šฉํ•˜๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ๋Š˜์–ด๋‚˜๊ณ  ์žˆ๋‹ค๊ณ  ์ƒ๊ฐ๋˜๋Š” ๋งŒํผ ํ•ญ์ƒ ๋ญ”๊ฐ€๋ฅผ ๋งŒ๋“ค๋ ค๊ณ  ํ• ๋•Œ ๊ณ ๋ฏผํ•˜๋Š”๊ฒŒ ๋ฐ”๋กœ ๋ชจ๋ฐ”์ผ ์•ฑ๋ทฐ์ด๋‹ค.

์–ด๋–ป๊ฒŒ ํ•˜๋ฉด ์•ฑ๊ณผ ์›น, 2๋งˆ๋ฆฌ์˜ ํ† ๋ผ๋ฅผ ํ•œ๊บผ๋ฒˆ์— ์žก์„ ์ˆ˜ ์žˆ์„๊นŒ? ํ•˜๋‹ค๊ฐ€ ์ด์ „ '์Šค์œ—๋ฏธ' ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•  ๋•Œ ํŒ€์›๋“ค๊ณผ ๊ณ ์ƒํ•˜๋ฉฐ ์™€์ด์–ดํ”„๋ ˆ์ž„์„ ์งฐ๋˜ ๊ธฐ์–ต์„ ๋Œ์•„๋ณด๋ฉฐ ์™€์ด์–ด ํ”„๋ ˆ์ž„์„ ์ง์ ‘ ์งœ๋ณด์•˜๋˜๊ฒŒ ์ด ํ”„๋กœ์ ํŠธ์˜ ์•ฑ๋ทฐ๋ฅผ ๋งŒ๋“ค ๋•Œ ์ •๋ง ํฐ ๋„์›€์ด ๋˜์—ˆ๋˜๊ฒƒ ๊ฐ™๋‹ค. ์™€์ด์–ดํ”„๋ ˆ์ž„ ๋ณด๋Ÿฌ๊ฐ€๊ธฐ

์™€์ด์–ดํ”„๋ ˆ์ž„์„ ํ† ๋Œ€๋กœ CoffeeList, CoffeeItem๊ณผ ๊ฐ™์€ ์ปดํฌ๋„ŒํŠธ๋“ค์ด ํ™”๋ฉด์˜ ํฌ๊ธฐ์—๋”ฐ๋ผ ๋ณ€ํ™”์‹œํ‚ฌ ํฌ๊ธฐ๋ฅผ ๋ฏธ๋ฆฌ ์ƒ๊ฐํ•ด ๋ณผ ์ˆ˜ ์žˆ์—ˆ๊ณ  ์ถ”ํ›„ ๋ฏธ๋””์–ด์ฟผ๋ฆฌ๋ฅผ ์ ์šฉํ• ๋•Œ ์ˆ˜์›”ํ•˜๊ฒŒ ์ง„ํ–‰๋˜์—ˆ๋‹ค.



์‚ฌ์ด๋“œ๋ฐ” ๋„ˆ๋ž€ ๋…€์„โ€ฆ

์ฒ˜์Œ์—๋Š” ๊ฐ„๋‹จํ•˜๊ฒŒ ๊ธˆ๋ฐฉ ๋š๋”ฑ๋š๋”ฑ ๋งŒ๋“ค ์ˆ˜ ์žˆ์„์ค„ ์•Œ์•˜๋‹ค. ์Šคํƒ€์ผ๋ง์„ ๋๋งˆ์น˜๊ณ  ๊ธฐ๋Šฅ์„ ์ง‘์–ด ๋„ฃ๊ธฐ ์ „๊นŒ์ง„โ€ฆ

๊ทผ๋ฐ ์™ ๊ฑธ? ํ…Œ์ŠคํŠธ๋ฅผ ํ•ด๋ณด๋Š”๋ฐ UX์ ์œผ๋กœ ๊ณ ๋ คํ•ด์•ผํ•  ๋ถ€๋ถ„์ด ์—„์ฒญ ๋งŽ์•˜๋‹ค.

  • ๋‹ซ๊ธฐ ๋ฒ„ํŠผ ๋ˆŒ๋ €์„ ๋•Œ clickEvent
  • esc๋ฅผ ๋ˆŒ๋ €์„ ๋•Œ ๋‹ซํžˆ๊ฒŒ ํ•˜๋Š” keyPressEvent
  • ์‚ฌ์ด๋“œ๋ฐ” ๋ฐ”๊นฅ์š”์†Œ(background)๋ฅผ ๋ˆŒ๋ €์„ ๋•Œ ๋‹ซํžˆ๊ฒŒ ํ•˜๋Š” clickEvent
  • ์‚ฌ์ด๋“œ๋ฐ” ๋ฐ”๊นฅ์š”์†Œ๋“ค์˜(์˜ˆ: HeaderLogo) ํด๋ฆญ์ด๋ฒคํŠธ๊ฐ€ ๋™์ž‘ํ•˜์ง€ ์•Š๊ฒŒ ํˆฌ๋ช…ํ•œ div์š”์†Œ๋กœ ๊ฐ€๋ฆฌ๊ธฐ
  • ๋‹ค๋ฅธ ํŽ˜์ด์ง€๋กœ ๋ผ์šฐํŒ… ๋˜์—ˆ์„ ๋•Œ toggleState false๋กœ ์ดˆ๊ธฐํ™”

๊ทธ๋ฆฌ๊ณ  ์ด๋•Œ ์‚ฌ์šฉ๋˜๋Š” sideBarToggleState๋ฅผ ์ ์šฉํ•˜๋Š” ๋ฐ ์ด์ „์— ๊ตฌํ˜„ํ•ด ๋†“์•˜๋˜ ์ปดํฌ๋„ŒํŠธ๋“ค์„ ํ‰์†Œ ์Šต๊ด€๋Œ€๋กœ ๊ณผ๋„ํ•˜๊ฒŒ ๋ถ„๋ฆฌํ•ด๋†“์€ ํƒ“์— ์—„์ฒญ๋‚œ propsDrilling์ด ๋ฐœ์ƒํ–ˆ๋‹ค.

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



๋ Œ๋”๋ง ๋ฐฉ์‹

๊ฐœ์š”

์‚ฌ์‹ค ๋ Œ๋”๋ง์— ๋Œ€ํ•œ ๋ถ€๋ถ„์€ ํฌ๊ฒŒ ์‹ ๊ฒฝ์„ ์•ˆ์“ฐ๊ณ  ์žˆ์—ˆ๋Š”๋ฐ Data-Fetching๊ณผ ๊ด€๋ จ๋œ docs๋ฅผ ์ฐพ์•„๋ณด๋‹ค๊ฐ€ ์šฐ์—ฐํžˆ SSR, SSG์— ๋Œ€ํ•œ ๋‚ด์šฉ๊ณผ ๋งˆ์ฃผํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค. ์‚ฌ์‹ค ์ด๋ถ€๋ถ„์— ๋Œ€ํ•œ ์ƒ๊ฐ์ด ๋„ˆ๋ฌด๋„ˆ๋ฌด๋„ˆ๋ฌด๋‚˜๋„ ๋งŽ๊ณ  ๊ถ๊ธˆํ•œ๋ถ€๋ถ„๋„ ์ •๋ง ๋งŽ์ง€๋งŒ ์ „๋ถ€ ์ ์ง€๋Š” ๋ชปํ• ๊ฒƒ๊ฐ™๋‹ค. (SSR ์ ์šฉ๊ณผ ํ•ด๋‹น ํ”„๋กœ์ ํŠธ ๊ทœ๋ชจ๊ฐ€ ์ปค์กŒ์„๋•Œ ์„œ๋ฒ„ ๋ฐ ์ธํ”„๋ผ๊ตฌ์ถ•์— ๋Œ€ํ•œ ๋ถ€๋‹ด, ์ด๋Ÿฌํ•œ ํ”„๋กœ์ ํŠธ ๋นŒ๋“œ์‹œ์— devOps ๋ถ„์•ผ์—์„œ ๊ธฐ์—ฌ๋˜๋Š” ๋ถ€๋ถ„์€?, SSR ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ์—†๋‹ค๋ฉด SSR์€ ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„๋˜๋Š”๊ฐ€? ISR์€ ๋˜ ๋ญ์ง€? ๋“ฑ๋“ฑ)

์•„๋ฌดํŠผโ€ฆ ์ด์ „์— ์ง„ํ–‰ํ–ˆ๋˜ โ€˜๋‹ค๋…๋‹ค๋…โ€™ ํ”„๋กœ์ ํŠธ์—์„œ๋„ NEXT.js๋ฅผ ์ผ์ง€๋งŒ SSR์— ๋Œ€ํ•œ ๋ถ€๋ถ„์€ ๊ตฌํ˜„ํ•˜์ง€ ๋ชปํ•˜์—ฌ ํŒ€์›๋“ค๊ณผ ์ด์•ผ๊ธฐ๋ฅผ ๋‚˜๋ˆ„๋‹ค๊ฐ€ โ€˜์ด๋Ÿด๊ฑฐ๋ฉด ์šฐ๋ฆฌ๋Š” ์™œ NEXT.js๋ฅผ ์ผ๋Š”๊ฐ€?โ€™ ์— ๋Œ€ํ•œ ์ด์•ผ๊ธฐ๋„ ์ž ๊น ๋‚˜์™”์—ˆ๊ณ , ์ƒ๋‹นํžˆ ํ—ค๋น„ํ•œ 3D์ฑ… ์ปดํฌ๋„ŒํŠธ๊นŒ์ง€ CSR๋กœ ํ•˜๋‹ค๋ณด๋‹ˆ ๋กœ๋”ฉ์‹œ๊ฐ„์ด ๋‹ค์†Œ ๋А๋ฆฐํŽธ์ด๋‹ค. ๊ทธ๋•Œ์˜ ์•„์‰ฌ์›€์ด ๋‚จ๊ธฐ๋„ํ•˜๊ณ  ํ† ์ด ๊ทœ๋ชจ์˜ ํ”„๋กœ์ ํŠธ์—์„œ SSR๊ตฌํ˜„์„ ์—ฐ์Šต ํ•ด๋ณธ๋‹ค๋ฉด ๋ถ„๋ช… ๋‹ค๋ฅธ ํ”„๋กœ์ ํŠธ์— ์ ์šฉํ•˜๋Š”๋ฐ ํ—ˆ๋“ค์ด ๋‚ฎ์•„์งˆ ์ˆ˜ ์žˆ์„๊ฒƒ์ด๋ผ ์ƒ๊ฐํ•˜์—ฌ ์ด๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ๋กœ ๋งˆ์Œ๋จน์—ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ณ ๋ฏผ๊ณผ ์ดํ›„ ์‹œํ–‰์ฐฉ์˜ค ๋์— SSR๊ณผ SSG๋ฅผ ๊ตฌํ˜„ํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.



SSR๊ณผ SSG ์ด์•ผ๊ธฐ

SSR์— ๊ด€ํ•œ ๋‚ด์šฉ์„ ์ฐพ์•„๋ณด๋‹ค๊ฐ€ SSG์— ๋Œ€ํ•œ ๊ฐœ๋…๋„ ์•Œ๊ฒŒ ๋˜์—ˆ๋Š”๋ฐ ์ƒ๋‹นํžˆ ํฅ๋ฏธ๋กœ์› ๋‹ค. ์ด ๋‘˜์„ ๋น„๊ตํ•ด์„œ ์„ค๋ช…ํ•˜๋ฉด ๋ญ”๊ฐ€ ๋” ๊ธฐ์–ต์—๋„ ์˜ค๋ž˜๋‚จ๊ณ  ์ฝ๋Š”์ด๋กœ ํ•˜์—ฌ๊ธˆ ์‰ฝ๊ฒŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์„๊ฒƒ ๊ฐ™๋‹ค.

SSR(Server Side Rendering)

  • ๋œป: SSR์„ ์ง์—ญํ•˜๋ฉด ๋ง ๊ทธ๋Œ€๋กœ ์„œ๋ฒ„์—์„œ ๋ Œ๋”๋ง์„ ํ•œ๋‹ค๋Š” ๋œป์ด๋‹ค.
  • ์›น ํŽ˜์ด์ง€ ์ƒ์„ฑ: ์š”์ฒญ์ด ๋“ค์–ด์˜ฌ๋•Œ ๋งˆ๋‹ค ์‹ค์‹œ๊ฐ„์œผ๋กœ ์›นํŽ˜์ด์ง€๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
  • SSG์™€๋Š” ๋‹ค๋ฅด๊ฒŒ ๋™์ ์ด๋‹ค.
  • ํŽ˜์ด์ง€ ์ด๋™์‹œ๋งˆ๋‹ค ์„œ๋ฒ„์—์„œ ์›นํŽ˜์ด์ง€๋ฅผ ์ƒ์„ฑํ•˜๋ฏ€๋กœ ๊ฒฝ์šฐ์—๋”ฐ๋ผ ๋กœ๋”ฉ ์†๋„๊ฐ€ ๋น ๋ฅด๊ฑฐ๋‚˜ ๋А๋ฆฌ๋‹ค.
    • ๋กœ๋“œ๋˜๋Š” ํŽ˜์ด์ง€์˜ ํฌ๊ธฐ๋ฅผ ๊ณ ๋ คํ•˜์—ฌ, ๊ฒฝ์šฐ์— ๋”ฐ๋ผ CSR๊ณผ SSR์„ ์ ์ ˆํ•˜๊ฒŒ ๊ตฌํ˜„ํ•˜๋Š”๊ฒŒ ์ข‹์„๊ฒƒ์ด๋‹ค.
    • ์ด๋ฅผ ๊ณ ๋ คํ•˜์ง€ ์•Š๊ณ  ๋ฌด์ง€์„ฑ ๊ตฌํ˜„์„ ํ•œ๋‹ค๋ฉด ์‚ฌ์šฉ์ž๋Š”โ€ฆ
  • ์„œ๋ฒ„์ธก์—์„œ ์›นํŽ˜์ด์ง€๋ฅผ ์ƒ์„ฑํ•˜๋ฏ€๋กœ SEO์™€ ์นœํ™”์ ์ด๋‹ค

SSG(Static Site Generator)

  • ๋œป: ์ •์  ์‚ฌ์ดํŠธ ์ƒ์„ฑ๊ธฐ ๋ผ๋Š” ๋œป์ด๋‹ค.
  • ์›น ํŽ˜์ด์ง€ ์ƒ์„ฑ: ์›น ํŽ˜์ด์ง€๋ฅผ ๋นŒ๋“œํ•  ๋•Œ(๋ฐฐํฌ ์‹œ์—)๋งŒ ์›นํŽ˜์ด์ง€๋ฅผ ์ƒ์„ฑ(์—…๋ฐ์ดํŠธ)ํ•œ๋‹ค.
  • ์™„์ „ ์ •์ ์ด๋‹ค. ๋”ฐ๋ผ์„œ ๋ฐ์ดํ„ฐ๊ฐ€ ์ž์ฃผ ๋ฐ”๋€Œ๋Š” ๊ณณ์—๋Š” ์ ํ•ฉํ•˜์ง€์•Š๋‹ค.
  • ๋นŒ๋“œ ์ดํ›„(๋ฐฐํฌ ์ดํ›„)์— ๋กœ๋”ฉ์†๋„๊ฐ€ ์•„์ฃผ ๋น ๋ฅด๋‹ค.
  • ์„œ๋ฒ„์ธก์—์„œ ์›นํŽ˜์ด์ง€๋ฅผ ์ƒ์„ฑํ•˜๋ฏ€๋กœ SEO์™€ ์นœํ™”์ ์ด๋‹ค


๊ตฌํ˜„

์‚ฌ์‹ค SSR, SSG ๋‘˜ ๋‹ค ๊ตฌํ˜„ํ•˜๋˜ ์ค‘ ๊ต‰์žฅํžˆ ๋งŽ์€ (๊ธ์ •์ ์ธ?)์ŠคํŠธ๋ ˆ์Šค๋ฅผ ๋ฐ›์•˜๋‹ค. ์–ด๋–ป๊ฒŒ ํ•˜๋ฉด ๋‘๊ฐ€์ง€ ๋ชจ๋‘ ์˜๋ฏธ์žˆ๊ฒŒ ๊ตฌํ˜„ํ•ด ๋‚ผ ์ˆ˜ ์žˆ์„๊นŒ ๊ณ ๋ฏผ์˜ ์—ฐ์†์ด์˜€๋‹ค.

์ ์ ˆํ•˜๊ฒŒ SSR๊ณผ SSG๋ฅผ ๊ตฌํ˜„ํ•ด์•ผ ์ฐธ ๋œ ์˜๋ฏธ๊ฐ€ ์žˆ๊ณ  ๊ตฌํ˜„์ดํ›„์—๋„ ๋ณด๋žŒ์„ ๋А๋ผ๋ฉฐ โ€˜๋‚˜ ํ•œ ๋‹จ๊ณ„ ๋” ์„ฑ์žฅํ–ˆ๋‹ค!โ€™ ๋ผ๋Š” ๋А๋‚Œ์„ ๋ฐ›์„๊ฒƒ ๊ฐ™์•˜๊ธฐ์— ์–ด๋–ป๊ฒŒ ์ ์ ˆํ•˜๊ฒŒ ๋‘๊ฐ€์ง€ ๋ชจ๋‘ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์„๊นŒ ๊ณ ๋ฏผํ–ˆ๋˜๊ฒƒ๊ฐ™๋‹ค.

์ผ๋‹จ ์ปคํ”ผ ๋ฉ”๋‰ด ๋ฆฌ์ŠคํŠธ๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ํŽ˜์ด์ง€์—์„œ๋Š” SSR๋กœ ๊ตฌํ˜„ํ•˜์˜€๋‹ค. ์„œ๋ฒ„์ธก์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€๊ฒฝ๋˜๊ฑฐ๋‚˜ ํด๋ผ์ด์–ธํŠธ์ธก์—์„œ ์š”์ฒญ์ด ๋“ค์–ด์˜ค๋ฉด pre-rendering์ด ์ง„ํ–‰๋œ๋‹ค. ์™œ ์ด ํŽ˜์ด์ง€๋ฅผ SSR๋กœ ๊ตฌํ˜„ํ–ˆ์–ด? ๋ผ๊ณ  ํ•˜์‹ ๋‹ค๋ฉดโ€ฆ

SSR ๊ตฌํ˜„ ํŽ˜์ด์ง€ (์นดํŽ˜ ๋ฉ”๋‰ด ๋ฆฌ์ŠคํŠธ ํŽ˜์ด์ง€)

  • ๋กœ๋“œ๋˜๋Š” ๋ฐ์ดํ„ฐ์˜ ํฌ๊ธฐ๊ฐ€ ํฌ์ง€์•Š๋‹ค
    • ์ดˆ๊ธฐ ๋ Œ๋”๋ง์˜ ์†๋„์— ๋Œ€ํ•œ ๊ณ ๋ฏผ์ด ์—†์—ˆ๊ณ  ๋ฐ์ดํ„ฐ๊ฐ€ ์—…๋ฐ์ดํŠธ ๋ ๋•Œ๋งˆ๋‹ค ํ˜น์€ ํด๋ผ์ด์–ธํŠธ์ธก์—์„œ ์š”์ฒญ์ด ๋“ค์–ด์˜ฌ ๋•Œ ๋งˆ๋‹ค ์ ์ ˆํ•˜๊ฒŒ ๋กœ๋”ฉ๋  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค.
  • ๋กœ๋“œ๋˜๋Š” ๋ฐ์ดํ„ฐ์˜ ํฌ๊ธฐ๊ฐ€ ์ปค์ง„๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ํ• ๊ป€๋ฐ?
    • ํ˜„ ํ”„๋กœ์ ํŠธ ์ฒ˜๋Ÿผ ๋ฆฌ์ŠคํŠธ ํ˜•ํƒœ์˜ ์ปจํƒ ์ธ ์—๋Š” ๋ฌดํ•œ ์Šคํฌ๋กค ๊ธฐ๋Šฅ์„ ๋„ฃ์„ ์ˆ˜ ์žˆ๋‹ค.
    • ์ด๋ฏธ์ง€ ์ปจํƒ ์ธ  ํฌ๊ธฐ๋ฅผ ์‚ฌ์ „์— ์ •์˜, LazyLoading ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€, ์ด๋ฏธ์ง€ ์ตœ์ ํ™” ์ž‘์—…์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • SEO์ธก์—์„œ ์ข‹๋‹ค
    • ๊ฒ€์ƒ‰์—”์ง„ ๋…ธ์ถœ์—์„œ ์ด์ ์„ ๊ฐ–์œผ๋ฏ€๋กœ ์ด๊ฒŒ ์‹ค์ œ ์„œ๋น„์Šค์ด๊ณ  ์ดˆ๊ธฐ HTML์ƒ์„ฑ์‹œ์— ๊ด€๋ จ ์ปจํƒ ์ธ ๋“ค์ด ์™„์„ฑ์ด ๋œ๋‹ค๋ฉด ๊ฒ€์ƒ‰์‹œ์— ์ž์ฃผ ๋…ธ์ถœ ๋  ์ˆ˜ ์žˆ๋‹ค.

SSG ๊ตฌํ˜„ ํŽ˜์ด์ง€ (๊ธฐ์ˆ  ์Šคํƒ, ๋งŒ๋“  ๊ณ„๊ธฐ ํŽ˜์ด์ง€)

  • ํŽ˜์ด์ง€ ๋Œ€๋ถ€๋ถ„์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์—…๋ฐ์ดํŠธ ๋˜์ง€ ์•Š๋Š”๋‹ค. ๋ง ๊ทธ๋Œ€๋กœ ์ •์ ์ด๋‹ค.
    • ์‚ฌ์šฉํ–ˆ๋˜ ๊ธฐ์ˆ ์Šคํƒ์ด ๋ฐ”๋€Œ๊ฑฐ๋‚˜, ์ด ํ† ์ด ํ”„๋กœ์ ํŠธ๊ฐ€ ๋งŒ๋“  ๊ณ„๊ธฐ๊ฐ€ ๋ฐ”๋€Œ์ง„ ์•Š์œผ๋ฏ€๋กœ ๋ณด์—ฌ์ค„ ๋ฐ์ดํ„ฐ๋Š” ์ •์ ์ด๋ผ๊ณ  ๋งํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™๋‹ค.
    • ๊ทธ๋ž˜์„œ SSG ๊ตฌํ˜„ ๋ฐฉ์‹์ด ์•„์ฃผ ์ž˜ ๋งž๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค.
  • ๋ฐฐํฌ ์ดํ›„ ๋กœ๋”ฉ์†๋„๊ฐ€ ๋น ๋ฅด๋‹ค.
    • CSR๊ณผ๋Š” ๋‹ค๋ฅด๊ฒŒ ๋นŒ๋“œ์‹œ์— ์›นํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“ค์–ด ๋†“์€ ์ƒํƒœ์ด๋ฏ€๋กœ ํŽ˜์ด์ง€ ๋กœ๋”ฉ์†๋„๊ฐ€ ๋น ๋ฅด๋‹ค.
  • SEO์™€ ์นœํ™”์ ์ด๋‹ค.
    • CSR๊ณผ ๋˜๋‹ค๋ฅธ ์ฐจ์ด์ ์ด๋ผ๊ณ  ๋งํ•  ์ˆ˜ ์žˆ๋Š”๊ฒŒ ์„œ๋ฒ„์ธก์—์„œ ๋ฏธ๋ฆฌ HTML์„ ์ƒ์„ฑํ•ด ๋†“์œผ๋ฏ€๋กœ ๊ฒ€์ƒ‰์—”์ง„ ๋…ธ์ถœ์— ์ด์ ์„ ๊ฐ–๋Š”๋‹ค.


์„ฑ๋Šฅ๊ฐœ์„ 

์‚ฌ์‹ค ํ•ด๋‹น ํ”„๋กœ์ ํŠธ์—์„œ ๋ฐ์ดํ„ฐ ํ˜น์€ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋งŽ๊ฑฐ๋‚˜ ๋กœ์ง์ด ๋ณต์žกํ•œ๊ฒƒ์€ ์ ˆ๋Œ€๋กœ ์•„๋‹ˆ์˜€์ง€๋งŒ ํ•œ๋ฒˆ ์ฏค ์‹œ๋„ํ•ด ๋ณด๊ณ ์‹ถ์—ˆ๋˜ ์„ฑ๋Šฅ๊ฐœ์„ ์ด์˜€๋‹ค. ๊ทธ๋ž˜์„œ Web Core Vital์— ๋Œ€ํ•ด ์ฐพ์•„๋ณด๊ณ  LCP, TTI, CLS์— ๋Œ€ํ•œ๊ฒƒ์„ ์•Œ๊ฒŒ๋˜์—ˆ๊ณ  ์ด 3๊ฐ€์ง€๋ฅผ ์ค‘์ ์ ์œผ๋กœ ์„ฑ๋Šฅ๊ฐœ์„ ์„ ํ•ด๋ณด์•˜๋‹ค.


LCP (Largest Contentful Paint)

์•„๋ฌด๋ž˜๋„ LCP์„ฑ๋Šฅ์ด ์ž˜ ๋‚˜์™€์ค˜์•ผ TTI์„ฑ๋Šฅ ๋˜ํ•œ ์ž˜๋‚˜์˜ค๋Š”๊ฒƒ๊ฐ™๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค. ๊ทธ๋ž˜์„œ LCP๋ฅผ ๊ฐœ์„ ํ•˜๊ธฐ ์œ„ํ•ด NEXT์—์„œ ์ œ๊ณตํ•˜๋Š” next/image๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์ด๋ฅผ ๊ฐœ์„ ํ•ด๋ณด์•˜๋‹ค. ๊ทธ๋Ÿผ next/image๋กœ ๋‚˜๋Š” ์–ด๋– ํ•œ ์ด์ ์„ ์–ป์—ˆ์„๊นŒ?

  • ์ด๋ฏธ์ง€ ์ตœ์ ํ™”, ์ด๋ฏธ์ง€ ํ™•์žฅ์ž๋ฅผ .webp๋กœ ๋ฐ”๊พธ์–ด ์ค€๋‹ค
    • ํ˜„์žฌ api์ธก์—์„œ ๋ณด๋‚ด์ฃผ๋Š” ์ด๋ฏธ์ง€ ํ™•์žฅ์ž๋Š” .jpg์ธ๋ฐ .webp๋กœ ๋ณ€ํ™˜ํ•จ์œผ๋กœ์จ 25%~34%์˜ ์šฉ๋Ÿ‰์ฐจ์ด๋ฅผ ๋ณด์—ฌ์ค€๋‹ค.
  • LazyLoading์„ ์ง€์›ํ•œ๋‹ค.
    • ์‚ฌ์šฉ์ž ํ™”๋ฉด์— ๋ณด์—ฌ์ง€์ง€ ์•Š๋Š” ๋ถ€๋ถ„์˜ ์ปจํƒ ์ธ ๋Š” ๋กœ๋”ฉ์‹œํ‚ค์ง€ ์•Š๊ณ  ์žˆ๋‹ค๊ฐ€ ํ™”๋ฉด ์Šคํฌ๋กค์„ ํ†ตํ•ด ์ปจํƒ ์ธ ๋ฅผ ๋ณด๊ฒŒ ๋ ๋•Œ ๋กœ๋”ฉ์‹œํ‚จ๋‹ค.
  • ์‚ฌ์ „์— ์ปจํƒ ์ธ  ์‚ฌ์ด์ฆˆ ๊ฐ’์„ optionalํ•˜๊ฒŒ ๋ฐ›์•„ ์„œ๋ฒ„์ธก์—์„œ ๋กœ๋”ฉ์‹œ์— ๋ถ€๋‹ด์„ ์ค„์—ฌ์ค„ ์ˆ˜ ์žˆ๋‹ค.

์œ„์™€๊ฐ™์€ next/image๊ฐ€ ์ง€์›ํ•˜๋Š” ๊ธฐ์ˆ ๋“ค์„ ์ดํ•ดํ•˜๊ณ  ์ด๋ฅผ ์ ์šฉํ•˜๋‹ˆ LCP์„ฑ๋Šฅ ์ ์ˆ˜์—๋Š” ์ดˆ๋ก๋ถˆ์ด ๋“ค์–ด์™”๋‹ค.


TTI (Time to Interactive)

์œ„์—์„œ ์–ธ๊ธ‰ ํ–ˆ๋“ฏ์ด ์ด๋ฏธ์ง€ ๋ถ€๋ถ„์—์„œ๋Š” next/image ํ•˜๋‚˜๋งŒ์œผ๋กœ ์‰ฝ๊ฒŒ ์ตœ์ ํ™”์ž‘์—…์ด ๊ฐ€๋Šฅํ–ˆ๋‹ค. ๊ทธ ์™ธ์˜ ๋ถ€๋ถ„๋“ค์€ ์–ด๋–ป๊ฒŒ ํ•˜๋ฉด TTI์„ฑ๋Šฅ์„ ๋†’ํž ์ˆ˜ ์žˆ์„๊นŒ ๊ณ ๋ฏผํ•ด๋ณด์•˜๊ณ  ์ง€๊ธˆ ํ”„๋กœ์ ํŠธ ์•ˆ์—์„œ ํ•  ์ˆ˜ ์žˆ๋Š”๊ฑธ ์ฐพ์•„๋ณด์•˜๋‹ค.

  • ๋ถˆํ•„์š”ํ•œ ์ปดํฌ๋„ŒํŠธ ์‚ญ์ œ ๋ฐ ๋ณ‘ํ•ฉ
    • ์ด์ƒํ•˜๊ฒŒ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋„ˆ๋ฌด atomicํ•˜๊ฒŒ ๋‚˜๋ˆ„๋Š” ํ‰์†Œ ์Šต๊ด€์ด ์žˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋‚ด ์ฝ”๋“œ์—์„œ ๋„ˆ๋ฌด ์„ธ๋ถ€์ ์œผ๋กœ ๋‚˜๋ˆ„๋ฉด์„œ ๋ถˆํ•„์š”ํ•˜๊ฒŒ ๋งŒ๋“ค์–ด์ง„ ์Šคํƒ€์ผ ์ปดํฌ๋„ŒํŠธ๋“ค์„ ๋ฐœ๊ฒฌํ–ˆ๋‹ค.
    • PullRequest 01
    • PullRequest 02

CLS (Cumulative Layout Shift)

์‚ฌ์‹ค ์ด ํ”„๋กœ์ ํŠธ์—์„œ CLS์˜ ์„ฑ๋Šฅ์€ ์ปจํƒ ์ธ ๊ฐ€ ๋งŽ์ด ์—†๊ธฐ๋„ ํ•˜๊ณ  ์œ„์—์„œ ๋งํ–ˆ๋˜ next/image์—์„œ๋Š” placeholder ๊ธฐ๋Šฅ๋„ ์ œ๊ณตํ•˜๊ธฐ๋•Œ๋ฌธ์— Layout Shift ํ˜„์ƒ์€ ์™„์ „ ํšŒํ”ผํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

๋˜ํ•œ ํ”„๋กœ์ ํŠธ ์‹œ์ž‘์ „์— ์™€์ด์–ดํ”„๋ ˆ์ž„์„ ์ž‘์„ฑํ•˜๊ณ  ๋งˆํฌ์—… ์ž‘์—…์„ ํ•˜๋ฉด์„œ ์ปจํƒ ์ธ ๊ฐ€ ๋“ค์–ด๊ฐˆ ๋ถ€๋ถ„๊ณผ ์ปจํƒ ์ธ ๋ฅผ ๊ฐ์‹ธ๋Š” ์ปจํ…Œ์ด๋„ˆ ๊ด€๋ จ ์ปดํฌ๋„ŒํŠธ๋“ค์˜ ์‚ฌ์ด์ฆˆ๋ฅผ ๋ฏธ๋ฆฌ ์ •์˜ํ•ด ๋†“์•„์„œ Layout Shift ํ˜„์ƒ์„ ํ”ผํ•˜๋Š”๋ฐ ๋„์›€์ด ๋˜์—ˆ์„์ง€๋„ ๋ชจ๋ฅด๊ฒ ๋‹ค.




UX ํ–ฅ์ƒ

์ค€๋น„์ค‘์ž…๋‹ˆ๋‹ค.




์ •๋ฆฌ

์ค€๋น„์ค‘์ž…๋‹ˆ๋‹ค.

About

๐Ÿ› NEXT.js 13, ํŽ˜์ด์ง€ ๋ Œ๋”๋ง, data-fetch ๋“ฑ ์–ด์ƒ‰ํ•œ ๊ธฐ์ˆ ๋“ค๊ณผ ์นœํ•ด์ง€๋Š” ๋‚˜๋งŒ์˜ ๋†€์ดํ„ฐ

Topics

Resources

Stars

9 stars

Watchers

1 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors