getStaticProps

getStaticProps(Static Generation)

ํŽ˜์ด์ง€ ์ปดํฌ๋„ŒํŠธ์—์„œ ์ด๋Ÿฐ ํ•จ์ˆ˜๋ฅผ exportํ•ด์ฃผ๋ฉด ๋นŒ๋“œ ํƒ€์ž„์— HTML์„ ์ƒ์„ฑํ•ด์ค€๋‹ค. ์ด๋•Œ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ „๋‹ฌ๋œ context์—๋Š” ๋‹ค์Œ๊ฐ’๋“ค์ด ๋“ค์–ด์žˆ๋‹ค.

  • params - ํŽ˜์ด์ง€์˜ ๋ผ์šฐํŒ…๊ณผ ๊ด€๋ จ๋œ ๊ฐ’๋“ค์ด ๋“ค์–ด์žˆ๋‹ค. ๋งŒ์•ฝ ํŒŒ์ผ๋ช…์ด [id].js๊ณ  ๋ผ์šฐํŒ…์ด /1 ์ธ ๊ฒฝ์šฐ params์—๋Š” { id: 1 }์ด ๋“ค์–ด์žˆ๊ฒŒ๋œ๋‹ค.

  • preview - ํŽ˜์ด์ง€๊ฐ€ preview๋ชจ๋“œ์ธ ๊ฒฝ์šฐ true๋‹ค.

  • previewData - setPreviewDataํ•จ์ˆ˜์— ์˜ํ•ด ์„ค์ •๋œ preview data๋ฅผ ํฌํ•จํ•œ๋‹ค.

getStaticProps๋Š” ํด๋ผ์ด์–ธํŠธ์—์„œ๋Š” ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š”๋‹ค. ๊ทธ๋ž˜์„œ ์„œ๋ฒ„์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์ฝ”๋“œ๋ฅผ ์ด ํ•จ์ˆ˜์— ์ ์–ด์ค„ ์ˆ˜ ์žˆ๊ณ  ํŒŒ์ผ์‹œ์Šคํ…œ์ด๋‚˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—๋„ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ฐ„๋‹จํ•œ ์˜ˆ์ œ

๋ธ”๋กœ๊ทธ๋ฅผ ๋งŒ๋“ค๋•Œ getStaticProps๋ฅผ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

์–ธ์ œ getStaticProps๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋‚˜์š”?

  • ํŽ˜์ด์ง€๋ฅผ ๋นŒ๋“œ ํƒ€์ž„์— ๋ฏธ๋ฆฌ ์ƒ์„ฑํ•ด๋„ ๊ดœ์ฐฎ์€ ๊ฒฝ์šฐ (๊ผญ ์œ ์ €์˜ ์š”์ฒญ์ด ์—†์–ด๋„ ๋ฏธ๋ฆฌ ๋ฐ์ดํ„ฐ๋ฅผ ๊ตฌํ•ด์˜ฌ ์ˆ˜ ์žˆ์„๋•Œ)

  • Headless CMS๋กœ ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ฌ ๋•Œ

  • ๋ฐ์ดํ„ฐ๊ฐ€ ์บ์‹ฑ๋˜์–ด๋„ ์ƒ๊ด€ ์—†์„ ๋•Œ

  • ํŽ˜์ด์ง€๊ฐ€ ๋งค์šฐ ๋น ๋ฅด๊ฒŒ ๋ Œ๋”๋ง ๋˜์–ด์•ผ ํ• ๋•Œ

getStaticProps๋Š” HTML๊ณผ JSON์„ ์ƒ์„ฑํ•˜๊ธฐ ๋•Œ๋ฌธ์— CDN์— ์˜ํ•ด ์บ์‹ฑ๋˜์–ด ๋งค์šฐ ๋น ๋ฆ…๋‹ˆ๋‹ค.

ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ์—์„œ getStaticProps ์‚ฌ์šฉํ•˜๊ธฐ

