Skip to main content

8. Nextjs and Typescript

NextJS ๋ž€#

Next JS๋ž€?#

  • React์˜ SSR(server side rendering)์„ ์‰ฝ๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋„์™€ ์ฃผ๋Š” ๊ฐ„๋‹จํ•œ ํ”„๋ ˆ์ž„์›Œํฌ์ž…๋‹ˆ๋‹ค. (๋ฆฌ์•กํŠธ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ)
  • ๋ฆฌ์•กํŠธ๋กœ ๊ฐœ๋ฐœํ•  ๋•Œ SPA(single Page Application)์„ ์ด์šฉํ•˜๋ฉฐ CSR(Client Side Rendering)์„ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ข‹์€ ์ ๋„ ์žˆ์ง€๋งŒ ๋‹จ์ ๋„ ์žˆ๋Š”๋ฐ ๊ทธ ๋ถ€๋ถ„์ด ๋ฐ”๋กœ ๊ฒ€์ƒ‰์—”์ง„ ์ตœ์ ํ™”(SEO) ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค.
  • Client Side Rendering์„ ํ•˜๋ฉด ์ฒซํŽ˜์ด์ง€์—์„œ ๋นˆ html์„ ๊ฐ€์ ธ์™€์„œ JSํŒŒ์ผ์„ ํ•ด์„ํ•˜์—ฌ ํ™”๋ฉด์„ ๊ตฌ์„ฑํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํฌํ„ธ ๊ฒ€์ƒ‰์— ๊ฑฐ์˜ ๋…ธ์ถœ ๋  ์ผ์ด ์—†์Šต๋‹ˆ๋‹ค.
  • ํ•˜์ง€๋งŒ Next.js์—์„œ๋Š” Pre-Rendering์„ ํ†ตํ•ด์„œ ํŽ˜์ด์ง€๋ฅผ ๋ฏธ๋ฆฌ ๋ Œ๋”๋ง ํ•˜๋ฉฐ ์™„์„ฑ๋œ HTML์„ ๊ฐ€์ ธ์˜ค๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์šฉ์ž์™€ ๊ฒ€์ƒ‰ ์—”์ง„ ํฌ๋กค๋Ÿฌ์—๊ฒŒ ๋ฐ”๋กœ ๋ Œ๋”๋ง ๋œ ํŽ˜์ด์ง€๋ฅผ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
  • ๋ฆฌ์•กํŠธ์—์„œ๋„ SSR์„ ์ง€์›ํ•˜๊ธฐ๋ฉด ๊ตฌํ˜„ํ•˜๊ธฐ์— ๊ต‰์žฅํžˆ ๋ณต์žกํ•˜๊ธฐ ๋•Œ๋ฌธ์— Next.js๋ฅผ ํ†ตํ•ด์„œ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ด์ฃผ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค

Server Side Rendering#

  • ํด๋ผ์ด์–ธํŠธ ๋Œ€์‹  ์„œ๋ฒ„์—์„œ ํŽ˜์ด์ง€๋ฅผ ์ค€๋น„ํ•˜๋Š” ์›๋ฆฌ์ž…๋‹ˆ๋‹ค.
  • ์›๋ž˜ ๋ฆฌ์•กํŠธ์—์„œ๋Š” ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด๋“œ ๋ Œ๋”๋งํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์„œ๋ฒ„์— ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š๊ณ , ์„œ๋ฒ„์—์„œ ํด๋ผ์ด์–ธํŠธ๋กœ ์‘๋‹ตํ•ด์„œ ๋ณด๋‚ธ html๋„ ๊ฑฐ์˜ ๋น„์–ด์žˆ์Šต๋‹ˆ๋‹ค.
  • => ์ด ๋ฐฉ์‹์€ ์„œ๋ฒ„์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ฌ ๋•Œ ์ง€์—ฐ ์‹œ๊ฐ„ ๋ฐœ์ƒ์œผ๋กœ UX ์ธก๋ฉด์—์„œ ์ข‹์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • => ๊ฒ€์ƒ‰ ์—”์ง„์— ๊ฒ€์ƒ‰ ์‹œ ์›นํฌ๋กค๋ง์ด ๋™์ž‘ํ•  ๋•Œ ๋‚ด์šฉ์„ ์ œ๋Œ€๋กœ ๊ฐ€์ ธ์™€ ์ฝ์„ ์ˆ˜ ์—†๊ธฐ์— ๊ฒ€์ƒ‰์—”์ง„ ์ตœ์ ํ™”์— ๋ฌธ์ œ๊ฐ€ ๋œ๋‹ค.
  • Next.js์—์„œ๋Š” ์„œ๋ฒ„ ์‚ฌ์ด๋“œ ๋ Œ๋”๋ง์„ ์ด์šฉํ•˜๋ฏ€๋กœ ์‚ฌ์šฉ์ž์™€ ๊ฒ€์ƒ‰ ์—”์ง„ ํฌ๋กค๋Ÿฌ์—๊ฒŒ ๋ฐ”๋กœ ๋ Œ๋”๋ง๋œ ํŽ˜์ด์ง€๋ฅผ ์ „๋‹ฌ ํ•  ์ˆ˜ ์žˆ์–ด์„œ ๊ฒ€์ƒ‰์—”์ง„ ์ตœ์ ํ™”์— ์ข‹์€ ์˜ํ–ฅ์„ ์ค๋‹ˆ๋‹ค.

