๐Ÿค ์€์ง€log ๐Ÿค

[NextJS] NextJS ๋ณธ๋ฌธ

๐ŸŒท Next JS

[NextJS] NextJS

Eun_zii 2022. 10. 6. 14:17

์„ค์น˜

npx create-next-app@latest .
npx create-next-app@latest --ts .

โœ๏ธ

 * name can no longer contain capital letters

๋ผ๋Š” ์—๋Ÿฌ๊ฐ€ ๋œจ๋ฉด ํด๋”๋ช…์— " ๋Œ€๋ฌธ์ž " ๊ฐ€ ์žˆ์–ด์„œ ๋œจ๋Š”๊ฒƒ์ด๋ฏ€๋กœ " ์†Œ๋ฌธ์ž " ๋กœ ๋ณ€๊ฒฝ

 

npm run dev

์‹คํ–‰

 

NextJS ์™€ React

react = library , CSR(client-side-rendering)

Nextjs = framework , SSR(server-side-rendering)

 

โœ๏ธ CSR : ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด๋“œ ๋ Œ๋”๋ง ์ด๋ž€ ์‚ฌ์šฉ์ž์˜ ์š”์ฒญ์— ๋”ฐ๋ผ ํ•„์š”ํ•œ ๋ถ€๋ถ„๋งŒ ์‘๋‹ต ๋ฐ›์•„ ๋ Œ๋”๋ง ํ•˜๋Š” ๋ฐฉ์‹

     SSR : ์„œ๋ฒ„์‚ฌ์ด๋“œ ๋ Œ๋”๋ง์˜ ์•ฝ์ž๋กœ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ์™„์ „ํ•˜๊ฒŒ ๋งŒ๋“ค์–ด์ง„ htmlํŒŒ์ผ์„ ๋ฐ›์•„์™€ ํŽ˜์ด์ง€ ์ „์ฒด๋ฅผ ๋ Œ๋”๋ง ํ•˜๋Š” ๋ฐฉ์‹

 

๐Ÿ”† React์—์„œ๋Š” Router, render ๋“ฑ ํ™˜๊ฒฝ์ ์ธ ๊ฒƒ๋“ค์„ ์ง์ ‘ ์ฝ”๋“œ ์ž‘์„ฑํ•ด์„œ ์‹คํ–‰์‹œ์ผœ์ค˜์•ผ ํ•œ๋‹ค๋ฉด,

    NextJS๋Š” ๊ทœ์น™์— ๋งž์ถฐ ์ฝ”๋“œ๋งŒ ์ž˜ ์ž‘์„ฑํ•˜๋ฉด ์ž๋™์œผ๋กœ ์ฝ”๋“œ๋ฅผ ๋ถˆ๋Ÿฌ์˜ด

 

๐Ÿ”† React ์ฒ˜๋Ÿผ ์ž์œ ๋กœ์šด ์ˆ˜์ •์€ ๋ถˆ๊ฐ€ํ•จ

 

๐Ÿ”† ์œ ์ €์—๊ฒŒ ๋ณด์—ฌ์ฃผ๊ณ  ์‹ถ์€๊ฒƒ์ด ์žˆ์œผ๋ฉด pages ํด๋”๋‚ด์— ํŒŒ์ผ ์‹œ์ž‘์€ ๐Ÿ“Œ export default function ๐Ÿ“Œ์œผ๋กœ ํ•œ๋‹ค.

 

๐Ÿ”† React๋Š” ์˜ค๋ฅ˜ํŽ˜์ด์ง€ (404 ๋“ฑ)์„ ์ž‘์„ฑํ•ด์•ผํ•˜์ง€๋งŒ NextJS๋Š” default ํŽ˜์ด์ง€๊ฐ€ ์กด์žฌํ•จ - ์ˆ˜์ • ๊ฐ€๋Šฅ

 

๐Ÿ”† NextJS์—์„œ npm run start ๋Š” ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์„ ์‹คํ–‰ ํ•˜๋Š”๊ฒƒ์ด ์•„๋‹ˆ๋ผ " ์‹ค ์„œ๋ฒ„ "๋ฅผ ์‹คํ–‰ํ•˜๋Š”๊ฒƒ์ด๋‹ค.

 

    ์™œ๋ƒํ•˜๋ฉด NextJS๋Š” ์„œ๋ฒ„๊นŒ์ง€ ๋‚ด์žฅ๋˜์–ด ์žˆ๋Š” all-in-one ์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

๐Ÿ”† API๋ฅผ ๊ตฌํ˜„ํ•ด์„œ React์™€ ๊ฒฐํ•ฉํ•˜๋ฉด ๊ฐ„๋‹จํ•˜๊ฒŒ ์„œ๋ฒ„๊ธฐ๋Šฅ๊ณผ ํ”„๋ก ํŠธ์—”๋“œ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ• ์ˆ˜์žˆ๋Š” ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ตฌ์ถ•ํ• ์ˆ˜ ์žˆ๋‹ค.

์žฅ์ 

๐Ÿ”† ์•ฑ์— ์žˆ๋Š” ํŽ˜์ด์ง€๋“ค์ด ๋ฏธ๋ฆฌ ๋ Œ๋”๋ง ๋จ - ์ •์ ์œผ๋กœ ์ƒ์„ฑ

