โ๏ธ ์์ํ๊ธฐ ์ ์
React์ ์๋ ๋ฐฉ์
react build -> ํ๋์ JSํ์ผ ์์ฑ -> bundle.js๊ฐ cilent๋จ์์ DOM์ ๊ทธ๋ฆผ
์ด๋ฌํ ๋ฐฉ์์ ๋จ์ ์ CSR์ ๋จ์ ์ด๋ผ๊ณ ๋ ํ ์ ์๋๋ฐ
1. bundle.js ํ์ผ์ ์ฌ์ด์ฆ๊ฐ ๊ณผ๋ํ๊ฒ ์ปค์ง ์ ์๋ค.
2. ์ฌ์ฉ์๊ฐ ํ๋ฉด์ ๋ณด๊ธฐ๊น์ง ์ง์ฐ์๊ฐ์ด ๊ธธ์ด์ง๋ค.
3. SEO(Search Engine Optimization) ๊ฒ์์์ง์ ๋ถ๋ฆฌํ๋ค.
ํนํ React๋ ๋ํ์ ์ธ CSR(Client Side Rendefing)๋ฐฉ์์ผ๋ก ๋ ๋๋งํ์ฌ, ์ด๊ธฐ html์ด ๋น์ด์๊ธฐ ๋๋ฌธ์ SEO์ ์ข์ง ์๋ค.
์ ์ํฉ๋ค์ ๊ฐํธํ๊ฒ ๊ด๋ฆฌํ๊ธฐ ์ํด์ Next.js ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
๐ค ์ฌ๊ธฐ์ ์ ๊น ์ฉ์ด ์ ๋ฆฌ๋ฅผ ํ๊ณ ๋์ด๊ฐ์๋ฉด,
SEO
์๋ฒ์ ์๋ ์น์ฌ์ดํธ์ html ํ์ผ๋ค์ ๋ถ์ํด ๋น ๋ฅด๊ฒ ๊ฒ์๋์ด ์ง๊ฒ ๋ง๋๋๊ฒ
SSR
์๋ฒ์์ html ํ์ผ์ ๋ง๋ค์ด ๋์ ์ผ๋ก ์ ์ดํ ์ ์๋ ํ์ผ๊ณผ ํจ๊ป ํด๋ผ์ด์ธํธ๋ก ์ ์กํ๋ ๋ ๋๋ง ๋ฐฉ์
์ฒซ ํ๋ฉด ๋ก๋ฉ์ด ๋น ๋ฅด๊ณ ํจ์จ์ ์ธ SEO๊ฐ ๊ฐ๋ฅํ๋ค๋ ์ฅ์ ์ด ์๋ค.
์ฌ์ฉ์๊ฐ ํด๋ฆญ ์ ์ ์ฒด์ ์ธ ์น์ฌ์ดํธ๋ฅผ ์๋ฒ์์ ๋ค์ ๋ฐ์์์ผ ํ๊ธฐ ๋๋ฌธ์ ๊น๋ฐ์ ํ์์ด ์๊ณ ์๋ฒ์ ๊ณผ๋ถํ๊ฐ ๊ฑธ๋ฆด ์ ์๋ ๋จ์ ์ด ์๋ค.
CSR
๋ธ๋ผ์ฐ์ ์์ JS๋ฅผ ํ์ฉํด ๋ ๋๋ง ํ๋ ๋ฐฉ์
์ฌ์ฉ์ ๋ฐ์์ ๋ฐ๋ผ ํ์ํ ๋ถ๋ถ๋ง ๋ถ๋ถ์ ์ผ๋ก ์๋ฒ์ ์์ฒญํด ๋ ๋๋งํ๊ธฐ ๋๋ฌธ์ ๋น ๋ฅธ ์ธํฐ๋ ์ ์ด ๊ฐ๋ฅํ ์ฅ์ ์ด ์๋ค.
์ฒซ ํ๋ฉด ๋ก๋ฉ์ด ๋๋ฆฌ๊ณ SEO๊ฐ ์ด๋ ต๋ค๋ ๋จ์ ์ด ์๋ค.
์ฐธ๊ณ : https://www.youtube.com/watch?v=iZ9csAfU5Os
Next.js
๋ฆฌ์กํธ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ์ฌ SPA์ ๋น ๋ฅด๊ณ ๊ฐํธํ๊ฒ ๋น๋ ํ ์ ์๋ Reactํ๋ ์์ํฌ
React๋ก ์น ์ดํ๋ฆฌ์ผ์ด์ ์ ๋ง๋ค ๋ ์๋์ ๊ฐ์ ์ฌํญ๋ค์ ๊ณ ๋ คํด์ผ ํ๋ค.
- webpack, babel๊ณผ ๊ฐ์ ๋ฒ๋ค๋ฌ์ ๋ณํ
- ๋ ๋๋ง ์ต์ ํ
- SEO ๊ณ ๋ ค
Next.js ๊ฐ ์ง์ํ๋ ๊ธฐ๋ฅ
- ํ์ด์ง ๊ธฐ๋ฐ์ ๋ผ์ฐํ ์์คํ
- SSR ์ด ํ์ด์ง ๋จ์๋ก ์ง์
- ์ต์ ํ ์ํ ํด๋ผ์ด์ธํธ ์ธก ๋ผ์ฐํ
- CSS in JS ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ง์
โจ ์ฒซ๋ ๋๋ง์ SSR์ ํ๊ณ ๊ทธ ๋ค์ ๋ผ์ฐํ ์ฒ๋ฆฌ๋ CSR๋ฐฉ์์ ์ฌ์ฉ
์ฒซ ๋ ๋๋ง ์์ ๋ก๋ฉ์๊ฐ์ ์ค์ด๊ณ ์ดํ ๋ ๋๋ง ์์๋ CSR์ ํตํด ํ๋ฉด์ ๊น๋นก์์ ์์จ ์ ์๋ค.
Next.js ๋ก ํ๋ก์ ํธ ์์ํ๊ธฐ
์ค์น
yarn create next-app ํ๋ก์ ํธ์ด๋ฆ --typescript
package.json
scirpts ์๋์ผ๋ก ๋ช ๋ น์ด๊ฐ ์์ฑ๋๋๋ฐ
next dev : ๊ฐ๋ฐ ์๋ฒ๋ก ์คํ
next build: ๋น๋ ๋์
next start: ๋น๋ํ ํ๋ก์ ํธ ์คํ
Next.js ์ค์น ์ ํ์ผ๊ตฌ์กฐ
_app.tsx
CRA์์ App.jsx๋ผ๊ณ ๋ณด๋ฉด ๋๋ ์ต์๋จ ๋ ๋ฒจ๋ก
๋ชจ๋ component๋ฅผ ๋์๋ค๋ ๋์ state๋ฅผ ๋ณด์กดํ๊ธฐ ๋๋ฌธ์ ๋ณ๊ฒฝ ์ ์๋ฒ๋ฅผ ์ฌ์์ ํด์ผ ํ๋ค.
Next.js์ pages
Next.js์์๋ pages๋ด๋ถ์ ์๋ ๋๋ ํ ๋ฆฌ๊ฐ exportํ๋ React Component๋ค์ด ํ์ด์ง ์์๊ฐ ๋๋ค .
์์๋ก
pages / posts/ first-page.tsx ๋ฅผ ๋ง๋ค์ด ๋ค์๊ณผ ๊ฐ์ด component๋ฅผ ๋ง๋ค๋ฉด
export default function FirstPost(): JSX.Element {
return <h1>First Post</h1>;
}
์๋์๊ฐ์ด ํ/ ํด๋/ ํ์ผ ์ url ํ์ด์ง๊ฐ ๋ง๋ค์ด์ง๋ค.
http://localhost:3000/posts/first-post
Next.js๋ ํจ์จ์ ์ธ SSR์ ์ํด์ ๊ธฐ์กด์ html tag๋ค์ component๋ก ๋ง๋ค์ด ๋์๋๋ฐ ๊ทธ์ค ํ๋๋ฅผ ์ค๋ช ํด ๋ณด์๋ฉด
Next.js์ Link next / link
๊ธฐ์กด : <a> link
Next.js: next/ link
Next.js์ <Link> ๋ ๊ธฐ์กด html ์ <a>์ฒ๋ผ ์ธ ์ ์๋ค.
Link component๋ ๋ ํ์ด์ง ๊ฐ ์ด๋์ Client side navigation ์ผ๋ก ํ๋ค.
์ฆ ๋ธ๋ผ์ฐ์ ๋ ์ ์ฒด ํ์ด์ง๋ฅผ ๋ก๋ํ์ง ์๋๋ค๋ ๋ง
Next.js์ ์ฝ๋ ๋ถํ
Next.js๋ ์๋์ ์ผ๋ก ์ฝ๋๋ฅผ ๋ถํ ํ๋๋ฐ,
ํํ์ด์ง ๋ก๋์ ์์ฒญํ ํ์ด์ง๋ง ๋ ๋๋ง ๋๊ณ ๋ค๋ฅธ ํ์ด์ง์ ์ฝ๋๋ ์ฒ์์ ์ ๊ณตํจ์ผ๋ก์จ ํํ์ด์ง๋ฅผ ๋น ๋ฅด๊ฒ ๋ ๋๋งํ๋ค.
์์ฒญํ ํ์ด์ง์ ์ฝ๋๋ฅผ ๋ก๋ํ๋ฉฐ ๊ฒฉ๋ฆฌ์ํค๊ธฐ ๋๋ฌธ์ ํน์ ํ์ด์ง์์ ๋ ์ค๋ฅ๋ ํด๋น ํ์ด์ง์์๋ง ๋ฌธ์ ๋ฅผ ๋ฐ์์ํจ๋ค.
build ๋ Next.js ํ๋ก์ ํธ์์๋ ๋ธ๋ผ์ฐ์ ์ Link coponent๊ฐ ๋ฑ์ฅํ ๋๋ง๋ค Next.js๋ background์์ ๋ฏธ๋ฆฌ ํ์ด์ง๋ฅผ ์ฐ๊ฒฐํด๋ ๋ง๋ก๋ฉํด๋๊ธฐ ๋๋ฌธ์ ํฌ ํด๋ฆญ ์์ ํด๋น ํ์ด์ง๋ฅผ ๋น ๋ฅด๊ฒ ์ฐ๊ฒฐ์ํฌ ์ ์๋ค.
Next.js์์์ CSS
Next.js์์๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๊ณต๋๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ด ์๋ค.
CSS Modules, Sass , styled-jsx
Next.js์์ CSS๋ชจ๋์ ์ฌ์ฉํ๋ฉด ์๋์ผ๋ก ๊ณ ์ ์ className์ ๋ง๋ค์ด์ฃผ๊ณ , ์ฝ๋๋ถํ ์ ํตํด ๊ฐํ์ด์ง์์ ์ต์ํ์ CSS๋ก๋ฉ์ ํ ์ ์๊ฒ ํ๋ค.
'๐TypeScript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[TypeScript] ํ์ ์คํฌ๋ฆฝํธ๋? ๊ธฐ๋ณธ ๊ณต๋ถํ๊ธฐ (0) | 2021.05.30 |
---|
๋๊ธ