์„ค์น˜ ๋ฐฉ๋ฒ•#

npx create-next-app@latest
# or
yarn create next-app
npx create-next-app@latest --typescript
# or
yarn create next-app --typescript

NextJS ๊ธฐ๋ณธ ํŒŒ์ผ ๊ตฌ์กฐ#

pages#

  • ์ด ํด๋” ์•ˆ์— ํŽ˜์ด์ง€๋“ค์„ ์ƒ์„ฑ ํ•ฉ๋‹ˆ๋‹ค.
  • index.tsx๊ฐ€ ์ฒ˜์Œ "/" ํŽ˜์ด์ง€๋กœ ๋ฉ๋‹ˆ๋‹ค.
  • _app.tsx ๋Š” ๊ณตํ†ต๋˜๋Š” ๋ ˆ์ด์•„์›ƒ์„ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ํŽ˜์ด์ง€์— ๊ณตํ†ต์œผ๋กœ ๋“ค์–ด๊ฐ€๋Š” ๊ฑธ ๋„ฃ์–ด์ฃผ๋ ค๋ฉด ์—ฌ๊ธฐ์— ๋„ฃ์–ด์ฃผ์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค. (url์„ ํ†ตํ•ด ํŠน์ • ํŽ˜์ด์ง€์— ์ง„์ž…ํ•˜๊ธฐ ์ „ ํ†ต๊ณผํ•˜๋Š” ์ธํ„ฐ์…‰ํ„ฐ ํŽ˜์ด์ง€์ž…๋‹ˆ๋‹ค.)
  • ๋งŒ์•ฝ about์ด๋ผ๋Š” ํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“œ์‹œ๋ ค๋ฉด pages ํด๋” ์•ˆ์— about.tsx๋ฅผ ์ƒ์„ฑํ•ด์ฃผ์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

public#

  • ์ด๋ฏธ์ง€ ๊ฐ™์€ ์ •์ (static) ์—์…‹๋“ค์„ ๋ณด๊ด€ํ•ฉ๋‹ˆ๋‹ค.

styles#

  • ๋ง ๊ทธ๋ž˜๋„ ์Šคํƒ€์ผ๋ง์„ ์ฒ˜๋ฆฌํ•ด์ฃผ๋Š” ํด๋”์ž…๋‹ˆ๋‹ค.
  • ๋ชจ๋“ˆ(module) css๋Š” ์ปดํฌ๋„ŒํŠธ ์ข…์†์ ์œผ๋กœ ์Šคํƒ€์ผ๋งํ•˜๊ธฐ ์œ„ํ•œ ๊ฒƒ์ด๋ฉฐ, ํ™•์žฅ์ž ์•ž์— module์„ ๋ถ™์—ฌ์ค˜์•ผ ํ•ฉ๋‹ˆ๋‹ค.

next.config.js#

  • Nextjs๋Š” ์›นํŒฉ์„ ๊ธฐ๋ณธ ๋ฒˆ๋“ค๋Ÿฌ๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • ๊ทธ๋ž˜์„œ ์›นํŒฉ์— ๊ด€ํ•œ ์„ค์ •๋“ค์„ ์ด ํŒŒ์ผ์—์„œ ํ•ด์ค„์ˆ˜์žˆ์Šต๋‹ˆ๋‹ค.

Pre-rendering#

NextJS๋Š”#

  • ๋ชจ๋“  ํŽ˜์ด์ง€๋ฅผ pre-render ํ•ฉ๋‹ˆ๋‹ค. ์ด pre-renderํ•œ๋‹ค๋Š” ์˜๋ฏธ๋Š” ๋ชจ๋“  ํŽ˜์ด์ง€๋ฅผ ์œ„ํ•œ HTML์„ Client์‚ฌ์ด๋“œ์—์„œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์ „, "์‚ฌ์ „์—" ์ƒ์„ฑํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
  • ์ด๋ ‡๊ฒŒ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— SEO ๊ฒ€์ƒ‰์—”์ง„ ์ตœ์ ํ™”๊ฐ€ ์ข‹์•„์ง‘๋‹ˆ๋‹ค.

Pre Render ํ…Œ์ŠคํŠธ !!!#


Data Fetching#