GetStaticProps Type์„ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค. ๋งŒ์•ฝ getStaticProps์—์„œ ๋ฆฌํ„ดํ•˜๋Š” Props์˜ ํƒ€์ž…์„ ์ถ”๋ก ํ•ด์„œ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ InferGetStaticPropsType๋ฅผ ์‚ฌ์šฉํ•˜๋ผ.

์ด๊ฒƒ์„ ์‚ฌ์šฉํ•˜๋ฉด getStaticProps ํ•จ์ˆ˜๊ฐ€ ๋ฆฌํ„ดํ•˜๋Š” ๊ฐ’์˜ ํƒ€์ž…์„ ์ถ”๋ก ํ•  ์ˆ˜ ์žˆ๋‹ค.

์ž๋™ HTML ํŽ˜์ด์ง€ ์žฌ์ƒ์„ฑ (Incremental Static Regeneration)

getStaticProps์„ ์‚ฌ์šฉํ•˜๋ฉด ๋นŒ๋“œ ํƒ€์ž„์— HTML์„ ๋ฏธ๋ฆฌ ์ƒ์„ฑํ•ด๋‘˜ ์ˆ˜ ์žˆ๋‹ค.

Incremental Static Regeneration๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€๊ฒฝ๋ฌ์„๋•Œ, ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ํŽ˜์ด์ง€๋ฅผ ์žฌ์ƒ์„ฑํ•œ๋‹ค.

์ด์ œ ๋ธ”๋กœ๊ทธ์˜ ๊ธ€๋“ค์€ 1์ดˆ์— ํ•œ๋ฒˆ์”ฉ ํ™•์ธ๋œ๋‹ค. ๋งŒ์•ฝ ์ƒˆ๋กœ์šด ๊ธ€์ด ์ถ”๊ฐ€ ๋œ๋‹ค๋ฉด ๊ฑฐ์˜ ์ฆ‰์‹œ getStaticProps๊ฐ€ ์žฌ์‹คํ–‰๋˜์–ด ์ƒˆ๋กœ์šด ํŽ˜์ด์ง€๊ฐ€ ์ƒ์„ฑ๋ ๊ฒƒ์ด๋‹ค.

์ž๋™ ํŽ˜์ด์ง€ ์žฌ์ƒ์„ฑ์€ ํฐ ๊ทœ๋ชจ์˜ ์•ฑ์—์„œ๋„ ์ž˜ ์ž‘๋™ํ•œ๋‹ค.

  • ํŽ˜์ด์ง€๊ฐ€ ์ง€์†์ ์œผ๋กœ ๋น ๋ฅด๊ฒŒ ๋ Œ๋”๋ง๋œ๋‹ค. (static HTML์ด๊ธฐ ๋•Œ๋ฌธ์—)

  • ๋„คํŠธ์›Œํฌ๊ฐ€ ๋Š์–ด์ ธ๋„ ์ด์ „์— ๋ฐ›์•„๋†“์€ ํŽ˜์ด์ง€๋ฅผ ๋ณด์—ฌ์ค„ ์ˆ˜ ์žˆ๋‹ค. (๋ธŒ๋ผ์šฐ์ €์— ์บ์‹ฑ๋˜๊ธฐ ๋•Œ๋ฌธ์—)

  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋‚˜ ๋ฐฑ์—”๋“œ ์„œ๋ฒ„์— ์š”์ฒญ์„ ์กฐ๊ธˆ๋งŒ ๋ณด๋‚ธ๋‹ค. ๋ชจ๋“  ํŽ˜์ด์ง€๋Š” ํ•œ๋ฒˆ์— ์žฌ์ƒ์„ฑ๋œ๋‹ค. (๋ฐ์ดํ„ฐ๊ฐ€ ์—…๋ฐ์ดํŠธ ๋ ๋•Œ ๋”ฑ ํ•œ๋ฒˆ๋งŒ ์š”์ฒญํ•œ๋‹ค.)

