Javascript/next.js

[Next.js] Next.js๋Š” ๋ฌด์—‡์ด๊ณ , ์™œ ์‚ฌ์šฉํ•˜๋Š”๊ฐ€?

Rainbow๐ŸŒˆCoder 2022. 12. 12. 15:59
728x90

ํ™ˆํŽ˜์ด์ง€ ๋Œ€๋ฌธ์—๋Š”

ํ”„๋กœ๋•์…˜์šฉ React ํ”„๋ ˆ์ž„์›Œํฌ 

๋ผ๊ณ  ์จ์ ธ์žˆ๋Š” Next.js

React ๊ฐœ๋ฐœ์ž์—๊ฒŒ, NextJS์˜ ์‚ฌ์šฉ์ด ์–ด๋–ป๊ฒŒ ๋„์›€์ด ๋˜๋Š”์ง€ ์•Œ์•„๋ณด์ž

 

<๊ธฐ๋ณธ ๋ฐฐ๊ฒฝ ์ง€์‹>

React๋Š” ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌ์ถ•์„ ์œ„ํ•œ JavaScript ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋‹ค.

ReactJS๋Š” ์„œ๋“œ ํŒŒํ‹ฐ ํŒจํ‚ค์ง€๋กœ ํ”„๋ก ํŠธ์—”๋“œ ํ”„๋กœ์ ํŠธ์— ์ถ”๊ฐ€๋˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋‹ค.

React๋ฅผ ์‚ฌ์šฉํ•ด ์ƒํ˜ธ ์ž‘์šฉ์ด ๊ฐ€๋Šฅํ•œ(๊ฐœ๋ฐœ์ž ์ž…์žฅ์—์„œ ๋ณต์žกํ•œ) ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

 

์„œ๋ฒ„์‚ฌ์ด๋“œ ๋ Œ๋”๋ง : ํด๋ผ์ด์–ธํŠธ ์ธก์ด ์•„๋‹Œ ์„œ๋ฒ„ ์ธก์˜ ํŽ˜์ด์ง€ ์ƒ์— ๋ Œ๋”๋ง๋˜๋Š” ์ฝ˜ํ…์ธ  ์ฒ˜๋ฆฌ๋ฅผ ์˜๋ฏธํ•จ

 ํ•ด๋‹น ํŽ˜์ด์ง€๊ฐ€ ์„œ๋ฒ„์—์„œ ๋ฏธ๋ฆฌ ๋ Œ๋”๋ง์ด ๋˜๋Š” ์ฆ‰, ์š”์ฒญ์ด ์„œ๋ฒ„๋กœ ๋„๋‹ฌํ•  ๋•Œ ๋ฐ์ดํ„ฐ ํŽ˜์นญ์ด ์„œ๋ฒ„ ์ธก์—์„œ ์ฒ˜๋ฆฌ๋œ๋‹ค๋ฉด

๋ชจ๋“  ๋‚ด์šฉ์„ ํฌํ•จํ•œ ํŽ˜์ด์ง€๊ฐ€ ์‚ฌ์šฉ์ž์™€ ๊ฒ€์ƒ‰ ์—”์ง„ ์‚ฌ์šฉ์ž๋“ค์—๊ฒŒ ์ œ๊ณต๋  ์ˆ˜ ์žˆ๋‹ค.

๊ทธ๋Ÿฌ๋ฉด ์‚ฌ์šฉ์ž๋“ค์ด ํŽ˜์ด์ง€๊ฐ€ ๊นœ๋นก์ด๋Š” ๋กœ๋”ฉ ์ƒํƒœ๋ฅผ ๊ฒฝํ—˜ํ•  ํ•„์š”๋„ ์—†๊ณ 

๊ฒ€์ƒ‰ ์—”์ง„์„ ํ†ตํ•ด์„œ๋„ ํŽ˜์ด์ง€์˜ ์ฝ˜ํ…์ธ  ํ™•์ธ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ์„œ๋ฒ„ ์ธก ๋ Œ๋”๋ง์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ด์ฃผ๋Š” ๊ฒƒ์ด๋‹ค.

React ํŽ˜์ด์ง€, ์ปดํฌ๋„ŒํŠธ๋ฅผ ์„œ๋ฒ„ ์ธก์—๊ฒŒ ๋ฏธ๋ฆฌ ๋ Œ๋”๋ง ํ•ด์ฃผ๊ธฐ์— ๊ฐ€๋Šฅํ•˜๋‹ค.

 

ReactJS์—๋Š” ์‚ฌ์‹ค ์„œ๋ฒ„ ์ธก ๋ Œ๋”๋ง์„ ์ถ”๊ฐ€ํ•˜๋„๋ก ํ•ด์ฃผ๋Š” ๋‚ด์žฅ ๊ธฐ๋Šฅ์ด ํฌํ•จ๋˜์–ด ์žˆ์ง€๋งŒ ์ œ๋Œ€๋กœ ์ถ”๊ฐ€ํ•˜๊ธฐ๊ฐ€ ์ƒ๋‹นํžˆ ์–ด๋ ค์šธ ์ˆ˜ ์žˆ๊ณ 

