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์์๋ ์๋ฒ ์ฌ์ด๋ ๋ ๋๋ง์ ์ด์ฉํ๋ฏ๋ก ์ฌ์ฉ์์ ๊ฒ์ ์์ง ํฌ๋กค๋ฌ์๊ฒ ๋ฐ๋ก ๋ ๋๋ง๋ ํ์ด์ง๋ฅผ ์ ๋ฌ ํ ์ ์์ด์ ๊ฒ์์์ง ์ต์ ํ์ ์ข์ ์ํฅ์ ์ค๋๋ค.
#
์ค์น ๋ฐฉ๋ฒ#
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
)
- Static Generation์ผ๋ก ๋ฐ์ดํฐ์ ๊ธฐ๋ฐํ์ฌ pre-render์ ํน์ ํ ๋์ ๋ผ์ฐํ
๊ตฌํ(
- 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 TypesName | Description |
---|---|
string | ๋ฌธ์์ด์ ๋ํ๋ ๋๋ค. |
number | ์ซ์ ๊ฐ์ ๋ํ๋ ๋๋ค. |
boolean | true ์ false ๊ฐ์ ๊ฐ์ง๊ณ ์์ต๋๋ค. |
null | ํ๋์ ๊ฐ์ ๊ฐ์ง๋๋ค: null |
undefined | ํ๋์ ๊ฐ์ ๊ฐ์ง๋๋ค, ์ด๊ธฐํ๋์ง ์์ ๋ณ์์ ๊ธฐ๋ณธ๊ฐ์ ๋๋ค. |
symbol | ๊ณ ์ ํ ์์ ๊ฐ์ ๋ํ๋ ๋๋ค. |
#
Object TypesName | Description |
---|---|
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 inferencetype 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)