ํŒŒ์ผ์„ ์ฝ์„๋• process.cwd()๋ฅผ ์‚ฌ์šฉํ•˜๋ผ.

getStaticProps์—์„œ ๋ฐฑ์—”๋“œ API ํ˜ธ์ถœ ๋ฟ ์•„๋‹ˆ๋ผ ํŒŒ์ผ์‹œ์Šคํ…œ์—๋„ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ํŒŒ์ผ์˜ ํ’€๊ฒฝ๋กœ๋ฅผ ๋ชจ๋‘ ์ž…๋ ฅํ•ด์ฃผ์–ด์•ผํ•œ๋‹ค.

Next.js๊ฐ€ ํ”„๋กœ์ ํŠธ๋ฅผ ๋นŒ๋“œํ• ๋•Œ ์„œ๋กœ ๋‹ค๋ฅธ ๋””๋ ‰ํ† ๋ฆฌ์— ์žˆ๋Š” ํŒŒ์ผ์„ ๋นŒ๋“œํ•˜๊ธฐ ๋•Œ๋ฌธ์— __dirname์„ ์‚ฌ์šฉํ•˜๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋‚œ๋‹ค.

๋Œ€์‹ ์— process.cwd()๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด Next.js๊ฐ€ ์‹คํ–‰๋˜๊ณ  ์žˆ๋Š” ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.

๊ธฐ์ˆ ์ ์ธ ๋””ํ…Œ์ผํ•œ ๋‚ด์šฉ๋“ค

๋นŒ๋“œํƒ€์ž„์—๋งŒ ์‹คํ–‰๋œ๋‹ค.

getStaticProps๊ฐ€ ๋นŒ๋“œํƒ€์ž„์— ์‹คํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์— ์œ ์ €์˜ ์š”์ฒญ์ด ์žˆ์–ด์•ผ๋งŒ ํ•˜๋Š” ์•„๋ž˜ ์†์„ฑ๋“ค์€ ์‚ฌ์šฉ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.

  1. request๊ฐ์ฒด์˜ query

  2. HTTP headers์˜ ์†์„ฑ๋“ค

์„œ๋ฒ„์ฝ”๋“œ๋ฅผ ์ง์ ‘ ์ž‘์„ฑํ•˜๋ผ.

getStaticProps๋Š” ์˜ค์ง ์„œ๋ฒ„์—์„œ๋งŒ ์‹คํ–‰๋œ๋‹ค. ํด๋ผ์ด์–ธํŠธ์—์„œ๋Š” ์ ˆ๋Œ€ ์‹คํ–‰๋˜์ง€ ์•Š๋Š”๋‹ค. getStaticProps๋Š” ๋ฒˆ๋“ค์— ํฌํ•จ๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋ธŒ๋ผ์šฐ์ €๋กœ๋„ ๋‚ด๋ ค๊ฐ€์ง€ ์•Š๋Š”๋‹ค. getServerSideProps๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ด๋‹ค.

์™ผ์ชฝ์ด ์›๋ž˜ ์ฝ”๋“œ๊ณ  ์˜ค๋ฅธ์ชฝ์€ ํด๋ผ์ด์–ธํŠธ์— ๋ฒˆ๋“ค๋กœ ๋‚ด๋ ค๊ฐ„ ์ฝ”๋“œ์ด๋‹ค. getServerSideProps๊ฐ€ ์ œ๊ฑฐ๋œ ๊ฑธ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

HTML๊ณผ JSON์„ ์ •์ ์œผ๋กœ ์ƒ์„ฑํ•œ๋‹ค.

๋นŒ๋“œํƒ€์ž„์— getStaticProps๊ฐ€ ์‹คํ–‰๋˜๋ฉด Next.js๋Š”

  1. ํŽ˜์ด์ง€ ์ปดํฌ๋„ŒํŠธ๋ฅผ HTML๋กœ ๋งŒ๋“ค๊ณ 

  2. getStaticProps์—์„œ ๋ฆฌํ„ด๋œ ๊ฐ’์„ JSONํŒŒ์ผ๋กœ ๋งŒ๋“ ๋‹ค.