Nextjs์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๋ฐฉ๋ฒ•์€...#

  • ์—ฌ๋Ÿฌ๊ฐ€์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์‚ฌ์šฉ ์šฉ๋„์— ๋”ฐ๋ผ์„œ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•ด์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.
  • ๋ณดํ†ต ๋ฆฌ์•กํŠธ์—์„œ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ฌ ๋•Œ useEffect์•ˆ์—์„œ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ Nextjs์—์„œ๋Š” ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•ด์„œ ๊ฐ€์ ธ์˜ค๋Š”๋ฐ ํ•˜๋‚˜์”ฉ ๋ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.
  • getStaticProps
    • Static Generation์œผ๋กœ ๋นŒ๋“œ(build)ํ•  ๋•Œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถˆ๋Ÿฌ์˜ต๋‹ˆ๋‹ค.(๋ฏธ๋ฆฌ ๋งŒ๋“ค์–ด์คŒ)
  • getStaticPaths
    • Static Generation์œผ๋กœ ๋ฐ์ดํ„ฐ์— ๊ธฐ๋ฐ˜ํ•˜์—ฌ pre-render์‹œ ํŠน์ •ํ•œ ๋™์  ๋ผ์šฐํŒ… ๊ตฌํ˜„(pages/post/[id].js)
  • getServerSideProps
    • Server Side Rendering์œผ๋กœ ์š”์ฒญ์ด ์žˆ์„ ๋•Œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถˆ๋Ÿฌ์˜ต๋‹ˆ๋‹ค.

getStaticProps#

  • getStaticProps ํ•จ์ˆ˜๋ฅผ async๋กœ export ํ•˜๋ฉด, getStaticProps์—์„œ ๋ฆฌํ„ด๋˜๋Š” props๋ฅผ ๊ฐ€์ง€๊ณ  ํŽ˜์ด์ง€๋ฅผ pre-render ํ•ฉ๋‹ˆ๋‹ค. build time์— ํŽ˜์ด์ง€๋ฅผ ๋ Œ๋”๋ง ํ•ฉ๋‹ˆ๋‹ค.

getStaticProps๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•  ๋•Œ#

  • ํŽ˜์ด์ง€๋ฅผ ๋ Œ๋”๋งํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋Š” ์‚ฌ์šฉ์ž์˜ ์š”์ฒญ๋ณด๋‹ค ๋จผ์ € build ์‹œ๊ฐ„์— ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ฌ ๋•Œ
  • ๋ฐ์ดํ„ฐ๋Š” Headless CMS์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ฌ ๋•Œ.
  • ๋ฐ์ดํ„ฐ๋ฅผ ๊ณต๊ฐœ์ ์œผ๋กœ ์บ์‹œํ•  ์ˆ˜ ์žˆ์„ ๋•Œ(์‚ฌ์šฉ์ž๋ณ„ ์•„๋‹˜).
  • ํŽ˜์ด์ง€๋Š” ๋ฏธ๋ฆฌ ๋ Œ๋”๋ง๋˜์–ด์•ผ ํ•˜๊ณ (SEO์˜ ๊ฒฝ์šฐ) ๋งค์šฐ ๋นจ๋ผํ•  ๋•Œ.(getStaticProps๋Š” ์„ฑ๋Šฅ์„ ์œ„ํ•ด CDN์—์„œ ์บ์‹œํ•  ์ˆ˜ ์žˆ๋Š” HTML ๋ฐ JSON ํŒŒ์ผ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.)

getStaticPaths#

  • ๋™์  ๋ผ์šฐํŒ…์ด ํ•„์š”ํ•  ๋•Œ getStaticPaths๋กœ ๊ฒฝ๋กœ ๋ฆฌ์ŠคํŠธ๋ฅผ ์ •์˜ํ•˜๊ณ , HTML์— build ์‹œ๊ฐ„์— ๋ Œ๋”๋ฉ๋‹ˆ๋‹ค.
  • Nextjs๋Š” pre-render์—์„œ ์ •์ ์œผ๋กœ getStaticPaths ์—์„œ ํ˜ธ์ถœํ•˜๋Š” ๊ฒฝ๋กœ๋“ค์„ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.

paths#

  • ์–ด๋– ํ•œ ๊ฒฝ๋กœ๊ฐ€ pre-render ๋ ์ง€๋ฅผ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค.
  • ๋งŒ์•ฝ pages/posts/[id].js ์ด๋ผ๋Š” ์ด๋ฆ„์˜ ๋™์  ๋ผ์šฐํŒ…์„ ์‚ฌ์šฉํ•˜๋Š” ํŽ˜์ด์ง€๊ฐ€ ์žˆ๋‹ค๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ๋ฉ๋‹ˆ๋‹ค.
  • ๋นŒ๋“œํ•˜๋Š” ๋™์•ˆ /posts/1๊ณผ /posts/2๋ฅผ ์ƒ์„ฑํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

params#

  • ํŽ˜์ด์ง€ ์ด๋ฆ„์ด pages/posts/[postId]/[commentId] ๋ผ๋ฉด , params์€ postId์™€ commentId์ž…๋‹ˆ๋‹ค.
  • ๋งŒ์•ฝ ํŽ˜์ด์ง€ ์ด๋ฆ„์ด pages/[...slug] ์™€ ๊ฐ™์ด ๋ชจ๋“  ๊ฒฝ๋กœ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด, params๋Š” slug๊ฐ€ ๋‹ด๊ธด ๋ฐฐ์—ด์ด์–ด์•ผํ•œ๋‹ค. ['postId', 'commentId']

