๊ฐœ๋ฐœ/Next.js

shadcn ui ์—์„œ ์ œ๊ณตํ•˜๋Š” Drawer  DrawerA drawer component for React.ui.shadcn.com  shadcn ui ์—์„œ ์ œ๊ณตํ•˜๋Š” Drawer ์˜ ๋ฐฉํ–ฅ์€ ์•„๋ž˜์—์„œ ์œ„๋กœ ์˜ฌ๋ผ์˜จ๋‹ค.  ํŒ์—… ํ˜•ํƒœ๋กœ ๋„์šฐ๋Š” ๊ฒƒ๋„ ์˜ˆ์‹œ๋กœ ๋ณด์—ฌ์ฃผ๊ธฐ๋Š” ํ•˜์ง€๋งŒ ๋‚˜๋Š” ์ปค์Šคํ…€ํ•ด์„œ ์˜ค๋ฅธ์ชฝ์— ์Šค๋ฌด์Šค~ ํ•˜๊ฒŒ ๋‚˜์˜ค๊ฒŒ ๊ตฌํ˜„ํ•ด์•ผํ•˜๋Š” ์ƒํ™ฉ์ด์˜€๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํ˜„์žฌ ์ƒํ™ฉ์—์„œ๋Š” ์˜ค๋ฅธ์ชฝ์—์„œ ๋‚˜์˜ค๋Š”๊ฑฐ์ง€๋งŒ ๋””์ž์ธ์ด ๋ฐ”๋€Œ๋ฉด ๋˜ ์–ด๋–ป๊ฒŒ ๋ ์ง€ ๋ชจ๋ฅด๋Š” ์ƒํ™ฉ์ด๊ธฐ ๋•Œ๋ฌธ์— direction์„ ๋ณ€์ˆ˜๋กœ ๋„ฃ์–ด์„œ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉํ–ฅ์„ ์ฐพ์•˜๋‹ค.   shadcn/ui๋Š” ๋ฒˆ๋“ค๋˜์ง€ ์•Š์€ ์ปดํฌ๋„ŒํŠธ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ํ”„๋กœ์ ํŠธ์— ์˜์กด์„ฑ์œผ๋กœ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š๊ณ , ๋ง ๊ทธ๋Œ€๋กœ ๋ณต๋ถ™ํ•ด์„œ ์ปดํฌ๋„ŒํŠธ ์ฝ”๋“œ๋ฅผ ์˜จ์ „ํžˆ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด ํฌ์ธํŠธ๊ฐ€ ์ค‘์š”ํ•˜๋‹ค. ๋””ํŽœ๋˜์‹œ์— ๋“ค์–ด๊ฐ€๋Š”๊ฒŒ ์•„๋‹ˆ..
๋ฐ˜์‘ํ˜• ์›น์‚ฌ์ดํŠธ ์ œ์ž‘์€ ์ด์ œ ๊ทธ๋ƒฅ ํ•„์ˆ˜์ด๋‹ค. ๋ฏธ๋””์–ด์ฟผ๋ฆฌ ์ž‘์—…์„ ํ•  ๋•Œ ํ•ญ์ƒ ๋ธŒ๋ ˆ์ดํฌ ํฌ์ธํŠธ๋ฅผ ์žก๋Š” ๊ฒƒ์ด ์• ๋งคํ•˜๋‹ค๋ผ๊ณ  ์ƒ๊ฐํ•˜๋Š”๋ฐ์šฐ์„ ์€ 768px ์ตœ์†Œ๋กœ ํ–ˆ์„ ๊ฒฝ์šฐ๋ฅผ ๋‘๊ณ  ์ž‘์—…์— ๋“ค์–ด๊ฐ”๋‹ค.  shadcn/ui ์ด๋ž€?Radix UI ๋ฐ Tailwind CSS๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌ์ถ•๋œ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ปดํฌ๋„ŒํŠธ. ์ปดํฌ๋„ŒํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์•„๋‹Œ ์•ฑ์— copy and paste ํ•˜์—ฌ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๊ตฌ์„ฑ์š”์†Œ ๋ชจ์Œ์ด๋‹ค. npm install ์„ ํ•˜์—ฌ ์ข…์†์„ฑ ์„ค์น˜๋ฅผ ํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์ด์•ผ๊ธฐ๋‹ค. tailwind css๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๊ณ  ์žˆ๋‹ค. ์ปค์Šคํ…€์„ ํ•  ๋• tailwind css ๋ฒ•์น™์„ ๋”ฐ๋ฅด๋ฉด ๋œ๋‹ค.  ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” Nextjs , tailwind css ๊ฐ€ ์„ค์น˜๋˜์–ด์žˆ์–ด์•ผํ•œ๋‹ค. ๋‹ค ๊ฐ์„คํ•˜๊ณ  shadcn/ui๋ฅผ ์“ฐ๋ฉด์„œ ๋ฏธ๋””์–ด์ฟผ๋ฆฌ ์ž‘์—…์„ ..
๊ฐœ์ธ์ ์ธ ํ•„์š”๋กœ ์ธํ•ด์„œ ๋งŒ๋“ค๊ธฐ ์‹œ์ž‘ํ–ˆ๋˜ ํƒ€์ž„ ํŠธ๋ž˜ํ‚น ์›น. ๋…์„œํ•˜๋Š” ์‹œ๊ฐ„์„ ๋งŒ๋“ค์–ด๋ณด๊ณ  ์ธก์ •ํ•ด๋ณด๊ฒ ๋‹ค๊ณ  ์‹œ์ž‘ํ•œ ๊ฒƒ์ด์˜€๋Š”๋ฐ ์ง€๋‚œ ๋‹ฌ ๊ธฐ๋ก๊ณผ ํ˜„์žฌ์˜ ๊ธฐ๋ก ๋น„๊ต / ๋˜๋Š” ๋ชฉํ‘œ ์‹œ๊ฐ„์„ ์ •ํ•ด๋‘๊ณ  ํ˜„์žฌ ์–ผ๋งˆ๋‚˜ ์ด๋ค˜๋Š”์ง€ ์ฒดํฌํ•˜๋Š” ๋ถ€๋ถ„๊นŒ์ง€ ๋” ํ•ด๋ณด๊ณ  ์‹ถ์–ด์กŒ๋‹ค. ๊ทธ ํ‘œํ˜„์„ progressbar๋กœ ํ•˜๋ฉด ์ง๊ด€์ ์ผ ๊ฒƒ ๊ฐ™๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๊ณ , nextui๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๊ฐ„๋‹จํ•˜๊ฒŒ ์ ์šฉํ•ด๋ณด๊ธฐ๋กœ ํ–ˆ๋‹ค.    ๐Ÿ‘‡๐Ÿป NextUI ๊ณต์‹๋ฌธ์„œ https://nextui.org/ NextUI - Beautiful, fast and modern React UI LibraryBeautiful, fast and modern React UI Librarynextui.org nextui๋ฅผ ์ ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๊ณต์‹๋ฌธ์„œ๋ฅผ ๋ณด๋ฉด ๊ต‰์žฅํžˆ ๋น ๋ฅด๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ต‰์žฅํžˆ ..
ํ”„๋กœ์ ํŠธ ๊ตฌํ˜„์„ ์ง„ํ–‰ํ•˜๋ฉด์„œ ์ƒˆ๋กœ์šด ํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“ค์—ˆ๋‹ค. ์„œ๋ฒ„์— ์ €์žฅ๋˜์–ด์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๊ธฐ ์œ„ํ•ด์„œ ์ด๋ฏธ ๋งŒ๋“ค์–ด์ ธ์žˆ๋˜ ๋ฐ์ดํ„ฐ ํ˜ธ์ถœ ์ฝ”๋“œ๋“ค์„ ๊ทธ๋Œ€๋กœ ์žฌํ™œ์šฉํ•ด์„œ ์ง„ํ–‰์„ ํ–ˆ๋Š”๋ฐ ๊ฐœ๋ฐœ๋ชจ๋“œ์—์„œ๋Š” ๊ดœ์ฐฎ์•˜์ง€๋งŒ ๋นŒ๋“œ๋งŒ ํ•˜๋ฉด ๊ณ„์†ํ•ด์„œ ์˜ค๋ฅ˜๊ฐ€ ๋‚ฌ๋‹ค. ์ •ํ™•ํžˆ๋Š” ์ •์  ๋ Œ๋”๋งํ•˜๋Š” ํŽ˜์ด์ง€์—์„œ ๊ณ„์† ์˜ค๋ฅ˜๊ฐ€ ๋‚˜๋Š” ์ƒํ™ฉ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถˆ๋Ÿฌ์˜ฌ ๋•Œ ํ˜ธ์ถœํ•œ๊ฒŒ ์„œ๋ฒ„API๋ฅผ ๋”ฐ๋กœ ๋งŒ๋“ ๊ฒŒ ์•„๋‹ˆ๋ผ nextjs๊ฐ€ ์ง€์›ํ•˜๋Š” api route๋ฅผ ์ด์šฉํ•ด์„œ severless ํ•œ ํ•จ์ˆ˜๋กœ ๊ตฌํ˜„ํ–ˆ๋‹ค. ์ฐธ๊ณ ๋กœ API ๋ผ์šฐํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด Next.js ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์™ธ๋ถ€ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๊ฑฐ๋‚˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์ƒํ˜ธ์ž‘์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด ๋ถ€๋ถ„์„ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” nextjs์˜ ์„œ๋ฒ„ ๋ Œ๋”๋ง์— ๋Œ€ํ•ด์„œ ์•Œ ํ•„์š”๊ฐ€ ์žˆ๋‹ค. nextjs ์„œ๋ฒ„ ๋ Œ๋”๋ง์—๋Š” ์ด 3๊ฐ€์ง€๊ฐ€ ์žˆ๋Š”๋ฐ, ์ฒซ๋ฒˆ์งธ Stat..
์ตœ๊ทผ nextjs๋กœ ๊ตฌํ˜„ํ•œ ํ”„๋กœ์ ํŠธ๋ฅผ ๋ฐฐํฌํ•  ๋ฐฉ๋ฒ•์„ ์ฐพ๋‹ค๊ฐ€ vercel๋กœ ํ˜ธ์ŠคํŒ… ์„œ๋น„์Šค๋ฅผ ํ•ด์ฃผ๊ธฐ์— ํ•œ ๋ฒˆ ์จ๋ด์•ผ๊ฒ ๋‹ค๋ฉฐ~~ ๋„์ „ํ–ˆ์Šต๋‹ˆ๋‹ค. vercel ํ™ˆํŽ˜์ด์ง€์—์„œ ๋กœ๊ทธ์ธํ•˜๊ธฐ https://vercel.com/ Dashboard – Vercel vercel.com start deploying ๋ฒ„ํŠผ์ด ๋ณด์ด์‹œ์ฃ ? ํด๋ฆญํด๋ฆญ - ์ด๋ ‡๊ฒŒ git repository๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ๋ถ€๋ถ„์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ €๋Š” ๋‹ค ๊ฐ€์ ธ์˜ค์ง€๋Š” ์•Š๊ณ , ๋ฐฐํฌํ•  ๋ ˆํฌ์ง€ํ† ๋ฆฌ๋งŒ ๊ฐ€์ ธ์™”์Šต๋‹ˆ๋‹ค. ๋ฐฐํฌ์ž‘์—…์„ ํ•  ํ”„๋กœ์ ํŠธ์ƒ์„ธ๋กœ ๋“ค์–ด๊ฐ€์„œ ์•„๋ž˜์˜ ๋‚ด์šฉ์„ ์ ์–ด์ฃผ์‹œ๋ฉด ๋˜๋Š”๋ฐ, ๋”ฐ๋กœ ํ”„๋กœ์ ํŠธ package.json์—์„œ ์„ค์ •ํ•œ ๋ถ€๋ถ„์ด ์—†์œผ์‹œ๋‹ค๋ฉด ํฌ๊ฒŒ ์ˆ˜์ •ํ•  ๋ถ€๋ถ„์„ ์—†์œผ์‹ค๊ฑฐ์—์š”. root directory๊ฐ™์€๊ฑฐ ์ž˜ ์ฒดํฌํ•ด์ฃผ์„ธ์š” ์ €๋Š” ์ฒ˜์Œ์—๋Š” ์•„๋ž˜์˜ ์บก์ณ์ฒ˜๋Ÿผ ๋‹ค ์ฑ„..
nextjs12 ๋ฅผ ์“ฐ๋‹ค๊ฐ€ nextjs14๋กœ ๊ธ‰ ์ ํ”„๋ฅผ ํ•˜๋‹ค๋ณด๋‹ˆ ์ƒˆ๋กœ์šด ๊ฒƒ๋“ค์ด ๊ฝค ๋ˆˆ์— ๋“ค์–ด์™”๋‹ค. ํ•ด๋‹น ๋‚ด์šฉ์€ nextjs13 ์ดํ›„์—๋„ ์ ์šฉ์ด ๋˜๋Š” ๋‚ด์šฉ์ด๋‹ค. ํŽ˜์ด์ง€๋ฅผ ๋ฆฌ๋กœ๋“œํ•˜๋ ค๊ณ ํ•˜๋Š”๋ฐ, reload() ํ•จ์ˆ˜๊ฐ€ ์—†์–ด์ง„๊ฒƒ ์•„๋‹ˆ๊ฒ ๋Š”๊ฐ€! ๊ทธ๋ž˜์„œ ๊ณต์‹๋ฌธ์„œ๋ฅผ ์ฐพ์•„๋“ค์–ด๊ฐ”๋‹ค. ๊ณต์‹๋ฌธ์„œ ์›๋ณธ์„ ์ข€ ๊ฐ€์ ธ์™€๋ดค๋‹ค. useRouter() router.push(href: string, { scroll: boolean }): Perform a client-side navigation to the provided route. Adds a new entry into the browser’s history stack. "use client" ๋ฅผ ์‚ฌ์šฉํ•œ client-side๋กœ route๋ฅผ ์ œ๊ณตํ•  ๋•Œ ์‚ฌ์šฉ router.replace(hr..
API Routes API Routes๋Š” API๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋Š” Endpoint๋ฅผ ์ƒ์„ฑํ•ด์ฃผ๋Š”๋ฐ, ์‰ฝ๊ฒŒ ๋งํ•ด๋ณด์ž๋ฉด Next.js์˜ ํŒŒ์ผ ๊ธฐ๋ฐ˜์œผ๋กœ API๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๊ฒŒํ•ด์ค€๋‹ค. ๊ทธ๋Ÿฌ๋‹ˆ๊น ๋‹ค๋ฅธ ๋ฐฑ์—”๋“œ ํ”„๋ ˆ์ž„์›Œํฌ ํ•„์š”์—†์ด, ๋”ฐ๋กœ api๋ฅผ ๋งŒ๋“ค์–ด์„œ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„๋„ DB ์—ฐ๊ฒฐ๊นŒ์ง€ ํ•  ์ˆ˜ ์žˆ๊ณ , ๋ฐ์ดํ„ฐ ์ „์†ก์ด ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ๋ง์ด๋‹ค. Routing๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ํŒŒ์ผ๊ธฐ๋ฐ˜์œผ๋กœ ์ด๋ฃจ์–ด์ง€๋Š”๋ฐ Nextjs14์˜ ๊ฒฝ์šฐ๋Š” pages๊ฐ€ ์•„๋‹Œ app ํด๋”์— ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๊ณ (14๋ฒ„์ ผ ์ด์ „์€ pages/api), ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•˜๋ฉด ๋œ๋‹ค. API Routes๋Š” Serverless function์œผ๋กœ ์ด๋ฃจ์–ด์ ธ์žˆ๋‹ค. Serverless Function์˜ ์ปจ์…‰์€ ์š”์ฒญ(์ด๋ฒคํŠธ)์ด ๋“ค์–ด์˜ฌ ๋•Œ๋งˆ๋‹ค ์ง€์ •๋œ ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰์‹œ์ผœ ์›ํ•˜๋Š” API๋ฅผ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์ „..
nextjs ํ”„๋กœ์ ํŠธ๋ฅผ ํ•  ๋•Œ๋Š” npm run dev๋ฅผ react ํ”„๋กœ์ ํŠธ๋ฅผ ํ•  ๋•Œ๋Š” npm start๋กœ ๊ฐœ๋ฐœ๋ชจ๋“œ๋ฅผ ๋Ÿฐํ•œ๋‹ค. ์™œ ํ”„๋กœ์ ํŠธ์— ๋”ฐ๋ผ์„œ ๋ช…๋ น์–ด๊ฐ€ ๋‹ค๋ฅผ๊นŒ? ๋ผ๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ๋‹ค. ๋ฌผ๋ก  package.json์— ์„ค์ •๋œ ๊ฐ’์— ๋”ฐ๋ผ ๋‹ค๋ฅด๋‹ค๋Š”๊ฒŒ ์ค‘์š”ํ•˜์ง€๋งŒ ์–ด์จ‹๋“  ํ”„๋กœ์ ํŠธ๋งˆ๋‹ค ์“ฐ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ, ํ”„๋ ˆ์ž„์›Œํฌ์— ๋”ฐ๋ผ์„œ ๋””ํดํŠธ ๊ฐ’์ด ๋‹ค๋ฅด๋‹ค๋Š” ๊ฒƒ! Nextjs _ package.json next dev ⇒ ๊ฐœ๋ฐœ ๋ชจ๋“œ์—์„œ ์‹คํ–‰ next build ⇒ ํ”„๋กœ๋•์…˜ ๋นŒ๋“œ ์šฉ๋„๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋นŒ๋“œ next start ⇒ Next.js ํ”„๋กœ๋•์…˜ ์„œ๋ฒ„ ์‹œ์ž‘ next dev ๋ช…๋ น์–ด๊ฐ€ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ์ด ๋ช…๋ น์–ด๋Š” ๊ฐœ๋ฐœ ์„œ๋ฒ„๋ฅผ ์‹œ์ž‘ํ•˜๊ณ  Next.js ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ next dev ๋ช…๋ น์–ด๋Š” .next ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•˜๊ณ , Next.j..
๋ฌธ์ œ์ƒํ™ฉ NextJS๋กœ ๋นŒ๋“œํ•œ ์ดํ›„์— ๋ธŒ๋ผ์šฐ์ €์—์„œ reload๋ฅผ ํ•˜๋ฉด ํŽ˜์ด์ง€ ๊ฒฝ๋กœ๋ฅผ ์ œ๋Œ€๋กœ ์ฐพ์ง€ ๋ชป ํ•˜๊ณ  ์ดˆ๊ธฐํ™”๋ฉด์œผ๋กœ ๋ณด๋‚ด๋ฒ„๋ฆฌ๋Š” ์˜ค๋ฅ˜๊ฐ€ ์ƒ๊ฒผ๋‹ค. ์ตœ์ข… ์„œ๋น„์Šค๋ฅผ ์•ž๋‘๊ณ  ์ด ๋ฌธ์ œ๋กœ ๊ฝค๋‚˜ ๊ณจ๋จธ๋ฆฌ๋ฅผ ์ฉ๊ณ  ์žˆ์—ˆ๋‹ค. ์›์ธ ๋ธŒ๋ผ์šฐ์ €์—์„œ ์š”์ฒญํ•œ ์ฃผ์†Œ์™€ ์‹ค์ œ ๋ฆฌ์†Œ์Šค์˜ ์ฃผ์†Œ(URL)์ด ๋‹ฌ๋ผ์„œ ์ƒ๊ธด ์ผ์ธ๋ฐ, ์ด๊ฒŒ ๋กœ์ปฌ์—์„œ๋Š” ์ž˜ ๋Œ์•„๊ฐ€๊ธฐ ๋•Œ๋ฌธ์— ์ฒ˜์Œ์— ์ •๋ง ๋ฌด์Šจ ์ผ์ธ์ง€ ์•Œ์ˆ˜๊ฐ€ ์—†์—ˆ๋‹ค. static์„ S3์— ์˜ฌ๋ฆฌ๋ฉด์„œ ์ƒ๊ธฐ๋Š” ๋ฌธ์ œ๋กœ nextjs๋Š” ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ผ์šฐํŒ…์„ ํ•˜๋Š”๋ฐ, ์ด๊ฑธ static์ด ์ƒ์„ฑ๋œ๋‹ค. ์ด๋Œ€๋กœ ๋ฐฐํฌํ•˜๋ฉด ๊ธฐ๋ณธ url ์—์„œ๋Š” ๋ฌธ์ œ๊ฐ€ ์—†์ง€๋งŒ ๋’ค์— ๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ ๋ถ™๋Š” ๊ฒฝ์šฐ์— ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธด๋‹ค. ํ•ด๊ฒฐ 1. next.config์— trailingSlash ์˜ต์…˜ ๋„ฃ์–ด์ฃผ๊ธฐ // next.config.js module.exp..
์—…๋ฌด๋ฅผ ๋ณด๋ฉด์„œ ํ˜„์žฌ ์ง„ํ–‰ ์ค‘์ธ ํ”„๋กœ์ ํŠธ์˜ ์ฝ”๋“œ๋ฅผ ์กฐ๊ธˆ ๋” ๊ฐœ์„ ์‹œํ‚ค๊ณ  ์•ž์œผ๋กœ์˜ ์ž‘์—…์„ ํŽธํ•˜๊ฒŒ ๊ฐ€์ ธ๊ฐ€๊ธฐ ์œ„ํ•ด์„œ ์–ด๋–ค ์ผ๋“ค์„ ํ•  ์ˆ˜ ์žˆ์„๊นŒ? ํ•˜๋Š” ์ƒ๊ฐ์„ ํ•˜๋‹ค๊ฐ€ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์…‹ํŒ…์„ ํ•ด๋ณด์ž๋ผ๋Š” ๋‹ค์ง์„ ํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค. ํ˜„์žฌ ์ง„ํ–‰ ์ค‘์ธ ์ฝ”๋“œ์—์„œ๋Š” ํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋น„์Šทํ•œ ํ™˜๊ฒฝ์„ ์กฐ์„ฑํ•œ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ๊ฐ€์ง€๊ณ  ์‹œํ—˜ ์‚ผ์•„์„œ ํ…Œ์ŠคํŠธ ๊ฐœ๋ฐœํ™˜๊ฒฝ์„ ์กฐ์„ฑํ•˜๋ ค๊ณ  ์‹œ๋„ํ–ˆ๋‹ค. ์›ฌ๊ฑธ? ์‚ฝ์งˆ์„ ์ดํ‹€ ์‚ฌํ˜ ๋™์•ˆ ํ•˜๊ณ  ๋๋ƒˆ๋‹ค. ํ•˜์ง€๋งŒ ์—ฌ์ „ํžˆ ๋ฏธ๊ถ์— ๋น ์ ธ์žˆ๊ณ  ์ด๊ฑธ ๋‹ค์‹œ ์žฌ์—ฐํ•ด๋‚ผ ์ˆ˜ ์žˆ์„๊นŒ? ํ•˜๋Š” ์˜๋ฌธ์ด ๊ฐ•ํ•˜๊ฒŒ ๋“ค์–ด์„œ ๋‹ค๊ธ‰ํ•˜๊ฒŒ ์ด๊ณณ์— ๋‚จ๊ฒจ๋ณด๋ ค๊ณ  ํ•œ๋‹ค. ๋งจ๋‚  ๋“ฃ๊ธฐ๋งŒํ•˜๊ณ  ์—ฌ๊ธฐ์ €๊ธฐ ๊ตฌ๊ธ€๋ง ํ•˜๋‹ค๊ฐ€ ๋ณด๊ธฐ๋งŒ ํ–ˆ์ง€. ์ •์ž‘ ์จ๋ณธ ์ ์€ ์—†๋Š” ํ…Œ์ŠคํŠธ ์ฝ”๋“œ. ์—ฌ๋Ÿฌ ๋ธ”๋กœ๊ทธ๋ฅผ ์ฐธ๊ณ ํ•ด์„œ ์ง„ํ–‰์„ ํ–ˆ์—ˆ๋Š”๋ฐ, ๋ญํ•˜๋‚˜ ์ œ๋Œ€๋กœ ์ดํ•ดํ•˜๋Š” ๊ฒŒ ์—†์œผ๋‹ˆ ์ฝ”๋“œ๋Š” ์™„์ „ ์งฌ๋ฝ•์ด ๋˜๊ณ  tes..
โ–ช React๋Š” NextJS๋ฅผ ์ด์šฉํ•ด์„œ SSR์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. โ–ช Static Generation vs Server-side Rendering pre-rendering(์‚ฌ์ „๋ Œ๋”๋ง) ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ชจ๋“  ํŽ˜์ด์ง€ pre-render - ์‚ฌ์ „์— HTML ํŒŒ์ผ๋“ค์„ ๋งŒ๋“ ๋‹ค๋Š” ์˜๋ฏธ๋กœ ํผํฌ๋จผ์Šค๋ฅผ ํ–ฅ์ƒ์‹œํ‚ค๊ณ  SEO์— ์ตœ์ ํ™”๋œ๋‹ต๋‹ˆ๋‹ค. Javascript์„ ๋„๊ณ  ํŽ˜์ด์ง€๋ฅผ ๋ Œ๋”๋ง์„ ํ•ด๋„ HTML์ด ๋ Œ๋”๋ง๋˜๊ธฐ ๋•Œ๋ฌธ์— ๊ธฐ๋ณธ ํŽ˜์ด์ง€๊ฐ€ ๋กœ๋“œ๋ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ Javascript์„ ๋ณต์›์‹œ์ผœ์ฃผ๋ฉด hydration์ด ๋œ๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ •์ ์ธ ํŽ˜์ด์ง€๊ฐ€ ๋™์ ์œผ๋กœ ๋ฐ”๋€Œ๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค Static Generation : ์ •์ ์ƒ์„ฑ vs Server-side Rendering : ์„œ๋ฒ„ ์‚ฌ์ด๋“œ ๋ Œ๋”๋ง ์ด ๋‘ ๊ฐ€์ง€์˜ ์ฐจ์ด์ ์€ ์–ธ์ œ HTML ์„ ๋งŒ๋“œ๋ƒ์ž…๋‹ˆ..
๋ฐ(Ming) ๐Ÿฐ
'๊ฐœ๋ฐœ/Next.js' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๊ธ€ ๋ชฉ๋ก