์ด JSON์€ ํด๋ผ์ด์–ธํŠธ์—์„œ ๋ผ์šฐํŒ…์„ ํ• ๋•Œ ์‚ฌ์šฉ๋œ๋‹ค.(next/link, next/router)

๋ฏธ๋ฆฌ ๋ Œ๋”๋ง๋œ ํŽ˜์ด์ง€๋ฅผ ํด๋ผ์ด์–ธํŠธ ๋ผ์šฐํŒ…์œผ๋กœ ์ ‘๊ทผํ•˜๊ฒŒ ๋  ๊ฒฝ์šฐ Next.js๋Š” 2๋ฒˆ์—์„œ ๋งŒ๋“  JSONํŒŒ์ผ์„ ๊ฐ€์ ธ์™€์„œ ํŽ˜์ด์ง€ ์ปดํฌ๋„ŒํŠธ์˜ Props๋กœ ์‚ฌ์šฉํ•œ๋‹ค. ์ด ๊ฒฝ์šฐ์—๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ getStaticProps๋Š” ํด๋ผ์ด์–ธํŠธ์—์„œ ์‹คํ–‰๋˜์ง€ ์•Š๋Š”๋‹ค. getStaticProps์— ์˜ํ•ด ๋ฏธ๋ฆฌ ๋งŒ๋“ค์–ด์ง„ JSON ํŒŒ์ผ์„ ํ™œ์šฉํ•  ๋ฟ์ด๋‹ค. getStaticProps๋Š” ์˜ค์ง ๋นŒ๋“œํƒ€์ž„์—๋งŒ ์‹คํ–‰๋œ๋‹ค๋Š” ๊ฑธ ๋ช…์‹ฌํ•˜์ž.

ํŽ˜์ด์ง€ ์ปดํฌ๋„ŒํŠธ์—์„œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

getStaticProps๋Š” ํŽ˜์ด์ง€ ์ปดํฌ๋„ŒํŠธ์—์„œ๋งŒ export๋˜์–ด์•ผ ํ•œ๋‹ค.

ํŽ˜์ด์ง€๊ฐ€ ๋ Œ๋”๋ง๋˜๊ธฐ ์ „์— ๋ฐ์ดํ„ฐ๊ฐ€ ๋ชจ๋‘ ์ค€๋น„๋˜์–ด์•ผ๋งŒ ๋ฆฌ์•กํŠธ๊ฐ€ ์ œ๋Œ€๋กœ ๋ Œ๋”๋ง ๋  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๊ฐœ๋ฐœ๋ชจ๋“œ์—์„œ๋Š” ๋ชจ๋“  ์š”์ฒญ์— ์˜ํ•ด ์‹คํ–‰๋œ๋‹ค.

next dev๋ฅผ ํ†ตํ•ด next.js๋ฅผ ๊ฐœ๋ฐœ๋ชจ๋“œ์—์„œ ์‹คํ–‰ํ•˜๊ฒŒ ๋˜๋ฉด getStaticProps๋Š” ๋ชจ๋“  ์š”์ฒญ์— ์˜ํ•ด ์‹คํ–‰๋œ๋‹ค. ์œ„์—์„œ ๋นŒ๋“œ ํƒ€์ž„์—๋งŒ ์‹คํ–‰๋œ๋‹ค๊ณ  ํ•œ๊ฒƒ์€ production๋ชจ๋“œ์ผ๋•Œ ๊ทธ๋ ‡๋‹ค๋Š” ๋ง์ด๋‹ค.

Preview Mode

ํ”„๋ฆฌ๋ทฐ ๋ชจ๋“œ๋Š” ๊ณ ๊ธ‰ ๊ธฐ๋Šฅ์ด๋ฏ€๋กœ ์ด ๋งํฌ๋ฅผ ์ฐธ๊ณ ํ•˜๋ผ.

Last updated

Was this helpful?