์ง์ ‘ ๊ฑฐ์ณ์•ผ ํ•  ์„ค์ • ๋‹จ๊ณ„๊ฐ€ ๋” ๋งŽ์•„์ง„๋‹ค.

NextJS์—๋Š” ๋‚ด์žฅ ์„œ๋ฒ„ ์ธก ๋ Œ๋”๋ง์ด ์žˆ์–ด ์ž๋™์œผ๋กœ ํŽ˜์ด์ง€๋ฅผ ๋ฏธ๋ฆฌ ๋ Œ๋”๋งํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ž‘์—…์„ ํ›จ์”ฌ ์‰ฝ๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค.

์ฆ‰ NextJS๋ฅผ ์‚ฌ์šฉํ•ด ์•ฑ์„ ๊ตฌ์ถ•ํ•˜๋ฉด ์•„๋ฌด ์ถ”๊ฐ€ ์„ค์ •์ด ์—†์ด๋„ ํŽ˜์ด์ง€๋ฅผ ๋ฐฉ๋ฌธํ•˜๋ฉด, ์„œ๋ฒ„ ์ธก์—์„œ ๋ Œ๋”๋ง์ด ๋ฐ”๋กœ ๋˜์–ด ์žˆ๋Š” ์ƒํƒœ๊ฐ€ ๋œ๋‹ค.

๋”ฐ๋ผ์„œ ์ด๋Š” ์ ์ ˆํ•œ ๊ฒ€์ƒ‰ ์—”์ง„ ์ตœ์ ํ™”๊ฐ€ ๋œ๋‹ค.

๊ฒ€์ƒ‰ ์—”์ง„์—์„œ ์•ก์„ธ์Šคํ•ด๋„ ์ฝ˜ํ…์ธ ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๊ณ  ์‚ฌ์šฉ์ž๋“ค์€ ๋กœ๋”ฉ๋˜๋Š” ๊นœ๋นก์ž„ ํ˜„์ƒ์„ ๊ฒช์ง€ ์•Š์•„์„œ ๋กœ๋”ฉ ๊ฒฝํ—˜ ๋˜ํ•œ ๊ฐœ์„ ๋œ๋‹ค.

 

NextJS๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ถ๊ทน์ ์œผ๋กœ ํด๋ผ์ด์–ธํŠธ ์ธก ๋ฐ ์„œ๋ฒ„ ์ธก์˜ ์ฝ”๋“œ๊ฐ€ ์œตํ•ฉ์ด ๋œ๋‹ค.

 

ํŒŒ์ผ ๊ธฐ๋ฐ˜ ๋ผ์šฐํŒ… ๊ธฐ๋Šฅ ์ œ๊ณต

File-based Routing

๊ธฐ์กด์˜ React์—๋Š” ๋ผ์šฐํ„ฐ๊ฐ€ ์•„์˜ˆ ์—†๋‹ค. 

๋ผ์šฐํŒ…์ด๋ž€ ์‚ฌ์šฉ์ž์—๊ฒŒ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํŽ˜์ด์ง€๊ฐ€ ์žˆ๋Š” ๋“ฏํ•œ ์ฐฉ๊ฐ์„ ๋ถˆ๋Ÿฌ์ผ์œผํ‚ค๋Š” ๊ฒƒ์ด๋‹ค.

๋ผ์šฐํ„ฐ๋Š” URL์„ ํ™•์ธํ•ด URL์ด ๋ณ€๊ฒฝ๋  ๋•Œ

๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์š”์ฒญ์„ ์„œ๋ฒ„๋กœ ๋ณด๋‚ด๋Š” ๊ธฐ๋ณธ ๋™์ž‘์„ ๋ฐฉ์ง€ํ•˜๊ณ (์„œ๋ฒ„์— ์ถ”๊ฐ€ ์š”์ฒญ์„ ๋ณด๋‚ด์ง€ ์•Š๊ณ ๋„),

๊ทธ ๋Œ€์‹ ์— React๋ฅผ ํ†ตํ•ด ํŽ˜์ด์ง€ ์ƒ์— ๋‹ค๋ฅธ ์ฝ˜ํ…์ธ ๋ฅผ ๋ Œ๋”๋งํ•œ๋‹ค.

URL์— ๊ธฐ๋ฐ˜ํ•ด ํ™”๋ฉด์— ๋‚˜ํƒ€๋‚˜๋Š” ๋‚ด์šฉ์„ ๋ณ€๊ฒฝ(๋‹ค๋ฅธ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ๊ฒƒ)์ด ๋ฐ”๋กœ ๋ผ์šฐํŒ…์ด๋‹ค.

 

