๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ

    [Next.js] page router - SSG(์ •์  ์‚ฌ์ดํŠธ ์ƒ์„ฑ)

    ํ•œ ์ž… ํฌ๊ธฐ๋กœ ์ž˜๋ผ๋จน๋Š” Next.js ํ•™์Šต์ •๋ฆฌ์šฉ์ž…๋‹ˆ๋‹ค. 2.13) SSG 1. ์†Œ๊ฐœ ๋ฐ ์‹ค์Šต2.14) SSG 2. ์ •์  ๊ฒฝ๋กœ์— ์ ์šฉํ•˜๊ธฐ2.15) SSG 3. ๋™์  ๊ฒฝ๋กœ์— ์ ์šฉํ•˜๊ธฐ2.16) SSG 4. ํด๋ฐฑ์˜ต์…˜ ์„ค์ •ํ•˜๊ธฐ2.13 SSG 1. ์†Œ๊ฐœ ๋ฐ ์‹ค์ŠตSSR์˜ ์žฅ๋‹จ์ ์žฅ์  : ๋ธŒ๋ผ์šฐ์ €์— ์ ‘์† ์š”์ฒญ์ด ๋“ค์–ด์˜ฌ ๋•Œ๋งˆ๋‹ค ์‚ฌ์ „ ๋ Œ๋”๋ง ๊ณผ์ •์—์„œ ๋ฐฑ์—”๋“œ ์„œ๋ฒ„์—์„œ ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ๋ฅผ ์š”์ฒญํ•˜๋ฉด์„œ ํŽ˜์ด์ง€ ๋‚ด๋ถ€์˜ ๋ฐ์ดํ„ฐ๋ฅผ ํ•ญ์ƒ ์ตœ์‹  ๋ฒ„์ „์œผ๋กœ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์Œ๋‹จ์  : ๋ฐ์ดํ„ฐ ํŽ˜์นญ์ด ๋„ˆ๋ฌด ๋А๋ฆฌ๊ฒŒ ๋˜๋ฉด ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์ด ์•ˆ์ข‹์•„์ง„๋‹ค.SSG(์ •์  ์‚ฌ์ดํŠธ ์ƒ์„ฑ)๋ž€SSR์˜ ๋‹จ์ ์„ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ์‚ฌ์ „ ๋ Œ๋”๋ง ๋ฐฉ์‹.๋นŒ๋“œ ํƒ€์ž„์— ๋ฏธ๋ฆฌ ํŽ˜์ด์ง€๋ฅผ ์‚ฌ์ „ ๋ Œ๋”๋ง ํ•˜๋Š” ๋ฐฉ๋ฒ•(ํŽ˜์ด์ง€๋ฅผ ๋ฏธ๋ฆฌ ๋”ฑ ํ•œ ๋ฒˆ ์ƒ์„ฑํ•œ๋‹ค)SSG์˜ ์žฅ๋‹จ์ ์žฅ์  : ์‚ฌ์ „ ๋ Œ๋”๋ง ๊ณผ์ •์— ๋งŽ์€ ์‹œ๊ฐ„..

    [Next.js] page router - SSR

    ํ•œ ์ž… ํฌ๊ธฐ๋กœ ์ž˜๋ผ๋จน๋Š” Next.js ํ•™์Šต์ •๋ฆฌ์šฉ์ž…๋‹ˆ๋‹ค. 2.11) SSR 1. ์†Œ๊ฐœ ๋ฐ ์‹ค์Šต2.12) SSR 2. ์‹ค์ŠตgetServerSidePropsgetServerSideProps๋Š” ํŽ˜์ด์ง€๊ฐ€ SSR ๋ฐฉ์‹์œผ๋กœ ์‚ฌ์ „ ๋ Œ๋”๋ง์ด ์ด๋ฃจ์–ด์ง€๊ฒŒ ํ•œ๋‹ค.export const getServerSideProps = () => { // ์ปดํฌ๋„ŒํŠธ๋ณด๋‹ค ๋จผ์ € ์‹คํ–‰๋˜์–ด์„œ, ์ปดํฌ๋„ŒํŠธ์— ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ ๋ถˆ๋Ÿฌ์˜ค๋Š” ํ•จ์ˆ˜ const data = "hello"; return { props: { data, }, };};getServerSideProps๋Š” ์•ฝ์†๋œ ์ด๋ฆ„์˜ ํ•จ์ˆ˜์ธ๋ฐ ์ด๋ฅผ exportํ•˜๋ฉด ํ•ด๋‹น ํŽ˜์ด์ง€๋Š” ๊ทธ๋•Œ๋ถ€ํ„ฐ SSR๋กœ ๋™์ž‘ํ•˜๊ฒŒ ๋œ๋‹ค. ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”๊ฐ€1. ํ•ด๋‹น ํŽ˜์ด์ง€ ๊ฒฝ๋กœ๋กœ ํŽ˜์ด์ง€๋ฅผ ์š”์ฒญ2. ๋„ฅ์ŠคํŠธ ์„œ๋ฒ„..

    [Next.js] page router ์‚ฌ์ „ ๋ Œ๋”๋ง๊ณผ ๋ฐ์ดํ„ฐํŽ˜์นญ

    ํ•œ ์ž… ํฌ๊ธฐ๋กœ ์ž˜๋ผ๋จน๋Š” Next.js ํ•™์Šต์ •๋ฆฌ์šฉ์ž…๋‹ˆ๋‹ค. 2.10) ์‚ฌ์ „ ๋ Œ๋”๋ง๊ณผ ๋ฐ์ดํ„ฐํŽ˜์นญReact app ์—์„œ์˜ ๋ฐ์ดํ„ฐ ํŽ˜์นญ๋ฆฌ์•กํŠธ ์•ฑ์€ CSR๋กœ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๋ Œ๋”๋ง์„ ์ง์ ‘ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ–ˆ๋‹ค.๋”ฐ๋ผ์„œ FCP ์‹œ์ ์œผ๋กœ ์˜ค๊ธฐ๊นŒ์ง€๋„ ์˜ค๋ž˜ ๊ฑธ๋ฆฐ๋‹ค. ๋ฆฌ์•กํŠธ ์•ฑ์—์„œ ๋ฐ์ดํ„ฐ ํŽ˜์นญ์€ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋งˆ์šดํŠธ๋œ ์ดํ›„์— ์ง„ํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์— FCP ์ดํ›„์— ์ถ”๊ฐ€์ ์ธ ์‹œ๊ฐ„์ด ์†Œ์š”๋œ๋‹ค.์ฆ‰, ๋ฐ์ดํ„ฐ ์š”์ฒญ ์‹œ์ ์ด ๋А๋ ค์ง€๊ฒŒ ๋˜๋Š” ๋‹จ์  ๋ฐœ์ƒ Next.js์˜ ๋‹ค์–‘ํ•œ ์‚ฌ์ „ ๋ Œ๋”๋ง1. ์„œ๋ฒ„์‚ฌ์ด๋“œ ๋ Œ๋”๋ง(SSR)์‚ฌ์ „ ๋ Œ๋”๋ง์˜ ๊ณผ์ • ์ค‘์— ๋ฐ์ดํ„ฐ ํŒจ์นญ์„ ๋™์‹œ์— ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.๋”ฐ๋ผ์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์š”์ฒญํ•˜๋Š” ์‹œ์ ์ด ๋งค์šฐ ์•ž์„œ๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ฐ์ดํ„ฐ ํŒจ์นญ์ด ์ด๋ฏธ ์™„๋ฃŒ๋œ ์›นํŽ˜์ด์ง€๋ฅผ ์ถ”๊ฐ€์ ์ธ ๋กœ๋”ฉ ์—†์ด ๋ณด์—ฌ์ค„ ์ˆ˜ ์žˆ๋‹ค.์ด๋Š” ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ์‚ฌ์ „ ๋ Œ๋”๋ง ๋ฐฉ์‹์ด๊ณ ,..

    [Next.js] page router ํŽ˜์ด์ง€๋ณ„ ๋ ˆ์ด์•„์›ƒ ์„ค์ •

    ํ•œ ์ž… ํฌ๊ธฐ๋กœ ์ž˜๋ผ๋จน๋Š” Next.js ํ•™์Šต์ •๋ฆฌ์šฉ์ž…๋‹ˆ๋‹ค. 2.8) ํŽ˜์ด์ง€๋ณ„ ๋ ˆ์ด์•„์›ƒ ์„ค์ •ํ•˜๊ธฐํŽ˜์ด์ง€๋ณ„๋กœ ํŠน์ • Layout ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•import SearchableLayout from "@/components/searchable-layout";import style from "./index.module.css";import { ReactNode } from "react";export default function Home() { return ( ์ธ๋ฑ์Šค H2 );}Home.getLayout = (page: ReactNode) => { return {page};}; ํŽ˜์ด์ง€๋งˆ๋‹ค ํŠน์ • Layout ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ ์šฉํ•ด์•ผ ํ•  ๋•Œ๊ฐ€ ์žˆ๋Š”๋ฐ, ๊ทธ๋Ÿด ๋•Œ๋Š” getLayout ๋ฉ”..

    [Next.js] page router - API Routes

    ํ•œ ์ž… ํฌ๊ธฐ๋กœ ์ž˜๋ผ๋จน๋Š” Next.js ํ•™์Šต์ •๋ฆฌ์šฉ์ž…๋‹ˆ๋‹ค. 2.5) API Routes2.5 API RoutesAPI Routs๋ž€?Next.js ์•ฑ์—์„œ API๋ฅผ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” ๊ธฐ๋Šฅ๋งˆ์น˜ ๋ฐฑ์—”๋“œ API ์„œ๋ฒ„๊ฐ€ ํ•˜๋Š” ์ผ๊ณ  ๋™์ผํ•˜๊ฒŒ ๊ฐ„๋‹จํ•œ API๋ฅผ ๊ตฌ์ถ•ํ•ด์„œ ๋ธŒ๋ผ์šฐ์ €๋กœ๋ถ€ํ„ฐ ์š”์ฒญ์„ ๋ฐ›์•„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊บผ๋‚ด์˜จ๋‹ค๋˜๊ฐ€ ์•„๋‹ˆ๋ฉด ๋‹ค๋ฅธ ์„œ๋“œํŒŒํ‹ฐ์— ๋ฐ์ดํ„ฐ๋ฅผ ๋ถˆ๋Ÿฌ์™€์„œ ์ „๋‹ฌ์„ ํ•ด์ค€๋‹ค๋Š” ๋“ฑ์˜ ๋™์ž‘์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค. API Routes ์‹ค์Šตpages/api ์•„๋ž˜์— API ๊ฒฝ๋กœ๋กœ ๋งŒ๋“ค๊ณ  ์‹ถ์€ ์ด๋ฆ„์œผ๋กœ ํŒŒ์ผ ๋งŒ๋“ค์–ด์ค€๋‹ค. (ex api/time ์œผ๋กœ ํ•˜๊ณ  ์‹ถ์œผ๋ฉด time.ts)import type { NextApiRequest, NextApiResponse } from "next";export default functi..

    [Next.js] page router - ํ”„๋ฆฌํŽ˜์นญ

    ํ•œ ์ž… ํฌ๊ธฐ๋กœ ์ž˜๋ผ๋จน๋Š” Next.js ํ•™์Šต์ •๋ฆฌ์šฉ์ž…๋‹ˆ๋‹ค. 2.4) ํ”„๋ฆฌํŽ˜์นญ2.4 ํ”„๋ฆฌํŽ˜์นญํ”„๋ฆฌํŽ˜์นญ(Pre-Fetching)์ด๋ž€?ํ˜„์žฌ ๋ณด๊ณ  ์žˆ๋Š” ํŽ˜์ด์ง€์—์„œ ๋งํฌ๋“ค์„ ํ†ตํ•ด ์ด๋™ํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ํŽ˜์ด์ง€๋“ค์˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ๋ฅผ ์‚ฌ์ „์— ๋ฏธ๋ฆฌ ๋‹ค ๋ถˆ๋Ÿฌ์˜ค๋Š” ๊ธฐ๋Šฅ ํ”„๋ฆฌํŽ˜์นญ์ด ํ•„์š”ํ•œ ์ด์œ ์‚ฌ์ „ ๋ Œ๋”๋ง ํŒŒํŠธ์—์„œ ์›๋ž˜ Next.js์—์„œ ์ดˆ๊ธฐ ์ ‘์† ์š”์ฒญ์ด ๋ฐœ์ƒํ•˜๋ฉด ์„œ๋ฒ„๊ฐ€ ๋ธŒ๋ผ์šฐ์ €์—๊ฒŒ html ํŽ˜์ด์ง€๋ฅผ ์‘๋‹ตํ•œ ์ดํ›„์— ํ›„์†์œผ๋กœ ๋ชจ๋“  ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ๋ฅผ ๋ฒˆ๋“ค ํŒŒ์ผ ํ˜•ํƒœ๋กœ ์ „๋‹ฌ์„ ํ•ด์ฃผ๊ณ , ๋ชจ๋“  ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ๋ฅผ ๋ฒˆ๋“ค ํŒŒ์ผ ํ˜•ํƒœ๋กœ ์ „๋‹ฌํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ํŽ˜์ด์ง€ ์ด๋™์ด ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ์„œ๋ฒ„์—๊ฒŒ ๋ณ„๋„์˜ ์š”์ฒญ ์—†์ด ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰์‹œ์ผœ์„œ(ํด๋ผ์ธ์–ธํŠธ ์‚ฌ์ด๋“œ ๋ Œ๋”๋ง) ์•Œ์•„์„œ ์ฒ˜๋ฆฌ๋ฅผ ํ•œ๋‹ค๊ณ  ํ–ˆ๋‹ค. Next.js๋Š” ๋ชจ๋“  ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ๋“ค..

    [Next.js] Page Router, ์„ค์ •, ๋„ค๋น„๊ฒŒ์ดํŒ…

    ํ•œ ์ž… ํฌ๊ธฐ๋กœ ์ž˜๋ผ๋จน๋Š” Next.js ํ•™์Šต์ •๋ฆฌ์šฉ์ž…๋‹ˆ๋‹ค. 2.1) Page Router๋ฅผ ์†Œ๊ฐœํ•ฉ๋‹ˆ๋‹ค.2.2) ํŽ˜์ด์ง€ ๋ผ์šฐํŒ… ์„ค์ •ํ•˜๊ธฐ2.3) ๋„ค๋น„๊ฒŒ์ดํŒ…2.1 Page Router๋ฅผ ์†Œ๊ฐœํ•ฉ๋‹ˆ๋‹คPage Router ๋ž€?๋งŽ์€ ๊ธฐ์—…์—์„œ ํ™œ์šฉ๋˜๊ณ  ์žˆ๋Š” ๊ฐ€์žฅ ์•ˆ์ •์ ์ธ ๋ผ์šฐํ„ฐํŠน์ • ์กฐ๊ฑด์„ ๊ธฐ์ค€์œผ๋กœ ์›น์„œ๋น„์Šค ๋‚ด์— ํŽ˜์ด์ง€๋ฅผ ๋ถ„ํ• ํ•˜๊ณ  ๋˜ ๊ทธ๋ ‡๊ฒŒ ๋ถ„ํ• ๋œ ํŽ˜์ด์ง€ ๊ฐ„์˜ ์ด๋™์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํŒŒ์ผ์˜ ์ด๋ฆ„(ํ˜น์€ ํด๋”์˜ ์ด๋ฆ„)์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํŽ˜์ด์ง€ ๋ผ์šฐํŒ…์„ ์ œ๊ณต ๋™์  ๊ฒฝ๋กœ/page/1, /page/2... ์ฒ˜๋Ÿผ ๊ฐ€๋ณ€์ ์ธ ๊ฐ’์„ ํฌํ•จํ•˜๊ณ  ์žˆ๋Š” ๊ฒฝ๋กœ(๋ธ”๋กœ๊ทธ ๊ฒŒ์‹œ๊ธ€ ์ฃผ์†Œ ๋“ฑ)/page ํด๋” ํ•˜๋‹จ์— [id].js ๋กœ ๋Œ€๊ด„ํ˜ธ๋ฅผ ํ†ตํ•ด ๋งŒ๋“ค์–ด์ค„ ์ˆ˜ ์žˆ๋‹ค. npx(node package execute)๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค์ด ์‹ค์ œ๋กœ ์˜ฌ๋ผ๊ฐ€์žˆ๋Š” ์„œ๋ฒ„์ธ npmjs...

    [Next.js] Next.js?

    ํ•œ ์ž… ํฌ๊ธฐ๋กœ ์ž˜๋ผ๋จน๋Š” Next.js ํ•™์Šต์ •๋ฆฌ์šฉ์ž…๋‹ˆ๋‹ค. 1.1) Next.js๋ฅผ ์†Œ๊ฐœํ•ฉ๋‹ˆ๋‹ค.1.2) Next.js ์‚ฌ์ „๋ Œ๋”๋ง ์ดํ•ดํ•˜๊ธฐ1.3) ์‹ค์Šต์šฉ ๋ฐฑ์—”๋“œ ์„œ๋ฒ„ ์„ธํŒ…ํ•˜๊ธฐ1.4) ๋ณธ๊ฒฉ์ ์ธ ํ•™์Šต์— ์•ž์„œNext.js ๋ผ๋Š” ๊ธฐ์ˆ ์€ ์–ด๋–ค ํŠน์ง•์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”๊ฐ€?Next.js- Next.js : ๋ฆฌ์•กํŠธ๋งŒ์„ ์œ„ํ•œ ๋ฆฌ์•กํŠธ ์ „์šฉ์˜ ์›น ๊ฐœ๋ฐœ ํ”„๋ ˆ์ž„์›Œํฌ ๊ธฐ์กด์˜ ๋ฆฌ์•กํŠธ ๊ธฐ์ˆ  + ํŽ˜์ด์ง€ ๋ผ์šฐํŒ… + ๋‹ค์–‘ํ•œ ์ตœ์ ํ™” ๊ธฐ๋Šฅ ๋“ฑ๋“ฑ์˜ ์ถ”๊ฐ€ ๊ธฐ๋Šฅ๋“ค์„ ๋ช‡ ๊ฐœ ๋ง๋ถ™์—ฌ ๋†“์€ ๋ฆฌ์•กํŠธ์˜ ํ™•์žฅํŒ vercel์—์„œ ๊ฐœ๋ฐœFramework vs LibraryNext.js๋Š” ๋ฆฌ์•กํŠธ ์ „์šฉ์˜ ์›น ๊ฐœ๋ฐœ ํ”„๋ ˆ์ž„์›Œํฌ์ด์ง€๋งŒ, React๋Š” UI ๊ฐœ๋ฐœ์„ ์œ„ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋‹ค. 1. ๊ธฐ๋Šฅ ๊ตฌํ˜„์˜ ์ฃผ๋„๊ถŒ์ด ๋ˆ„๊ตฌ์—๊ฒŒ ์žˆ๋Š”๊ฐ€Framework : ์ฃผ๋„๊ถŒ์„ Framework๊ฐ€ ๊ฐ€..

    [๋ฆฌํŒฉํ„ฐ๋ง 2ํŒ] ๋ฆฌํŒฉํ„ฐ๋ง ์นดํƒˆ๋กœ๊ทธ ๋ณด๋Š” ๋ฒ•(ch5)

    ch5 ๋ฆฌํŒฉํ„ฐ๋ง ์นดํƒˆ๋กœ๊ทธ ๋ณด๋Š” ๋ฒ•๋ฆฌํŒฉํ„ฐ๋ง ํ˜•์‹- ์ด๋ฆ„ : ์ด๋ฆ„์€ ๋ฆฌํŒฉํ„ฐ๋ง ์šฉ์–ด๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š” ๋ฐ ์ค‘์š”ํ•˜๋‹ค. - ๊ฐœ์š” : ๋ฆฌํŒฉํ† ๋ง์˜ ํ•ต์‹ฌ ๊ฐœ๋… -> ์›ํ•˜๋Š” ๋ฆฌํŒฉํ„ฐ๋ง์„ ์ฐพ์„ ๋•Œ ๋„์›€ ๋  ๊ฒƒ์ด๋‹ค.- ๋ฐฐ๊ฒฝ : ๋ฆฌํŒฉํ„ฐ๋ง ๊ธฐ๋ฒ•์ด ์™œ ํ•„์š”ํ•œ์ง€, ๊ทธ ๊ธฐ๋ฒ•์„ ์ ์šฉํ•˜๋ฉด ์•ˆ ๋˜๋Š” ์ƒํ™ฉ์„ ์„ค๋ช…- ์ ˆ์ฐจ : ๋ฆฌํŒฉํ„ฐ๋งํ•˜๋Š” ๊ตฌ์ฒด์ ์ธ ๊ณผ์ •- ์˜ˆ์‹œ : ํ•ด๋‹น ๋ฆฌํŒฉํ„ฐ๋ง ๊ธฐ๋ฒ•์„ ์‹ค์ œ๋กœ ์ ์šฉํ•˜๋Š” ๊ฐ„๋‹จํ•œ ์˜ˆ์™€ ํšจ๊ณผ