React๋Š” ์œ ์ €๊ฐ€ ๋ณด๋Š” ๋ชจ๋“  UI๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•œ๋‹ค. ๋ธŒ๋ผ์šฐ์ €๊ฐ€ js๋ฅผ ๊ฐ€์ ธ์™€์„œ ๊ทธ js๊ฐ€ ๋ชจ๋“  UI๋ฅผ ๋งŒ๋“ ๋‹ค. html์€ ๋น„์–ด์žˆ๋Š” <div> ํ•˜๋‚˜๋ฟ์ด      ๋‹ค. (๋Š๋ฆฐ ์—ฐ๊ฒฐ์—์„œ ํฐ ๋‹จ์ ์ด ์ƒ๊น€- ๋นˆ ํ™”๋ฉด๋งŒ ๋ณด์ธ๋‹ค ๋“ฑ )

NextJs์˜ ์†Œ์Šค์ฝ”๋“œ๋Š” ์ดˆ๊ธฐ์ƒํƒœ๋กœ(HTML) pre-rendering์„ ํ•จ ( ๋Š๋ฆฐ์—ฐ๊ฒฐ์—์„œ๋„ HTML์€ ๋ณผ์ˆ˜์žˆ๋‹ค. - API๋ฅผ ์ œ์™ธํ•œ ๋‹ค๋ฅธ๊ฒƒ๋“ค์€ ๋ณผ        ์ˆ˜์žˆ์Œ) ๊ทธํ›„์— React.js๊ฐ€ ํด๋ผ์ด์–ธํŠธ๋กœ ์ „์†ก๋˜์—ˆ์„๋•Œ react app์ด ์‹คํ–‰ ๋œ๋‹ค. React.js๋ฅผ ํ”„๋ก ํŠธ์—”๋“œ ์•ˆ์—์„œ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์„              โ€hydration ์ด๋ผ ๋ถ€๋ฅธ๋‹ค.

 

๐Ÿ”† NextJS๋Š” ReactJS๋ฅผ ๋ฐฑ์—”๋“œ์—์„œ ๋™์ž‘์‹œ์ผœ์„œ ์ด ํŽ˜์ด์ง€๋ฅผ ๋ฏธ๋ฆฌ ๋งŒ๋“œ๋Š”๋ฐ(ssr) ์ด๊ฒŒ component๋ฅผ ๋ฏธ๋ฆฌ ๋ Œ๋”๋ฅผํ•˜๊ณ , ๋ Œ๋”๋ง์ด๋๋‚˜๋ฉด      HTML์ด ๋˜๊ณ , ๊ทธ HTML์„ ์†Œ์Šค์ฝ”๋“œ์— ๋„ฃ์–ด์ค€๋‹ค. ๊ทธ๋Ÿผ ์œ ์ €๋Š” ๋กœ๋”ฉ์ด ๋˜์ง€์•Š์•˜์„๋•Œ ๋ฏธ๋ฆฌ HTML์„ ๋ณผ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ž˜์„œ SEO์— ์ข‹์€๊ฒƒ.        (๋กœ๋”ฉ์ด ๋˜๊ธฐ์ „์— ์†Œ์Šค์ฝ”๋“œ๊ฐ€ ์ด๋ฏธ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—)

 

โœ๏ธ ๊ฒ€์ƒ‰์—”์ง„์ตœ์ ํ™” (Search Engine Optimization) : ๊ฒ€์ƒ‰์„ ํ•˜๋ฉด ๊ฒ€์ƒ‰์—”์ง„์€ ์ธ๋ฑ์‹ฑํ•ด๋‘” ์ˆ˜๋งŽ์€ ์›น ํŽ˜์ด์ง€ ์ค‘ ๊ฐ€์žฅ ์ ํ•ฉํ•œ ์ˆœ์„œ๋Œ€๋กœ ๊ฒฐ๊ณผ๋ฅผ ๋…ธ์ถœํ•˜๋Š”๋ฐ ๊ทธ์ค‘ ์ž์‹ ์˜ ์›น ํŽ˜์ด์ง€๊ฐ€ ๋” ๋งŽ์ด ๋…ธ์ถœ๋˜๋„๋ก ์ตœ์ ํ™”๋œ ์ปจํ…์ธ ๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ

RULES

โญ๏ธ page ํด๋”๋‚ด์— ํŒŒ์ผ๋ช…์ด url์ด ๋จ (์†Œ๋ฌธ์ž๋กœ ์ž‘์„ฑ) / ํŒŒ์ผ๋‚ด์— component ์ด๋ฆ„์€ ์ค‘์š”ํ•˜์ง€ ์•Š์Œ! โญ๏ธ

 

๐Ÿ”† ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ์—์„œ jsx ๋ฅผ ๋ฆฌํ„ดํ•˜๋Š” default export ํ•จ์ˆ˜๋Š” ํ•จ์ˆ˜์„ ์–ธ๋ฌธ์œผ๋กœ ์ •์˜ํ•œ๋‹ค.(= export default function ) ๊ทธ ์™ธ ํ•จ์ˆ˜๋“ค์€      ํ™”์‚ดํ‘œ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

 

๐Ÿ”† NextJS์—์„œ๋Š” anchorํƒœ๊ทธ( < a > )๋ฅผ ์‚ฌ์šฉํ•˜์ง€์•Š๋Š”๋‹ค.

       โžž React์˜ Link์™€ ๊ฐ™์Œ. (์ƒˆ๋กœ๊ณ ์นจ๋ฐฉ์ง€)

       โžž next/link์˜ Link href๋ฅผ ์‚ฌ์šฉ

       โžž clinet side rendering์ด ๊ฐ€๋Šฅํ•˜์ง€๋งŒ className, style ๋“ฑ์„ ๋„ฃ์–ด์ค„๋•Œ๋Š” < Link >< /Link> ์•ˆ aํƒœ๊ทธ์—์„œ ํ•ด์ค˜์•ผํ•œ๋‹ค.

 

 

728x90