fallback#

  • false ๋ผ๋ฉด getStaticPaths๋กœ ๋ฆฌํ„ด๋˜์ง€ ์•Š๋Š” ๊ฒƒ์€ ๋ชจ๋‘ 404 ํŽ˜์ด์ง€๊ฐ€ ๋œน๋‹ˆ๋‹ค.
  • true ๋ผ๋ฉด getStaticPaths๋กœ ๋ฆฌํ„ด๋˜์ง€ ์•Š๋Š” ๊ฒƒ์€ 404๋กœ ๋œจ์ง€ ์•Š๊ณ  , fallback ํŽ˜์ด์ง€๊ฐ€ ๋œจ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

getServerSideProps#

  • getServerSideProps ํ•จ์ˆ˜๋ฅผ async๋กœ export ํ•˜๋ฉด, Next๋Š” ๊ฐ ์š”์ฒญ๋งˆ๋‹ค ๋ฆฌํ„ด๋˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ getServerSideProps๋กœ pre-renderํ•ฉ๋‹ˆ๋‹ค.

getServerSideProps๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•  ๋•Œ#

  • ์š”์ฒญํ•  ๋•Œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์™€์•ผํ•˜๋Š” ํŽ˜์ด์ง€๋ฅผ ๋ฏธ๋ฆฌ ๋ Œ๋”ํ•ด์•ผ ํ•  ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์„œ๋ฒ„๊ฐ€ ๋ชจ๋“  ์š”์ฒญ์— ๋Œ€ํ•œ ๊ฒฐ๊ณผ๋ฅผ ๊ณ„์‚ฐํ•˜๊ณ , ์ถ”๊ฐ€ ๊ตฌ์„ฑ์—†์ด CDN์— ์˜ํ•ด ๊ฒฐ๊ณผ๋ฅผ ์บ์‹œํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ฒซ๋ฒˆ์งธ ๋ฐ”์ดํŠธ๊นŒ์ง€์˜ ์‹œ๊ฐ„์€ getStaticProps๋ณด๋‹ค ๋Š๋ฆฝ๋‹ˆ๋‹ค.

Typescript ๋ž€?#

TypeScript ๊ฐ€ ๋‚˜์˜ค๊ฒŒ ๋œ ๋ฐฐ๊ฒฝ..#

  • JavaScript๋Š” ์›๋ž˜ ํด๋ผ์ด์–ธํŠธ ์ธก ์–ธ์–ด๋กœ ๋„์ž…๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ Node.js์˜ ๊ฐœ๋ฐœ๋กœ ์ธํ•ด์„œ JavaScript๋ฅผ ํด๋ผ์ด์–ธํŠธ ์ธก ๋ฟ๋งŒ์ด ์•„๋‹Œ ์„œ๋ฒ„ ์ธก ๊ธฐ์ˆ ๋กœ๋„ ํ™œ์šฉ๋˜๊ฒŒ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.
  • ๊ทธ๋Ÿฌ๋‚˜ JavaScript ์ฝ”๋“œ๊ฐ€ ์ปค์งˆ์ˆ˜๋ก ์†Œ์Šค ์ฝ”๋“œ๊ฐ€ ๋” ๋ณต์žกํ•ด์ ธ์„œ ์ฝ”๋“œ๋ฅผ ์œ ์ง€ ๊ด€๋ฆฌํ•˜๊ณ  ์žฌ์‚ฌ์šฉํ•˜๊ธฐ๊ฐ€ ์–ด๋ ค์›Œ์กŒ์Šต๋‹ˆ๋‹ค. ๋”์šฑ์ด Type ๊ฒ€์‚ฌ ๋ฐ ์ปดํŒŒ์ผ ์‹œ ์˜ค๋ฅ˜ ๊ฒ€์‚ฌ์˜ ๊ธฐ๋Šฅ์„ ์ˆ˜์šฉํ•˜์ง€ ๋ชปํ•˜๊ธฐ ๋•Œ๋ฌธ์— JavaScript๊ฐ€ ๋ณธ๊ฒฉ์ ์ธ ์„œ๋ฒ„ ์ธก ๊ธฐ์ˆ ๋กœ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ์ˆ˜์ค€์—์„œ ์„ฑ๊ณตํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค.
  • ์ด ๊ฐ„๊ทน์„ ๋ฉ”์šฐ๊ธฐ ์œ„ํ•ด TypeScript๊ฐ€ ์ œ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

TypeScript ๋ž€ ?#

  • ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์— ํƒ€์ž…์„ ๋ถ€์—ฌํ•œ ์–ธ์–ด์ž…๋‹ˆ๋‹ค. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ํ™•์žฅ๋œ ์–ธ์–ด๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์™€ ๋‹ฌ๋ฆฌ ๋ธŒ๋ผ์šฐ์ €์—์„œ ์‹คํ–‰ํ•˜๋ ค๋ฉด ํŒŒ์ผ์„ ํ•œ๋ฒˆ ๋ณ€ํ™˜ํ•ด์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ณ€ํ™˜ ๊ณผ์ •์„ ์šฐ๋ฆฌ๋Š” ์ปดํŒŒ์ผ(complile) ์ด๋ผ๊ณ  ๋ถ€๋ฆ…๋‹ˆ๋‹ค.

