๐ React์ Next.js
React๋ก ๊ตฌ์ถํ ์ฑ๊ธ ํ์ด์ง ์ ํ๋ฆฌ์ผ์ด์ (SPA)์ ๊ธฐ๋ณธ์ ์ผ๋ก ํด๋ผ์ด์ธํธ ์ธก์์ ํ๋ฉด์ ๋ ๋๋งํ์ง๋ง,
Next.js๋ฅผ ์ฌ์ฉํ๋ฉด SSR์ ํตํด ์๋ฒ์์ ๋ฏธ๋ฆฌ ๋ ๋๋ HTML์ ํด๋ผ์ด์ธํธ์ ์ ๋ฌํ ์ ์๋ค. ์ด๋ SEO ํฅ์๊ณผ ์ด๊ธฐ ๋ก๋ ์๋ ๊ฐ์ ์ ํฌ๊ฒ ๋์์ ์ฃผ๋ฉฐ, Next.js๋ ๋ผ์ฐํ , ๋ฐ์ดํฐ ํจ์นญ ๋ฑ์ ๊ฐ์ํํ์ฌ ๋ธ๋ก๊ทธ, ์ด์ปค๋จธ์ค ๋ฑ SEO๊ฐ ์ค์ํ ์น์ฑ์ ์ ํฉํ ์๋ฃจ์ ์ ์ ๊ณตํ๋ค.
SEO๋ โSearch Engine Optimizaionโ์ผ๋ก ๊ฒ์ ์์ง ์ต์ ํ ๋ผ๊ณ ํ ์ ์๋ค.
์ด๋, ์น ์ฌ์ดํธ๋ ์นํ์ด์ง๋ฅผ ๊ฒ์ ์์ง์์ ๋ ์ ์ฐพ์ ์ ์๋๋ก ์ต์ ํ ํ๋ ๊ณผ์ ์ ๋งํ๋ค.
๊ฒ์์์ง์์ ๋์ ์์๋ฅผ ์ฐจ์งํ๋ ๊ฒ์ ๋ ๋ง์ ํธ๋ ํฝ์ ์ ๋ํ๊ณ , ๋ธ๋๋ ์ธ์ง๋๋ฅผ ํฅ์์ํค๋๋ฐ ๊ฐ์ฅ ํจ๊ณผ์ ์ธ ๋ฐฉ๋ฒ ์ด๋ค.
Next.js ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ด๋ถ์ ์ผ๋ก Node.js ํ๊ฒฝ์์ ๊ตฌ๋๋์ด SSR์ด๋ API ๋ผ์ฐํธ ๊ฐ์ ๋ฐฑ์๋ ์ฒ๋ฆฌ๋ฅผ ์ํํ๋ค. ์์ปจ๋ Node.js๊ฐ ํ ๋๊ฐ ๋๊ณ ๊ทธ ์์ React์ Next.js๊ฐ ํ๋ก ํธ์๋๋ฅผ ๋ด๋นํ๋ ํํ๋ก ์ํธ ๋ณด์์ ์ธ ๊ด๊ณ์ด๋ค.
Node.js๋ Next.js์ ์๋ฒ ์ฌ์ด๋ ๋ก์ง์ ์คํํ๋ ์์ง ์ญํ ์ ํ์ฌ, ๋ค์ ์ฌ์ฉ์ ์ ์ ์์๋ ์ํํ ๋์์ ๋ท๋ฐ์นจํ๋ค.
์ด๋ฌํ ์กฐํฉ์ผ๋ก ํ๋ก ํธ์๋(React)์ ๋ฐฑ์๋(Node.js)๋ฅผ ๋จ์ผ JavaScript ์ธ์ด๋ก ๋ค๋ฃฐ ์ ์์ผ๋ฉฐ, Next.js๊ฐ ๊ทธ ์ฌ์ด๋ฅผ ๋งค๋๋ฝ๊ฒ ์ด์ด์ฃผ๋ ์ค๊ณ์ด๋ค.
๊ธฐ์ | ์ฅ์ (Pros) | ๋จ์ (Cons) |
---|---|---|
React | โข ์ปดํฌ๋ํธ ๊ธฐ๋ฐ ๊ตฌ์กฐ๋ก ์ฌ์ฌ์ฉ์ฑ๊ณผ ๋ชจ๋์ฑ ์ฐ์ โข Virtual DOM ํ์ฉ์ผ๋ก UI ๋ณ๊ฒฝ ์ ํ์ํ ๋ถ๋ถ๋ง ํจ์จ์ ์ผ๋ก ๋ ๋๋งํ์ฌ ์ฑ๋ฅ ์ต์ ํ โข ๋ฐฉ๋ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ/๋๊ตฌ ์ํ๊ณ (์: Redux ์ํ๊ด๋ฆฌ, React Router ๋ฑ) ๋ฐ ํฐ ์ปค๋ฎค๋ํฐ ์ง์ โข ๋๊ท๋ชจ ๊ธฐ์ ๋ค์ ๊ฒ์ฆ: Facebook, ์ธ์คํ๊ทธ๋จ, Netflix ๋ฑ ๋ค์ํ ๋ํ ์๋น์ค์์ ์ฌ์ฉ |
โข ๋ทฐ(View) ๋ ์ด์ด์ ์ง์ค๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก, ๋ผ์ฐํ
์ด๋ ์ ์ญ ์ํ๊ด๋ฆฌ ๋ฑ์ ์ถ๊ฐ ๋๊ตฌ ํ์ (์์ ํ ํ๋ ์์ํฌ๊ฐ ์๋) โข SEO์ ์ทจ์ฝ (ํด๋ผ์ด์ธํธ ๋ ๋๋ง SPA์ ๊ฒฝ์ฐ) โ SSR์ด ์์ผ๋ฉด ์ด๊ธฐ ๋ก๋ฉ๊ณผ ๊ฒ์์์ง ํฌ๋กค๋ง์ ๋ถ๋ฆฌ โข JSX ๋ฌธ๋ฒ, ์ํ๊ด๋ฆฌ ๊ฐ๋ ๋ฑ ์ต์ํด์ง๊ธฐ๊น์ง ๋ฌ๋ ์ปค๋ธ ์กด์ฌ โข ์๋ก์ด ๊ธฐ๋ฅ ๋์ ์ด ๋น ๋ฅด๊ณ ์ฆ์ ๊พธ์คํ ํ์ต ํ์ (์: Hook ๋์ ๋ฑ ๋ณํ) |
Next.js | โข SSR/SSG ์ง์์ผ๋ก ์ด๊ธฐ ์๋ต ์๋ ํฅ์ ๋ฐ SEO ์ต์ ํ์ ์ ๋ฆฌ(CSR ๋ํ ์ง์) โข ์๋ ์ฝ๋ ๋ถํ ๋ฑ์ผ๋ก ํ์ด์ง๋ณ ๋ก๋ ์ฑ๋ฅ ์ต์ ํ โข ํ์ผ ๊ธฐ๋ฐ ๋ผ์ฐํ , ์ด๋ฏธ์ง ์ต์ ํ, CSS/TS ์ง์ ๋ฑ ๋ค์ํ ๊ธฐ๋ฅ ๋ด์ฅ โ ์ค์ ๋ณด๋ค๋ ๊ฐ๋ฐ ์์ฒด์ ์ง์ค ๊ฐ๋ฅ โข React ์ํ๊ณ๋ฅผ ๊ทธ๋๋ก ํ์ฉํ๋ฉด์๋ ํ์คํ ๊ธฐ๋ฅ(๋ฐฑ์๋ API ๋ผ์ฐํธ ๋ฑ) ์ ๊ณต (ํ๋ก ํธ์ ๋ฐฑ์๋๋ฅผ ํ๋์ ํ๋ก์ ํธ๋ก ๊ด๋ฆฌ) |
โข ๋น๊ต์ ๋ณต์ก๋: ์์ ํ๋ก์ ํธ์๋ ๊ณผํฌ์(overkill) ์ผ ์ ์์ โข SSR์ ์ํด Node.js ๋ฐํ์ ํ๊ฒฝ์ด ํ์ํ์ฌ ๋ฐฐํฌ/ํธ์คํ ์ ์ ์ฝ (์ ์ ์ฌ์ดํธ๋ก Exportํ์ง ์๋ ํ ์๋ฒ ์ธํ๋ผ ํ์) โข ์ํ๊ด๋ฆฌ ๋ด์ฅ X โ ๋ณต์กํ ์ํ๋ Redux ๋ฑ ์ธ๋ถ ๋๊ตฌ ์ถ๊ฐ ํ์ โข SSG ํ์ฉ ์ ๋น๋ ์๊ฐ ์ฆ๊ฐ ๋ฌธ์ (ํ์ด์ง ์๊ฐ ๋งค์ฐ ๋ง์ ๋), SSR/ISR ์บ์ฑ ์ ๋ต ๋ฑ ์ด์ ๋์ด๋๊ฐ ์์ |
Node.js | โข ๋จ์ผ ์ค๋ ๋ ์ด๋ฒคํธ ๋ฃจํ ๊ธฐ๋ฐ์ ๋
ผ๋ธ๋กํน I/O๋ก ๋์์ฑ ์ฒ๋ฆฌ ์ฐ์ โ ํ๋์ ์๋ฒ๋ก ์์ฒ ๊ฐ ์ฐ๊ฒฐ์ ํจ์จ์ ์ผ๋ก ์ฒ๋ฆฌ โข V8 ์์ง JIT ์ปดํ์ผ ๋๋ถ์ ๋น ๋ฅธ JavaScript ์คํ โ Python๋ณด๋ค ์๋๊ฐ ๋น ๋ฅด๊ณ , CPU ๋ฐ์ด๋ ์์ ๋ V8 ์ต์ ํ๋ฅผ ํตํด ์๋น ๋ถ๋ถ ์ปค๋ฒ โข ํ๋ก ํธ์๋ ๊ฐ๋ฐ์๋ JS๋ก ์๋ฒ ๊ฐ๋ฐ ๊ฐ๋ฅ โ ํ๋์ ์ธ์ด๋ก ํ์คํ ๊ตฌํํ์ฌ ์์ฐ์ฑ ํฅ์ โข ๊ฑฐ๋ํ ์ํ๊ณ(NPM): ์๋ฐฑ๋ง ํจํค์ง๋ก ํ์ํ ๊ธฐ๋ฅ์ ๋น ๋ฅด๊ฒ ์ถ๊ฐ ๊ฐ๋ฅ, ์ ์ธ๊ณ์ ์ผ๋ก ํญ๋์ ์ปค๋ฎค๋ํฐ ์ง์ |
โข ์ฑ๊ธ ์ค๋ ๋ ํน์ฑ์ผ๋ก CPU ์ง์ฝ์ ์์
์ ๋ถ์ ํฉ โ ์ฐ์ฐ๋ ๋ง์ ์์
์ ์ด๋ฒคํธ ๋ฃจํ๋ฅผ ๋ธ๋กํนํ ์ ์์ด ๋ถํ ์ฒ๋ฆฌ ํ๊ณ โข ๋น๋๊ธฐ ์ฝ๋ฐฑ/Promise ํจํด ๋ฑ ๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ์ ๋ํ ์ดํด๊ฐ ํ์ํ์ฌ ์ด์ฌ์์๊ฒ ๋๊ด โข ์ํฐํ๋ผ์ด์ฆ ์ฑ์๋: ํ์(2009๋ ) ์ดํ ๋น ๋ฅด๊ฒ ์ฑ์ฅํ์ง๋ง, Java/Python ๋ฑ์ ๋นํด ์ญ์ฌ ์งง์ ์ผ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์์ ์ฑ์ด๋ ์ฑ๋ฅ ์ต์ ํ๋ ๊ฐ์ ์ฌ์ง โข ์ ์ ํ์ ๋ถ์ฌ๋ก ๋๊ท๋ชจ ํ๋ก์ ํธ์์ ํ์ ๊ด๋ จ ๋ฒ๊ทธ ๊ฐ๋ฅ์ฑ (โ TypeScript ๋์ ์ผ๋ก ๋ณด์ ์ถ์ธ) |
์์์ ๋ฐ๋ณต์ ์ผ๋ก ๊ธฐ์ ํ SSR, SSG ๊ทธ๋ฆฌ๊ณ CDR์ด๋ ๋ฌด์์ผ๊น?
๋์๋ฐฉ์
โ ๋ธ๋ผ์ฐ์ ๋ DB์ ์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์, ์นํ์ด์ง์ ๋๋๋ง ํด์ผํ๋ค. API์์ฒญ์ ์ด์ฉํ๋ค.
์ฅ์
๋จ์
SSR์ ์์ฒญํ ๋ ์๋ฒ์์ ๋งค ๋ฒ HTMLํ์ผ์ ๋ง๋ค๊ธฐ ๋๋ฌธ์ ๋ฐ์ดํฐ๊ฐ ์์๋ก ๋ฌ๋ผ์ ธ์,
๋ฏธ๋ฆฌ ๋ง๋ค์ด๋๊ธฐ ์ด๋ ค์ด ํ์ด์ง์ ์ ํฉํ๋ค.
๋์๋ฐฉ์
โ ์๋ฒ๋ DB๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฌ์จํ ๋ค์ ์นํ์ด์ง๋ฅผ ์์ ํ ๋๋๋ง ๋ ํ์ด์ง๋ก ๋ณํ ํ์ ๋ธ๋ผ์ฐ์ ์ ๋๊ธด๋ค.
์ฅ์
๋จ์
โ ์ ๋ฐ์ดํธ๊ฐ ์์ฃผ ํ์์๋ ์ ์ ์ธ ์ฌ์ดํธ๋ฅผ ๊ตฌ์ถํ ๋ ์ข์ ํจ์จ์ ๋ธ๋ค. (SSR๋ณด๋ค ํจ์ฌ ๋์ ํจ์จ)
ํ์ง๋ง, ์ ์ ์ฌ์ดํธ๋ ์ฌ ๋น๋๊ฐ ํ์ํ ์ ์๋ค. ์ด๋ ์ฌ์ฉํ๋ ๊ฒ์ด ISR์ด๋ค.
์ฅ์
๋จ์
์ฅ์
๋จ์
Node.js/React
์คํ์ ์ค์๊ฐ ์ฑ๋ฅ๊ณผ ๊ฐ๋ฐ ๋ฏผ์ฒฉ์ฑ์์, ์ ํต ์คํ์ ์ปดํจํ
์ฑ๋ฅ๊ณผ ๊ธฐ์กด ์ธํ๋ผ ํ์ฉ ๋ฉด์์ ๊ฐ์ ์ ๋ณด์ด๋ ๊ฒฝํฅ์ด ์๋ค.