๐Next.js ๋ ?
React๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๊ณ , Next.js๋ ๋ฆฌ์กํธ์ ํ๋ ์์ํฌ์ด๋ค.
๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํ๋ ์์ํฌ์ ์ฃผ์ ์ฐจ์ด์ ์ "Inversion of Control"(ํต์ ์ ์ญ์ )์ด๋ค.
๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ๋ฉ์๋๋ฅผ ํธ์ถํ๋ฉด ์ฌ์ฉ์๊ฐ ์ ์ดํ ์ ์๋ค.
๊ทธ๋ฌ๋ ํ๋ ์์ํฌ์์๋ ์ ์ด๊ฐ ์ญ์ ๋์ด ํ๋ ์์ํฌ๊ฐ ์ฌ์ฉ์๋ฅผ ํธ์ถํ๋ค.
๋ผ์ด๋ธ๋ฌ๋ฆฌ - ์ฌ์ฉ์๊ฐ ํ์ผ ์ด๋ฆ์ด๋ ๊ตฌ์กฐ ๋ฑ์ ์ ํ๊ณ , ๋ชจ๋ ๊ฒฐ์ ์ ๋ด๋ฆผ - react
ํ๋ ์์ํฌ - ํ์ผ ์ด๋ฆ์ด๋ ๊ตฌ์กฐ ๋ฑ์ ์ ํด์ง ๊ท์น์ ๋ฐ๋ผ ๋ง๋ค๊ณ ๋ฐ๋ฆ - next.js
๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ “์ดํ๋ฆฌ์ผ์ด์ ์ ๋ง๋ค ๋ ํ์ํ ์์(๊ธฐ๋ฅ: ํจ์)์ ๋ชจ์”์ด๊ณ , ํ๋ ์์ํฌ๋ “์ฝ๋๋ฅผ ์์ฑํ๋ ๊ธฐ๋ณธ์ ์ธ ํ์ ์ ๊ณตํด์ ๋ณด๋ค ํจ์จ์ ์ผ๋ก ์ดํ๋ฆฌ์ผ์ด์ ์ ๋ง๋ค ์ ์๋๋ก ํ๋ ์ํํธ์จ์ด ํ๊ฒฝ”์ด๋ค. ์ฆ, React์์ ์ฐ๋ฆฌ๊ฐ ๋ชจ๋ ๊ฒ์ ์ง์ ์์ฑํ๊ณ ์ค์ ํด ์ฃผ์๋ ๊ฒ๋ค์ด Next์์๋ ์ด๋ฏธ ๋ง๋ค์ด์ ธ ์๋ค.
ํนํ, SEO๋ฅผ ์ํ SSR๋ฅผ ๊ฐ๋ฅํ๊ฒ ํด์ฃผ๋ ํ๋ ์์ํฌ์ด๋ค.
โป SEO(๊ฒ์ ์์ง ์ต์ ํ, Search Engine Optimization)๋ ์น์ฌ์ดํธ์ ๊ฒ์ ์์ง ๊ฒฐ๊ณผ ํ์ด์ง(SERP)์์ ๋์ ์์๋ฅผ ์ฐจ์งํ๋๋ก ์น์ฌ์ดํธ๋ฅผ ์ต์ ํํ๋ ํ๋ก์ธ์ค์ด๋ค.
๋ฆฌ์กํธ๋ ๋ํ์ ์ธ CSR(client side rendering)์ ๋๋ค. ์ด๋ฌํ ๋ฆฌ์กํธ์ CSR์ ์ธ ๋ถ๋ถ์์ SSR ์ ์ผ๋ก ๋ฐ๊ฟ ์ฃผ๊ธฐ ์ํด์ next.js์ ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
CSR vs SSR vs SSG
CSR(Client Side Rendring) : ํ๋ฉด์ ํด๋ผ์ด์ธํธ๋จ์์ ๋ฐ๊พธ๋ ๊ธฐ๋ฒ
SSR(Server Side Rendring) : ํ๋ฉด์ ์๋ฒ๋จ์์ ์ ์กํด์ฃผ๋ ๊ธฐ๋ฒ
SSG(Server Side Generation) : ํ๋ฉด์ ์๋ฒ์์ ๋ฏธ๋ฆฌ ๋ง๋ค์ด ์ ์กํด์ฃผ๋ ๊ธฐ๋ฒ
SSR์ ์์ธํ ์ค๋ช
Server Side Rendering, ์ฆ ์๋ฒ์์ ๋ฏธ๋ฆฌ ํ์ด์ง๋ฅผ ๋ง๋ค์ด (pre-render) ์ฑ์์ง HTML์ ๋ค์ด๋ฐ๋๋ค. ๋ฐ๋ผ์, SSR๋ฅผ ์ฌ์ฉํ๋ฉด ์ฌ์ดํธ์ ์ ์ํ ๋ ๋ฏธ๋ฆฌ ๋ ๋๋ง ๋ html์ ๋ถ๋ฌ์ค๊ฒ ๋๋ค. ํ์ํ JS ํ์ผ์ ๋ถ๋ฌ์ฌ ๋๊น์ง(=hydrate) ๋ฐ์์ ํ์ง ์์ง๋ง, ๋น ๋ฅด๊ฒ ํ๋ฉด์ ๋ณด์ผ ์ ์๊ธฐ์ ์๋๊ฐ ๋นจ๋ผ ๋ณด์ด๊ฒ ๋๋ค.
์๋ฒ์ชฝ์์ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์คํํ๊ณ ๋ธ๋ผ์ฐ์ ์ชฝ์์๋ ์์ฑ๋ html ๋ฅผ ์ ์กํ๋ค. ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ๋์ํ ์ ์๋ ํ๊ฒฝ์์๋ ์ ๋์ํ๋ค.
๐๊ฒ์ ์์ง ์ต์ ํ (SEO)์์ ๊ด๊ณ
- CSR: ์ด๊ธฐ์๋ ๊ฒ์ ์์ง์ด ํ์ด์ง์ ์ฝํ ์ธ ๋ฅผ ์ธ์ํ์ง ๋ชปํ ์ ์์ด SEO์ ๋ถ๋ฆฌํ์ง๋ง, Google๊ณผ ๊ฐ์ ๊ฒ์ ์์ง์ JavaScript๋ฅผ ์คํํ์ฌ ๋์ ์ผ๋ก ํ์ด์ง๋ฅผ ๋ ๋๋งํ๊ณ ํฌ๋กค๋งํ ์ ์๋ ๊ธฐ๋ฅ์ ๊ฐ์ถ๊ณ ์๋ค. ๊ทธ๋๋ ์ด๊ธฐ ๋ก๋ฉ ์๋๊ฐ ๋๋ฆด ์ ์๋ค
- SSR: ์ด๊ธฐ์ ๊ฒ์ ์์ง์ด ํ์ด์ง์ ์ฝํ ์ธ ๋ฅผ ์ฝ๊ฒ ํฌ๋กค๋งํ ์ ์์ด SEO์ ์ ๋ฆฌํ๋ค. ์ด๊ธฐ ๋ก๋ฉ ์๋๋ ๋น ๋ฅด์ง๋ง, ์๋ฒ ๋ถํ๊ฐ ๋์์ง ์ ์๋ค.
๐Next.js์ ์ฅ์
1) ์ฌ์ ๋ ๋๋ง ๋ฐ ์๋ฒ์ฌ์ด๋ ๋ ๋๋ง
- Pre-rendering(์ฌ์ ๋ ๋๋ง): ๊ฐ ํ์ด์ง๋ค์ ์ฌ์ ์ ๋ฏธ๋ฆฌ HTML ๋ฌธ์๋ก ์์ฑํด์ ๊ฐ์ง๊ณ ์๋ ๊ฒ. Next์ pre-rendering ์์คํ ์์๋ ๋น๋ ํ์ ๋ ํด๋นํ๋ ํ์ด์ง ๋ณ๋ก ๊ฐ๊ฐ์ HTML ๋ฌธ์๋ฅผ ๋ฏธ๋ฆฌ ์์ฑํด ๊ฐ์ง๊ณ ์๋ค๊ฐ, ์๋ฒ๋ก ์์ฒญ์ด ๋ค์ด์ฌ ๋ ์๋ง์ ํ์ด์ง๋ฅผ ๋ฐํ ํด์ค๋ค.
2) Hot Code Reloading์ ์ง์
- Next ๊ฐ๋ฐ ํ๊ฒฝ์์๋ ์ฝ๋ ๋ณ๊ฒฝ ์ฌํญ์ด ์ ์ฅ๋๋ฉด ์์ฉ ํ๋ก๊ทธ๋จ์ ์๋์ผ๋ก ๋ค์ ๋ก๋ํ๋ค.
3) ์๋ ์ฝ๋ ๋ถํ
- ์๋ ์ฝ๋ ๋ถํ ๊ธฐ๋ฅ ๋๋ถ์ ์ฝ๋์ ๋ชจ๋ ๊ฐ์ ธ์ค๊ธฐ๊ฐ ๋ฒ๋ค๋ก ๋ฌถ์ฌ ๊ฐ ํ์ด์ง์ ํจ๊ป ์ ๊ณต๋๋ค.
- ๊ฒฐ๊ณผ์ ์ผ๋ก, ๋ถํ์ํ ์ฝ๋๊ฐ ํ์ด์ง์ ๋ก๋ ๋์ง ์๋๋ค.
4) ์ถ๊ฐ ์ค์ ์ด ํ์ ์์
- Next.js๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์นํฉ๊ณผ ๋ฐ๋ฒจ์ ์ฌ์ฉํ๊ณ ์๋ค. ๋ฐ๋ผ์ ์ด๋ฏธ ์๋ฒ ์ฌ์ด๋ ๋ ๋๋ง ๋ฐ ๊ฐ๋ฐ์ ํ์ํ ์ค์ ์ด ๋์ด ์์ผ๋ฏ๋ก ๋น ๋ฅด๊ฒ ๊ฐ๋ฐ์ ์์ํ ์ ์๋ค.
- ์ฌ์ฉํ๊ณ ์ถ์ ํ๋ฌ๊ทธ์ธ์ด ์๋ค๋ฉด ์์ฝ๊ฒ ์ถ๊ฐํ์ฌ ์ฌ์ฉํ ์ ์๋๋ก ์ง์์ ํ๊ณ ์๋ค.
5) ํ์ ์คํฌ๋ฆฝํธ๊ฐ ๋ด์ฅ๋จ
- Next๋ฅผ ํ์ ์คํฌ๋ฆฝํธ์ ํจ๊ป ์ฌ์ฉํ ๋ ํ์ ์ง์์ ํตํด ํธ๋ฆฌํจ๊ณผ ์์ ์ฑ์ ์ป์ ์ ์๋ค.
- Next๋ ํ์ ์คํฌ๋ฆฝํธ ์ค์ ์ ๋ฐ๋ก ํ ํ์ ์์ด ์ฌ์ฉํ ์ ์์ผ๋ฉฐ ํ์ ์คํฌ๋ฆฝํธ๋ฅผ ์ง์ํ๊ณ ์๋ค.
6) ํ์ผ๊ธฐ๋ฐ ๋ด๋น๊ฒ์ด์ ๊ธฐ๋ฅ
- ๋ฆฌ์กํธ์์๋ ๋ผ์ฐํธ๋ฅผ ์ํด์ react-dom-router ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ๋ผ์ฐํ ์ค์ ์ ํด์ฃผ์ด์ผ ํ๋ค. ๊ทธ๋ก ์ธํด ํ์ด์ง์ ๊ฒฝ๋ก์ ๋ํ์ฌ ์ง์ ์ค์ ์ ํด์ค์ผ ํ๋ค.
- ํ์ง๋ง Next.js ํ์ผ ์์คํ ๊ธฐ๋ฐ ๋ผ์ฐํ ์ ์ฌ์ฉํ๋ค.
- ํด๋์ ๊ฒฝ๋ก์ ๋ฐ๋ผ ํ์ด์ง์ ๊ฒฝ๋ก๊ฐ ์ค์ ๋์ด ๊ตฌ์ถ์ด ๋น ๋ฅด๊ณ ๊ด๋ฆฌ๊ฐ ํธ๋ฆฌํ๋ค๋ ์ฅ์ ์ด ์๋ค.
- (์ฐธ๊ณ ๋ก, next.js๋ next/link์ <Link /> ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํด์ ํด๋ผ์ด์ธํธ ์ฌ์ด๋ ๋ค์ด๊ฒ์ด์ ์ ์ฌ์ฉํด์ผํจ)
๐Next.js์ ๋จ์
1) ํ๋ ์์ํฌ์ ๊ณต๊ฐ๋น๋๋ ํ์ผ๋ค์ ํด๋๊ฐ .next๋ผ์ next.js ์ฌ์ฉ ํ๋ก์ ํธ์ธ๊ฒ ์ ๋๋ฌ๋๋ค.
2) ์๋ SSR์ ๋จ์ ์ผ๋ก ์๋ฒ๊ฐ ๋๋ฆฌ๋ฉด ์น์ฌ์ดํธ๊ฐ ๊ธฐํ๊ธ์์ ์ผ๋ก ๋๋ ค์ง๋ค.
3) ์๋ฒ๋ถํ๊ฐ CSR์ ๋นํด ๋ง์ ํธ์ด๋ค.
4) ํ์ด์ง ์ด๋ํ ๋๋ง๋ค ์๋ก์ด html ํ์ผ์ ๋ถ๋ฌ์ฌ ๋ ํ๋ฉด์ด ๊น๋ฐ๊ฑฐ๋ฆฐ๋ค.
'Frontend > Next.js' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Next.js - ๊ฐ๋ก ์คํฌ๋กค ๋ฐ ๊ตฌํ (0) | 2023.12.19 |
---|---|
Next.js - modal ์ฐฝ ๋ง๋ค๊ธฐ (0) | 2023.12.19 |
Next.js 14๋ฒ์ - favicon ๋ฐ๊พธ๊ธฐ (1) | 2023.11.10 |
Nextjs - next.js ๊ตฌ์กฐ์ img ๋ฃ๋ ๋ฒ (0) | 2023.11.06 |
Next.js 14๋ฒ์ - Routing , Rendering, use client (0) | 2023.11.02 |