Type System#

  • ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์—์„œ ์—๋Ÿฌ๋ฅผ ์žก๋Š” ๊ฑธ ๋„์™€์ค๋‹ˆ๋‹ค.
  • type annotations๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ฝ”๋“œ๋ฅผ ๋ถ„์„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์˜ค์ง ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์—์„œ๋งŒ ํ™œ์„ฑํ™” ๋ฉ๋‹ˆ๋‹ค.
  • ํƒ€์ž… ์Šคํฌ๋ฆฝํŠธ์™€ ์„ฑ๋Šฅ ํ–ฅ์ƒ๊ณผ๋Š” ๊ด€๊ณ„๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค

TypeScript ์‚ฌ์šฉํ•˜๋Š” ์ด์œ  ?#

  • TypeScript๋Š” JavaScript ์ฝ”๋“œ๋ฅผ ๋‹จ์ˆœํ™”ํ•˜์—ฌ ๋” ์‰ฝ๊ฒŒ ์ฝ๊ณ  ๋””๋ฒ„๊ทธํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.
  • TypeScript๋Š” ์˜คํ”ˆ ์†Œ์Šค์ž…๋‹ˆ๋‹ค.
  • TypeScript๋Š” ์ •์  ๊ฒ€์‚ฌ์™€ ๊ฐ™์€ JavaScript IDE ๋ฐ ์‚ฌ๋ก€๋ฅผ ์œ„ํ•œ ๋งค์šฐ ์ƒ์‚ฐ์ ์ธ ๊ฐœ๋ฐœ๋„๊ตฌ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  • TypeScript๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ฝ”๋“œ๋ฅผ ๋” ์‰ฝ๊ฒŒ ์ฝ๊ณ  ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • TypeScript๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ผ๋ฐ˜ JavaScript๋ณด๋‹ค ํฌ๊ฒŒ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • TypeScript๋Š” ES6(ECMAScript 6)์˜ ๋ชจ๋“  ์ด์ ๊ณผ ๋” ๋งŽ์€ ์ƒ์‚ฐ์„ฑ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  • TypeScript๋Š” ์ฝ”๋“œ ์œ ํ˜• ๊ฒ€์‚ฌ๋ฅผ ํ†ตํ•ด JavaScript๋ฅผ ์ž‘์„ฑํ•  ๋•Œ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ผ๋ฐ˜์ ์œผ๋กœ ๊ฒช๋Š” ๊ณ ํ†ต์Šค๋Ÿฌ์šด ๋ฒ„๊ทธ๋ฅผ ํ”ผํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋งˆํฌ๋‹ค์šด ํŒŒ์ผ์„ ๋ฐ์ดํ„ฐ๋กœ ์ถ”์ถœํ•˜๊ธฐ#


Typescript Type#

  • ํƒ€์ž…์ด๋ž€, ๊ทธ value๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ํ”„๋กœํผํ‹ฐ๋‚˜ ํ•จ์ˆ˜๋ฅผ ์ถ”๋ก ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.
  • ex. apple
    • string ๋ฌธ์ž์—ด
    • ์ด๊ฒƒ์€ value์ธ๋ฐ ๋ฌธ์ž์—ด์ด ๊ฐ€์ง€๋Š” ํ”„๋กœํผํ‹ฐ(properties), ๋ฉ”์†Œ๋“œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” value ์ž…๋‹ˆ๋‹ค.
  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ๋ฌธ์ž์—ด
    • Properties + Methods
  • Property
    • string.length๋Š” ๋ฌธ์ž์—ด์˜ ์†์„ฑ์ธ ๋ฌธ์ž์—ด์˜ ๊ธธ์ด๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋ฌธ์ž์—ด์ž์ฒด์—๋Š”์•„๋ฌด๊ฒƒ๋„ํ•˜์ง€์•Š์Šต๋‹ˆ๋‹ค
  • Method
    • string.toLowerCase()๋Š” ๋ฌธ์ž์—ด์„ ์†Œ๋ฌธ์ž๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ๋ฌธ์ž์—ด์— ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ ๋‹ค์Œ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

Types in Typescript#

  • TypeScript๋Š” JavaScript์—์„œ ๊ธฐ๋ณธ์œผ๋กœ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋ณธ ์ œ๊ณต ์œ ํ˜•(built-in types)์„ ์ƒ์†ํ•ฉ๋‹ˆ๋‹ค TypeScript ์œ ํ˜•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ถ„๋ฅ˜๋ฉ๋‹ˆ๋‹ค.

Primitive Types#

NameDescription
string๋ฌธ์ž์—ด์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
number์ˆซ์ž ๊ฐ’์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
booleantrue ์™€ false ๊ฐ’์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
nullํ•˜๋‚˜์˜ ๊ฐ’์„ ๊ฐ€์ง‘๋‹ˆ๋‹ค: null
undefinedํ•˜๋‚˜์˜ ๊ฐ’์„ ๊ฐ€์ง‘๋‹ˆ๋‹ค, ์ดˆ๊ธฐํ™”๋˜์ง€ ์•Š์€ ๋ณ€์ˆ˜์˜ ๊ธฐ๋ณธ๊ฐ’์ž…๋‹ˆ๋‹ค.
symbol๊ณ ์œ ํ•œ ์ƒ์ˆ˜ ๊ฐ’์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