React Router๋„ ํ›Œ๋ฅญํ•œ ํŒจํ‚ค์ง€์ด์ง€๋งŒ ๋ณ„๋„์˜ ์ฝ”๋“œ๋ฅผ ๋”ฐ๋กœ ์ž‘์„ฑํ•ด์•ผ ํ•œ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๊ฐœ๋ณ„ ํด๋”์— ํŽ˜์ด์ง€๋กœ์„œ ์ž‘๋™ํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ €์žฅํ•˜๋Š”๋ฐ

์ด ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ฝ”๋“œ ๋‚ด์—์„œ ๋ผ์šฐํŠธ ์„ค์ •์„ ๋ชจ๋ฐฉํ•œ๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

 

ํ•˜์ง€๋งŒ NextJS๋กœ๋Š” ์ฝ”๋“œ ๋‚ด ๋ผ์šฐํŠธ ์ •์˜๋ฅผ ์‚ฌ์šฉํ•  ํ•„์š”๊ฐ€ ์—†๊ฒŒ ๋œ๋‹ค.

NextJS๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด, ํŒŒ์ผ๊ณผ ํด๋”์— ํŽ˜์ด์ง€์™€ ๋ผ์šฐํŠธ๋ฅผ ์ •์˜ํ•˜๊ฒŒ ๋œ๋‹ค.

pages๋ผ๋Š” ํด๋”์— ํŽ˜์ด์ง€๊ฐ€ ์ง€์›ํ•œ๋А ๋ผ์šฐํŠธ(Route)์™€ ๊ฒฝ๋กœ(Path)๋ฅผ ๊ตฌ์กฐํ™”ํ•˜๊ฒŒ ๋œ๋‹ค.

์ค‘์ฒฉ ๋ผ์šฐ๋“œ, ํ˜น์€ ๋™์  ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋™์  ๋ผ์šฐํŠธ ๋“ฑ์„ ๋ชจ๋‘ ์ง€์›ํ•œ๋‹ค.

 

 

ReactJS์˜ ํ’€์Šคํƒ ํ”„๋ ˆ์ž„์›Œํฌ   

NextJS๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด, ๊ฐœ๋ฐœ์ž๋“ค์ด React ํ”„๋กœ์ ํŠธ์— ๋ฐฑ์—”๋“œ ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ์ž‘์—…๋„ ์ˆ˜์›”ํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค.

์„œ๋ฒ„ ์ธก ์‚ฌ์ „ ๋ Œ๋”๋ง์„ ํ†ตํ•œ ํด๋ผ์ด์–ธํŠธ ์ธก ์ฝ”๋“œ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ

์˜ˆ๋ฅผ ๋“ค์–ด ํŒŒ์ผ ์‹œ์Šคํ…œ์œผ๋กœ ์ž‘๋™์„ ํ•˜๊ฑฐ๋‚˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋กœ ์ „๋‹ฌ์ด ๋˜๋Š” ๋…๋ฆฝ์ ์ธ ๋ฐฑ์—”๋“œ ์ฝ”๋“œ๋„ ํฌํ•จํ•˜๋Š” ํ’€์Šคํƒ React ํ”„๋กœ์ ํŠธ๊ฐ€ ์žˆ์„ ๋•Œ NextJS๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด NodeJS ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด ์•„์ฃผ ์‰ฝ๊ฒŒ ๋ฐฑ์—”๋“œ API๋ฅผ React ํ”„๋กœ์ ํŠธ๋กœ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค.

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค, ํ˜น์€ ํŒŒ์ผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ์ฝ”๋“œ๋‚˜

๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๊ฑฐ๋‚˜ ์ธ์ฆ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๋“ฑ์˜ ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ์ž‘์—… NextJs๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์•„์ฃผ ๊ฐ„ํŽธํ•ด์ง„๋‹ค. 

๊ทธ๋Ÿฌ๋ฉด ๋…๋ฆฝ์ ์ธ REST API ํ”„๋กœ์ ํŠธ๋ฅผ ๊ตฌ์ถ•ํ•  ํ•„์š” ์—†์ด ํ•˜๋‚˜์˜ ํ”„๋กœ์ ํŠธ๋กœ ์ž‘์—…์„ ํ•˜๋ฉด์„œ

React ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค์ธ ํด๋ผ์ด์–ธํŠธ ์ธก์˜ ์ฝ”๋“œ๋„ ์ „๋ถ€ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ

๋ฐฑ์—”๋“œ API ์ฝ”๋“œ์™€๋„ ์œตํ•ฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

 

 

next ํ”„๋กœ์ ํŠธ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•

next ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“ค๊ณ  ์‹ถ์€ ํด๋”์—์„œ ์•„๋ž˜ ๋ช…๋ น์–ด์น˜๊ณ  ์—”ํ„ฐ!

npx create-next-app

 

728x90