Object Types#

NameDescription
functionํ•จ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
array๋ฐฐ์—ด์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
classesํด๋ž˜์Šค๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
object๊ฐ์ฒด๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

Typescript ์ถ”๊ฐ€ ์ œ๊ณต ํƒ€์ž…#

  • Any
    • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งŒ๋“ค ๋•Œ, ์ž˜ ์•Œ์ง€ ๋ชปํ•˜๋Š” ํƒ€์ž…์„ ํ‘œํ˜„ํ•ด์•ผ ํ•  ์ˆ˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ฐ’๋“ค์€ ์‚ฌ์šฉ์ž๋กœ๋ถ€ํ„ฐ ๋ฐ›์€ ๋ฐ์ดํ„ฐ๋‚˜ ์„œ๋“œ ํŒŒํ‹ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๊ฐ™์€ ๋™์ ์ธ ์ปจํ…์ธ ์—์„œ ์˜ฌ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ํƒ€์ž… ๊ฒ€์‚ฌ๋ฅผ ํ•˜์ง€ ์•Š๊ณ , ๊ทธ ๊ฐ’๋“ค ์ด ์ปดํŒŒ์ผ ์‹œ๊ฐ„์— ๊ฒ€์‚ฌ๋ฅผ ํ†ต๊ณผํ•˜๊ธธ ์›ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด, any ํƒ€์ž…์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ํ•˜์ง€๋งŒ ์ด ํƒ€์ž…์„ ์ตœ๋Œ€ํ•œ ์“ฐ์ง€ ์•Š๋Š”๊ฒŒ ์ข‹์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ noImplicitAny ๋ผ๋Š” ์˜ต์…˜์„ ์ฃผ๋ฉด any๋ฅผ ์ป์„ ๋•Œ ์˜ค๋ฅ˜๊ฐ€ ๋‚˜์˜ค๊ฒŒ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • Union
    • TypeScript๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ณ€์ˆ˜ ๋˜๋Š” ํ•จ์ˆ˜ ๋งค๊ฐœ๋ณ€์ˆ˜์— ๋Œ€ํ•ด ๋‘˜ ์ด์ƒ์˜ ๋ฐ์ดํ„ฐ ์œ ํ˜•์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์„ ์œ ๋‹ˆ์˜จ ํƒ€์ž…์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.
  • Tuple
    • TypeScript์—์„œ๋Š” ๋ฐฐ์—ด ํƒ€์ž…์„ ๋ณด๋‹ค ํŠน์ˆ˜ํ•œ ํ˜•ํƒœ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” tuple ํƒ€์ž…์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. tuple์— ๋ช…์‹œ์ ์œผ๋กœ ์ง€์ •๋œ ํ˜•์‹์— ๋”ฐ๋ผ ์•„์ดํ…œ ์ˆœ์„œ๋ฅผ ์„ค์ •ํ•ด์•ผ ๋˜๊ณ , ์ถ”๊ฐ€๋˜๋Š” ์•„์ดํ…œ ๋˜ํ•œ tuple์— ๋ช…์‹œ๋œ ํƒ€์ž…๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค
  • Enum
    • enum์€ enumerated type(์—ด๊ฑฐํ˜•)์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
    • Enum์€ ๊ฐ’๋“ค์˜ ์ง‘ํ•ฉ์„ ๋ช…๋ช…ํ•˜๊ณ  ์ด๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ๋งŒ๋“ญ๋‹ˆ๋‹ค.
    • ์—ฌ๊ธฐ์„œ๋Š” PrintMedia๋ผ ๋ถˆ๋ฆฌ๋Š” ์ง‘ํ•ฉ์„ ๊ธฐ์–ตํ•˜๊ธฐ ์–ด๋ ค์šด ์ˆซ์ž ๋Œ€์‹  ์นœ์ˆ™ํ•œ ์ด๋ฆ„์œผ๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด enum์„ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์—ด๊ฑฐ๋œ ๊ฐ PrintMedia๋Š” ๋ณ„๋„์˜ ๊ฐ’์ด ์„ค์ •๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ๊ธฐ๋ณธ์ ์œผ๋กœ 0๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.
  • Void
    • Java์™€ ๊ฐ™์€ ์–ธ์–ด์™€ ์œ ์‚ฌํ•˜๊ฒŒ ๋ฐ์ดํ„ฐ๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ void๊ฐ€ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ํ•จ์ˆ˜๊ฐ€ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜์ง€ ์•Š์œผ๋ฉด ๋ฐ˜ํ™˜ ์œ ํ˜•์œผ๋กœ void๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ํƒ€์ž…์ด ์—†๋Š” ์ƒํƒœ์ด๋ฉฐ, any ์™€ ๋ฐ˜๋Œ€์˜ ์˜๋ฏธ๋ฅผ ๊ฐ€์ง‘๋‹ˆ๋‹ค.
    • void ์†Œ๋ฌธ์ž๋กœ ์‚ฌ์šฉํ•ด์ฃผ์…”์•ผํ•˜๋ฉฐ, ์ฃผ๋กœ ํ•จ์ˆ˜์˜ ๋ฆฌํ„ด์ด ์—†์„ ๋•Œ ์‚ฌ์šฉํ•ด์ฃผ์‹œ๋ฉด๋ฉ๋‹ˆ๋‹ค.
  • Never
    • TypeScript๋Š” ์ ˆ๋Œ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์„ ๊ฐ’์„ ๋‚˜ํƒ€๋‚ด๋Š” ์ƒˆ Type never๋ฅผ ๋„์ž…ํ–ˆ์Šต๋‹ˆ๋‹ค.
    • Never ์œ ํ˜•์€ ์–ด๋–ค ์ผ์ด ์ ˆ๋Œ€ ์ผ์–ด๋‚˜์ง€ ์•Š์„ ๊ฒƒ์ด๋ผ๊ณ  ํ™•์‹ ํ•  ๋•Œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ํ•จ์ˆ˜์˜ ๋ฆฌํ„ด ํƒ€์ž…์œผ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ํ•จ์ˆ˜์˜ ๋ฆฌํ„ด ํƒ€์ž…์œผ๋กœ never๊ฐ€ ์‚ฌ์šฉ๋  ๊ฒฝ์šฐ, ํ•ญ์ƒ ์˜ค๋ฅ˜๋ฅผ ๋ฆฌํ„ดํ•˜๊ฑฐ๋‚˜ ๋ฆฌํ„ด ๊ฐ’์„ ์ ˆ๋Œ€๋กœ ๋‚ด๋ณด๋‚ด์ง€ ์•Š์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
    • ์ด๋Š” ๋ฌดํ•œ ๋ฃจํ”„(loop)์— ๋น ์ง€๋Š” ๊ฒƒ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค
  • Void VS Never
    • Void ์œ ํ˜•์€ ๊ฐ’์œผ๋กœ undefind ์ด๋‚˜ null ๊ฐ’์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์œผ๋ฉฐ Never ๋Š” ์–ด๋– ํ•œ ๊ฐ’๋„ ๊ฐ€์งˆ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

type annotation, type inference#

  • type annotation : ๊ฐœ๋ฐœ์ž๊ฐ€ ํƒ€์ž…์„ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ์—๊ฒŒ ์ง์ ‘ ๋งํ•ด์ฃผ๋Š” ๊ฒƒ
  • type inference : ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์•Œ์•„์„œ ํƒ€์ž…์„ ์ถ”๋ก ํ•˜๋Š” ๊ฒƒ

ํƒ€์ž…์„ ์ถ”๋ก ํ•˜์ง€ ๋ชปํ•ด์„œ ํƒ€์ž… annotation์„ ๊ผญ ํ•ด์ค˜์•ผํ•˜๋Š” ๊ฒฝ์šฐ#

  • any ํƒ€์ž…์„ ๋ฆฌํ„ดํ•˜๋Š” ๊ฒฝ์šฐ
    • coordinates์— hoverํ•ด๋ณด๋ฉด const coordinates: any ๋ผ๊ณ  ๋œจ๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. JSON.parse๋Š” json์„ ํŒŒ์‹ฑํ•ด์ค๋‹ˆ๋‹ค. ์ธํ’‹์œผ๋กœ ๋“ค์–ด๊ฐ€๋Š” json์„ ํ™•์ธํ•˜๋ฉด ๋Œ€์ถฉ ์–ด๋–ค ํƒ€์ž…์ด ๋ฆฌํ„ด๋ ์ง€ ๊ฐœ๋ฐœ์ž๋Š” ์˜ˆ์ƒํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋Š” ์—ฌ๊ธฐ๊นŒ์ง€ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ฆฌํ„ด ํƒ€์ž…์ด ์ผ์ •ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ any๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค๊ณ  ์ถ”๋ก ํ•ด๋ฒ„๋ฆฝ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ์ด ๊ฒฝ์šฐ์—๋Š” ํƒ€์ž… ์• ๋…ธํ…Œ์ด์…˜์„ ํ•ด์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ๋ณ€์ˆ˜ ์„ ์–ธ์„ ๋จผ์ €ํ•˜๊ณ  ๋‚˜์ค‘์— ์ดˆ๊ธฐํ™”ํ•˜๋Š” ๊ฒฝ์šฐ
    • ๋ณ€์ˆ˜ ์„ ์–ธ๊ณผ ๋™์‹œ์— ์ดˆ๊ธฐํ™”ํ•˜๋ฉด ํƒ€์ž…์„ ์ถ”๋ก ํ•˜์ง€๋งŒ, ์„ ์–ธ์„ ๋จผ์ €ํ•˜๊ณ  ๋‚˜์ค‘์— ๊ฐ’์„ ์ดˆ๊ธฐํ™”ํ•  ๋•Œ์—๋Š” ์ถ”๋ก ํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค.
  • ๋ณ€์ˆ˜์— ๋Œ€์ž…๋  ๊ฐ’์ด ์ผ์ •์น˜ ๋ชปํ•˜๋Š” ๊ฒฝ์šฐ
    • ์—ฌ๋Ÿฌ ํƒ€์ž…์ด ์ง€์ •๋˜์–ด์•ผ ํ•  ๋•Œ์—๋Š” | (or statement) ๋กœ ์—ฌ๋Ÿฌ ํƒ€์ž…์„ ์• ๋…ธํ…Œ์ด์…˜ ํ•ด์ค๋‹ˆ๋‹ค.

type assertion#

type assetion์ด๋ž€ ?#

  • TypeScript์—์„œ๋Š” ์‹œ์Šคํ…œ์ด ์ถ”๋ก  ๋ฐ ๋ถ„์„ํ•œ ํƒ€์ž… ๋‚ด์šฉ์„ ์šฐ๋ฆฌ๊ฐ€ ์›ํ•˜๋Š” ๋Œ€๋กœ ์–ผ๋งˆ๋“ ์ง€ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋•Œ "ํƒ€์ž… ํ‘œ๋ช…(type assertion)"์ด๋ผ ๋ถˆ๋ฆฌ๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. TypeScript์˜ ํƒ€์ž… ํ‘œ๋ช…์€ ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ์ปดํŒŒ์ผ๋Ÿฌ์—๊ฒŒ ๋‚ด๊ฐ€ ๋„ˆ๋ณด๋‹ค ํƒ€์ž…์— ๋” ์ž˜ ์•Œ๊ณ  ์žˆ๊ณ , ๋‚˜์˜ ์ฃผ์žฅ์— ๋Œ€ํ•ด์˜์‹ฌํ•˜์ง€ ๋ง๋ผ๊ณ  ํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
  • type assertion์„ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ’์˜ type์„ ์„ค์ •ํ•˜๊ณ  ์ปดํŒŒ์ผ๋Ÿฌ์— ์ด๋ฅผ ์œ ์ถ”ํ•˜์ง€ ์•Š๋„๋ก ์ง€์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ํ”„๋กœ๊ทธ๋ž˜๋จธ๋กœ์„œ TypeScript๊ฐ€ ์ž์ฒด์ ์œผ๋กœ ์ถ”๋ก ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ๋ณด๋‹ค ๋ณ€์ˆ˜ ์œ ํ˜•์— ๋Œ€ํ•ด ๋” ์ž˜ ์ดํ•ดํ•˜๊ณ  ์žˆ์„ ๋•Œ์ž…๋‹ˆ๋‹ค.

as Foo , <Foo>#

  • ํƒ€์ž… ํ‘œ๋ช…์€ ์œ„์— ๋‘๊ฐ€์ง€ ๋ฐฉ์‹์œผ๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋ฆฌ์•กํŠธ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ๋Š” <Foo> ํ‚ค์›Œ๋“œ๋Š” JSX์˜ ๋ฌธ๋ฒ•๊ณผ ๊ฒน์น˜๊ธฐ ๋•Œ๋ฌธ์— as Foo๋ฅผ ๊ณตํ†ต์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š”๊ฒŒ ์ถ”์ฒœ๋ฉ๋‹ˆ๋‹ค.

ํฌ์ŠคํŠธ ์ž์„ธํžˆ ๋ณด๊ธฐ ํŽ˜์ด์ง€๋กœ ์ด๋™(file system ๊ธฐ๋ฐ˜์˜ ๋ผ์šฐํŒ…)#

ํŒŒ์ผ๊ธฐ๋ฐ˜ ๋„ค๋น„๊ฒŒ์ด์…˜ ๊ธฐ๋Šฅ#

  • ๋ฆฌ์•กํŠธ์—์„œ๋Š” route๋ฅผ ์œ„ํ•ด์„œ react-router๋ผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์ง€๋งŒ Next.js์—๋Š” ํŽ˜์ด์ง€ ๊ฐœ๋…์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ตฌ์ถ•๋œ ํŒŒ์ผ ์‹œ์Šคํ…œ ๊ธฐ๋ฐ˜ ๋ผ์šฐํ„ฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ํŒŒ์ผ์ด ํŽ˜์ด์ง€ ๋””๋ ‰ํ† ๋ฆฌ์— ์ถ”๊ฐ€๋˜๋ฉด ์ž๋™์œผ๋กœ ๊ฒฝ๋กœ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ํŽ˜์ด์ง€ ๋””๋ ‰ํ† ๋ฆฌ ๋‚ด์˜ ํŒŒ์ผ์€ ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ธ ํŒจํ„ด์„ ์ •์˜ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํŒŒ์ผ ์ƒ์„ฑ ์˜ˆ์‹œ#

  • pages/index.js โ†’ /
  • pages/blog/index.js โ†’ /blog
  • pages/blog/first-post.js โ†’ /blog/first-post
  • pages/dashboard/settings/username.js โ†’ /dashboard/settings/username
  • pages/blog/[slug].js โ†’ /blog/:slug (/blog/hello-world)
  • pages/[username]/settings.js โ†’ /:username/settings (/foo/settings)
  • pages/post/[...all].js โ†’ /post/* (/post/2020/id/title)
Last updated on