1. SPA๋ โญ๏ธ
- SPA
- Single Page Application์ ์ฝ์ด๋ก, ํ ๊ฐ์ ํ์ด์ง๋ก ์ด๋ฃจ์ด์ง ์ ํ๋ฆฌ์ผ์ด์
์ด๋ผ๋ ์๋ฏธ
- Single Page Application์ ์ฝ์ด๋ก, ํ ๊ฐ์ ํ์ด์ง๋ก ์ด๋ฃจ์ด์ง ์ ํ๋ฆฌ์ผ์ด์
์ด๋ผ๋ ์๋ฏธ
- ์ ํต์ ์ธ ์น ํ์ด์ง๋ ์ฌ๋ฌ ํ์ด์ง๋ก ๊ตฌ์ฑ๋์ด ์๋๋ฐ, ์ฌ์ฉ์๊ฐ ๋ค๋ฅธ ํ์ด์ง๋ก ์ด๋ํ ๋๋ง๋ค ์๋ก์ด html์ ๋ฐ์ ์ค๊ณ , ํ์ด์ง๋ฅผ ๋ก๋ฉํ ๋๋ง๋ค ์๋ฒ์์ ๋ฆฌ์์ค๋ฅผ ์ ๋ฌ๋ฐ์ ํด์ํ ๋ค ํ๋ฉด์ ๋ณด์ฌ์ค
- ์ฌ์ฉ์์๊ฒ ๋ณด์ด๋ ํ๋ฉด์ ์๋ฒ ์ธก์์ ์ค๋นํ๋จ ๋ง์! ์ฌ์ ์ html ํ์ผ์ ๋ง๋ค์ด์ ์ ๊ณตํ๊ฑฐ๋, ๋ฐ์ดํฐ์ ๋ฐ๋ผ ์ ๋์ ์ธ html์ ์์ฑํด์ฃผ๋ ํ
ํ๋ฆฟ ์์ง์ ์ฌ์ฉํ๊ธฐ๋ ํ์
- ํ์ง๋ง!! ์์ฆ์ ์น์์ ์ ๊ณต๋๋ ์ ๋ณด๊ฐ ๋๋ฌด ๋ง๊ธฐ ๋๋ฌธ์ ์๋ก์ด ํ๋ฉด์ ๋ณด์ฌ ์ฃผ์ด์ผ ํ ๋๋ง๋ค ์๋ฒ ์ธก์์ ๋ชจ๋ ๋ทฐ๋ฅผ ์ค๋นํ๋ฉด ์ฑ๋ฅ์ด ์์ฒญ ๋จ์ด์ง ์ ์์(ํธ๋ํฝ์ด ๋๋ฌด ๋ง์ด ๋์จ๋ค๊ฑฐ๋, ์ฌ์ฉ์๊ฐ ๋ชฐ๋ ค์ ์๋ฒ์ ๋์ ๋ถํ๊ฐ ์ฝ๊ฒ ๊ฑธ๋ฆฐ๋ค๊ฑฐ๋)
- ๊ทธ๋์ ๋ฆฌ์กํธ ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํน์ ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํด ๋ทฐ(view)๋ ๋๋ง์ ์ฌ์ฉ์์ ๋ธ๋ผ์ฐ์ ๊ฐ ๋ด๋นํ๋๋ก ํ๊ณ ,
- ์ฐ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ธ๋ผ์ฐ์ ์ ๋ถ๋ฌ์์ ์คํ์ํจ ํ์ ์ฌ์ฉ์์์ ์ธํฐ๋ ์ ์ด ๋ฐ์ํ๋ฉด ํ์ํ ๋ถ๋ถ๋ง ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ์ฌ ์ ๋ฐ์ดํธํด์ค
- ๋ง์ฝ ์๋ก์ด ๋ฐ์ดํฐ๊ฐ ํ์ํ๋ค๋ฉด ์๋ฒ API๋ฅผ ํธ์ถํด ํ์ํ ๋ฐ์ดํฐ๋ง ์๋ก ๋ถ๋ฌ์์ ์ ํ๋ฆฌ์ผ์ด์
์์ ์ฌ์ฉํ ์๋ ์์
- ์ฑ๊ธ ํ์ด์ง๋ผ๊ณ ํด์ ํ๋ฉด์ด ํ ์ข
๋ฅ์ธ ๊ฒ์ ์๋
- SPA์ ๊ฒฝ์ฐ ์๋ฒ์์ ์ฌ์ฉ์์๊ฒ ์ ๊ณตํ๋ ํ์ด์ง๋ ํ ์ข ๋ฅ์ด์ง๋ง, ํด๋น ํ์ด์ง์์ ๋ก๋ฉ๋ ์๋ฐ์คํฌ๋ฆฝํธ์ ํ์ฌ ์ฌ์ฉ์ ๋ธ๋ผ์ฐ์ ์ ์ฃผ์ ์ํ์ ๋ฐ๋ผ ๋ค์ํ ํ๋ฉด์ ๋ณด์ฌ ์ค ์ ์์
- ๋ค๋ฅธ ์ฃผ์์ ๋ค๋ฅธ ํ๋ฉด์ ๋ณด์ฌ ์ฃผ๋ ๊ฒ์ ๋ผ์ฐํ ์ด๋ผ๊ณ ํจ
- ๋ฆฌ์กํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์ฒด์ ์ด ๊ธฐ๋ฅ์ด ๋ด์ฅ๋์ด ์์ง ์๊ธฐ ๋๋ฌธ์, ๋ธ๋ผ์ฐ์ ์ API๋ฅผ ์ง์ ์ฌ์ฉํ์ฌ ์ด๋ฅผ ๊ด๋ฆฌํ๊ฑฐ๋, ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํด ์ด ์์
์ ์ฝ๊ฒ ๊ตฌํํ ์ ์์
- ๋ฆฌ์กํธ ๋ผ์ฐํ
๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋ฆฌ์กํธ ๋ผ์ฐํฐ(react-router), ๋ฆฌ์น ๋ผ์ฐํฐ(reach-router), Next.js ๋ฑ ์ฌ๋ฌ ๊ฐ์ง๊ฐ ์๋๋ฐ, ์ด๋ฌํ ๋ฆฌ์กํธ ๋ผ์ฐํ
๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ํด๋ผ์ด์ธํธ ์ฌ์ดํธ์์ ์ด๋ฃจ์ด์ง๋ ๋ผ์ฐํ
์ ์์ฃผ ๊ฐ๋จํ๊ฒ ๊ตฌํํ ์ ์๋๋ก ํด์ค
- ๋ฆฌ์กํธ ๋ผ์ฐํ
๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋ฆฌ์กํธ ๋ผ์ฐํฐ(react-router), ๋ฆฌ์น ๋ผ์ฐํฐ(reach-router), Next.js ๋ฑ ์ฌ๋ฌ ๊ฐ์ง๊ฐ ์๋๋ฐ, ์ด๋ฌํ ๋ฆฌ์กํธ ๋ผ์ฐํ
๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ํด๋ผ์ด์ธํธ ์ฌ์ดํธ์์ ์ด๋ฃจ์ด์ง๋ ๋ผ์ฐํ
์ ์์ฃผ ๊ฐ๋จํ๊ฒ ๊ตฌํํ ์ ์๋๋ก ํด์ค
- SPA์ ๋จ์
- ์ฑ์ ๊ท๋ชจ๊ฐ ์ปค์ง๋ฉด ์๋ฐ์คํฌ๋ฆฝํธ ํ์ผ์ด ๋๋ฌด ์ปค์ง๋ค๋ ์
- ํ์ด์ง ๋ก๋ฉ ์ ์ฌ์ฉ์๊ฐ ์ค์ ๋ก ๋ฐฉ๋ฌธํ์ง ์์ ์๋ ์๋ ํ์ด์ง์ ์คํฌ๋ฆฝํธ๋ ๋ถ๋ฌ์ค๊ธฐ ๋๋ฌธ์
- ๊ทผ๋ฐ ์ฝ๋ ์คํ๋ฆฌํ
(code splitting) ์ฌ์ฉํ๋ฉด ๋ผ์ฐํธ๋ณ๋ก ํ์ผ๋ค์ ๋๋ ์ ํธ๋ํฝ์ด๋ ๋ก๋ฉ ์๋ ๊ฐ์ ํ ์ ์์ ~
- ๋ฆฌ์กํธ ๋ผ์ฐํฐ์ฒ๋ผ ๋ธ๋ผ์ฐ์ ์์ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํด ๋ผ์ฐํ ์ ๊ด๋ฆฌํ๋ ๊ฒ์ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์คํํ์ง ์๋ ์ผ๋ฐ ํฌ๋กค๋ฌ์์๋ ํ์ด์ง์ ์ ๋ณด๋ฅผ ์ ๋๋ก ์์งํด ๊ฐ์ง ๋ชปํ๋ค๋ ์ ์ฌ์ ์ธ ๋จ์ ์ด ๋ฐ๋ฆ
- ๋ฐ๋ผ์ ๊ตฌ๊ธ, ๋ค์ด๋ฒ, ๋ค์๊ณผ ๊ฐ์ ๊ฒ์ ์์ง์ ๊ฒ์ ๊ฒฐ๊ณผ์ ํ์ด์ง๊ฐ ์ ๋ํ๋์ง ์์ ์๋ ์์
- ๋ํ, ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ์คํ๋ ๋๊น์ง ํ์ด์ง๊ฐ ๋น์ด ์๊ธฐ ๋๋ฌธ์ ์๋ฐ์คํฌ๋ฆฝํธ ํ์ผ์ด ๋ก๋ฉ๋์ด ์คํ๋๋ ์งง์ ์๊ฐ ๋์ ํฐ ํ์ด์ง๊ฐ ๋ํ๋ ์ ์๋ค๋ ๋จ์ ๋ ์์
- ๊ทธ๋ ์ง๋ง ์ด๋ฐ ๋ฌธ์ ์ ์ ์๋ฒ ์ฌ์ด๋ ๋ ๋๋ง(SSR, server-side-rendering)์ ํตํด ๋ชจ๋ ํด๊ฒฐ ๊ฐ๋ฅ ~
2. SSR์ด๋ โญ๏ธ
- SSR
- Server Side Rendering์ ์ฝ์๋ก, ์๋ฒ์์ ํ์ด์ง๋ฅผ ๊ทธ๋ ค ํด๋ผ์ด์ธํธ(๋ธ๋ผ์ฐ์ )๋ก ๋ณด๋ธ ํ ํ๋ฉด์ ํ์ํ๋ ๊ธฐ๋ฒ
- Server Side Rendering์ ์ฝ์๋ก, ์๋ฒ์์ ํ์ด์ง๋ฅผ ๊ทธ๋ ค ํด๋ผ์ด์ธํธ(๋ธ๋ผ์ฐ์ )๋ก ๋ณด๋ธ ํ ํ๋ฉด์ ํ์ํ๋ ๊ธฐ๋ฒ
- ๋ฆฌ์กํธ๋ ๋ํ์ ์ธ CSR(client side rendering)์
- CSR: ์ฌ์ฉ์๊ฐ ํด๋น ๋๋ฉ์ธ์ ์ ์ํ๋ฉด, ํด๋ผ์ด์ธํธ ์๋ฒ(์ฌ์ฉ์์ ์ปดํจํฐ)๊ฐ html๊ณผ js๋ฑ์ ํ์ผ์ ๋ค์ด๋ฐ์ ๋ณด์ฌ์ฃผ๋ ํ์
- ์ด๋ฌํ ๋ฆฌ์กํธ์ CSR์ ์ธ ๋ถ๋ถ์์ SSR์ ์ผ๋ก ๋ฐ๊ฟ ์ฃผ๊ธฐ ์ํด next.js์ ๊ฐ์ ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉ
- SSR์ ์ฌ์ฉํ๋ ๊ฐ์ฅ ํฐ ์ด์ ๋ ํจ์จ์ ์ธ SEO๋ฅผ ์ํด์
- SEO: google, naver์ ๊ฐ์ ๊ฒ์ ์์ง๋ค์ด ๋ด ์น์ฌ์ดํธ์์ html ํ๊ทธ ์์ ๋ด์ฉ์(title, meta-data etc.) ๋ถ์ํ์ฌ ์ฌ์ฉ์๊ฐ ์ ๋ ฅํ ์ ๋ณด๋ฅผ ๋ฐํ์ผ๋ก ์๋ง์(์ฌ์ฉ์๊ฐ ์ํ๋) ์ ๋ณด๋ฅผ ์ฐพ์ ์ ์๊ฒ ํด์ฃผ๋ ๊ธฐ๋ฅ
- CSR ์ํ์์ ์ฌ์ ์ html์ ๊ฐ์ง๊ณ ์์ง ์๊ธฐ ๋๋ฌธ์ ๊ฒ์ ์์ง์ ๋ ธ์ถ๋๋ ๋น๋๊ฐ ํ์ ํ ์ ๊ฑฐ๋, ๋ธ๋ผ์ฐ์ ์ ๋ฐ๋ผ ๊ฒ์ ์์ง์ ํด๋น ์ ๋ณด๊ฐ ๋ ธ์ถ๋์ง ์์ ๊ฒ์์ ํด๋ ๋์ค์ง ์์ ์ ์์(๋๋ฉ์ธ์ ํตํด ์ ์ํ๋ ๊ฒ์ ๊ฐ๋ฅํด์ง๋ ์ ๋, ํด๋น ์ฌ์ดํธ์ ๊ด๋ จ๋ ์ ๋ณด๋ฅผ ๊ฒ์ ์์ง์ด ํฌ๋กค๋งํ์ง ๋ชปํ ์ ์์)
- ๊ทธ๋์ SSR์ ํตํด ์๋ฒ๊ฐ ์ฌ์ ์ html๊ณผ ์ผ๋ถ jsํ์ผ์ ๋๊ฒจ์ฃผ๊ฒ ๋๋ฉด, ๊ฒ์ ์์ง์์ ์ด๋ฅผ ์บ์นํด ์ฌ์ฉ์๊ฐ ์ํ๋ ์ ๋ณด๊ฐ ๋ด๊ธด ์ฌ์ดํธ๋ฅผ ๋ณด์ฌ์ค ์ ์๋ ๊ฒ
- SSR์ ์ง์ํ๊ธฐ ์ํ ๋ฆฌ์กํธ API
- renderToString
- ๋ฆฌ์กํธ ์ปดํฌ๋ํธ๋ฅผ ๋ ๋๋งํ์ฌ ์ ์ html ๋ฌธ์์ด์ ๋ฐํ
- SSR ์ ๊ฐ์ฅ ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ๋๋ API - renderToStaticMarkup
- renderToString๊ณผ ์ ์ฌํ์ง๋ง, ์ผ๋ถ ๋ฆฌ์กํธ ๋ด๋ถ ๋ฐ์ดํฐ ์์ฑ์ ์ถ๊ฐํ์ง ์์
- ์ ์ ํ์ด์ง ์์ฑ ์ ์ฌ์ฉ - renderToNodeStream > renderToPipeableStream
- ๋ฆฌ์กํฌ ์ปดํฌ๋ํธ๋ฅผ ๋ ๋๋งํ์ฌ Node.js ์คํธ๋ฆผ์ ๋ฐํ
- ๋์ฉ๋ ์ปดํฌ๋ํธ๋ฅผ ์คํธ๋ฆฌ๋ฐํ๋๋ ํ๋ก์ ์๋ฒ์์ ์ฌ์ฉ๋ ์ ์์
- React 18 ๋ฒ์ ์์ renderToPipeableStream ์ผ๋ก ๋ฉ์๋๊ฐ ๋ณ๊ฒฝ๋จ - renderToStaticNodeStream
- renderToNodeStream๊ณผ ์ ์ฌํ์ง๋ง, ๋ฐ์ดํฐ ์์ฑ์ ์ถ๊ฐํ์ง ์์
- ์ ์ ํ์ด์ง ์์ฑ ์ ์คํธ๋ฆฌ๋ฐ ๋ ๋๋ง์ ์ฌ์ฉ๋ ์ ์์ - hydrate
- ์๋ฒ์์ ๋ ๋๋ง๋ html ์ฝ๋๋ฅผ ๋ธ๋ผ์ฐ์ ์์ ์ธ์ํ๊ณ ์ด๋ฒคํธ ํธ๋ค๋ฌ๋ฅผ ์ฐ๊ฒฐํ๋ ์ญํ
- ํด๋ผ์ด์ธํธ ์ธก์์ ์๋ฒ ๋ ๋๋ง ๋งํฌ์ ์ ์ด๋ฒคํธ ํธ๋ค๋ฌ๋ฅผ ์ฐ๊ฒฐํ ๋ ์ฌ์ฉ
- ์ด๋ฏธ ๋ ๋๋ง๋ html์ด ์๋ค๋ ๊ฐ์ ํ์ ์์ ์ ์ํ
- renderToString, renderToNodeStream ๋ฑ์ผ๋ก ์์ฑ๋ html ์ปจํ ์ธ ์ ์๋ฐ์คํฌ๋ฆฝํธ ํธ๋ค๋ฌ๋ ์ด๋ฒคํธ๋ฅผ ๋ถ์ด๋ ์ญํ
- renderToString
3. SEO๋ โญ๏ธ
- SEO(๊ฒ์ ์์ง ์ต์ ํ)
- Search Engine Optimization์ ์ฝ์๋ก, goole, ๋ค์ด๋ฒ์ ๊ฐ์ ๊ฒ์ ์์ง๋ค์ด ์๋ฒ์ ๋ฑ๋ก๋ ์น์ฌ์ดํธ๋ฅผ ํ๋ํ๋์ฉ ๋์ ๋ค๋๋ฉด์ ์น์ฌ์ดํธ์ HTML ๋ฌธ์๋ฅผ ๋ถ์ํด์ค
- ์ด๋ html์ ์ฌ์ฉ๋ ํ๊ทธ๋ฅผ ๋ฐํ์ผ๋ก ์ฌ์ฉ์๊ฐ ๊ฒ์ํ ๋, ์น์ฌ์ดํธ๋ฅผ ๋น ๋ฅด๊ฒ ๊ฒ์ํ ์ ์๊ฒ ๋์์ค
- ํ์ง๋ง,
- CSR์์ ์ฌ์ฉ๋๊ณ ์๋ html์ body๋ ํ ํ ๋น์ด ์๋ค๊ฐ(div id="root"์ ๋ฆฌ์กํธ ํน์ฑ) ์ฌ์ฉ์๊ฐ ํด๋น ๋๋ฉ์ธ์ ์ฌ์ง ํ์ด์ง์ ์ ๊ทผํ๋ฉด ํด๋ผ์ด์ธํธ ์๋ฒ์์ js๋ฐ html ํ๊ทธ๋ฅผ ๋ถ๋ฌ์ค๋ ํ์์ด๊ธฐ ๋๋ฌธ์ ์ฌ์ ์ html ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์์ง ์์ ๊ฒ์ ์์ง์ด ํด๋น ๋๋ฉ์ธ์ ์ ๊ทผํ ๋ ์ด๋ ค์์ด ์์
- โ ์ฌ์ดํธ๋ฅผ ๊ฒ์ ์์ง์ผ๋ก ๋ค์ํ ํค์๋๋ฅผ ํตํด ์ ์ ๋๋ ๊ฒ์ด ํ๋ค๋ค → why? ๊ฒ์ ์์ง์ด ์ฐ๋ฆฌ htmlํ์ผ์ ๋ถ์ํ ์ ์๊ธฐ ๋๋ฌธ → why? CSR ํ์์ ์ฌ์ฉ์๊ฐ ์ ๊ทผํด์ผ html, js ๋ฑ์ ํ์ผ์ ๋ถ๋ฌ์ค๊ธฐ ๋๋ฌธ
- ๋ฐ๋ผ์ ๊ฒ์ ์์ง ์ต์ ํ๋ฅผ ํด์ฃผ๊ธฐ ์ํด SSR์ ์ฌ์ฉํด ์ฌ์ ์ html ๋ฌธ์๋ฅผ ๊ฒ์ ์์ง์ด ์ฐพ์ ์ ์๋๋ก ์ ๊ณตํ์ฌ SEO๋ฅผ ํฅ์์ํฌ ์ ์์
- SSR์ ์๋ฒ์์ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ ์ฌ์ ์ html ํ์ผ์ ๋ง๋ค๊ฒ ๋๊ณ ์ด๋ ๊ฒ ๋ง๋ค์ด์ง HTML ํ์ผ์ ์ผ๋ถ ์ด๊ธฐ ์ธํ ์ ํ์ํ js์ ํจ๊ป ํด๋ผ์ด์ธํธ ์๋ฒ์ ๋ณด๋ด์ฃผ๊ฒ ๋จ
- ๊ทธ๋ผ ํด๋ผ์ด์ธํธ ์ธก์์๋ ์๋ฒ์์ ๋ง๋ค์ด์ค ๋ฌธ์๋ฅผ ๋ฐ์ ์์ ๋ฐ๋ก ์ฌ์ฉ์์๊ฒ ๋ณด์ฌ์ค ์ ์๊ฒ ๋๋ ๊ฒ !
- SSR์ ์ฌ์ฉํ๊ฒ ๋๋ฉด ์ฌ์ ์ HTML ๋ฌธ์๋ฅผ ํด๋ผ์ด์ธํธ ์ธก์ผ๋ก ์ ๋ฌํ๊ธฐ ๋๋ฌธ์, ํ์ด์ง ๋ก๋ฉ์ด ๋นจ๋ผ์ง๊ณ , ๊ฒ์ ์์ง์ด ์ฌ์ฉ์์ ์์ฒญ์ ๋ฐ๋ผ ๊ฒ์์ด๋ฅผ ์ฐพ์ ๋(๋ฐ์ดํฐ๋ฅผ ํฌ๋กค๋งํ ๋), ์ฐ๋ฆฌ์ ์น์ฌ์ดํธ์ ํด๋น ๊ฒ์์ด๊ฐ ํฌํจ๋์ด ์๋ค๋ฉด ์ฐ๋ฆฌ ํ์ด์ง๋ฅผ ๋ณด์ฌ์ฃผ๋ ํจ์จ์ ์ธ SEO๊ฐ ๋ ์ ์์
- ํ์ง๋ง,
- SSR์ด CSR์ ๋ชจ๋ ๋ฌธ์ ์ ์ ํด๊ฒฐ์ฑ ์ด ๋์ง๋ ์์(์๋ฒ์์ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ ์ ๋ฐ์์ค๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ)
- ์ฒซ ๋ฒ์งธ๋ก blinking issue๊ฐ ์ฌ์ ํ ์กด์ฌ(ํ์ด์ง๊ฐ ๋์ด๊ฐ ๋๋ง๋ค ๊น๋นก์ why? html ๋ฐ js ํ์ผ์ ์๋ก ๋ฐ์์ค๊ธฐ ๋๋ฌธ์)
- ๋ ๋ฒ์งธ๋ก ์ฌ์ฉ์๊ฐ ์ฆ๊ฐํจ์ ๋ฐ๋ผ ์๋ฒ๋ ์ฌ์ฉ์์ ์์ฒญ์ ์ํด ๋ ๋ง์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๊ณ ์์ HTML์ ๋ง๋ค์ด์ผ ํ๋ฏ๋ก ๊ณผ๋ถํ๊ฐ ์ฌ ์ ์์
- ๋ง์ง๋ง์ผ๋ก ์ฌ์ฉ์๊ฐ ๋น ๋ฅด๊ฒ ์น์ฌ์ดํธ๋ฅผ ํ์ธํ ์๋ ์์ง๋ง, SSR์ ๋ชจ๋ jsํ์ผ์ ๋ค์ด ๋ฐ์ ์ํ๊ฐ ์๋๊ธฐ ๋๋ฌธ์, jsํ์ผ์ด ์์ ํ ๋ค์ด๋ก๋ ๋์ง ์์ ์ํ์์ ํ์ด์ง์ ์ฌ๋ฌ ๋ถ๋ถ์ ํด๋ฆญํ๋ฉด, ์๋์ด ๋์ง ์๋ ๋ถ๋ถ์ด ์กด์ฌํ ์ ์์
- CSR์ ์ฌ์ฉ์์๊ฒ ๋ณด์ฌ์ง๊ณผ ๋์์ ๋ชจ๋ html๊ณผ js๋ฅผ ๋ถ๋ฌ์จ ์ํ์ด๊ธฐ ๋๋ฌธ์, TTV(Time to View, ๋ณด์ฌ์ง๋ ์์ )์ ๋์์ TTI(Time to Interact, ์ธํฐ๋ ์ ,์ฌ์ฉ์์์ ํต์ ์ด ๊ฐ๋ฅํด์ง๋ ์์ ) ๋ชจ๋ ๋์ ์ธ ํ๋์ ํ ์ ์๊ฒ ๋จ
- SSR์ ๊ฒฝ์ฐ, html๊ณผ ์ผ๋ถ jsํ์ผ์ ์๋ฒ๋ก๋ถํฐ ์ฌ์ ์ ๋ฐ์ ๋์๊ธฐ ๋๋ฌธ์ TTV ์ํ์์๋ TTI๊ฐ ์ ๋ถ ํ์ฑํ๋์ด ์์ง๋ ์์
- ์์ฆ์๋ SSR, CSR ๋ฟ๋ง ์๋๋ผ SSG(Static Site Generation)๋ํ ๋ ๋๋ง ๋ฐฉ๋ฒ์ผ๋ก ๋ฑ์ฅํจ
- SSG: ๋ฆฌ์กํธ๋ฅผ ์๋ก ๋ค๋ฉด 'Gatsby' ๋๋ 'Next'์ ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ถ๊ฐ์ ์ผ๋ก ์ฌ์ฉํ์ฌ ๋ ๋๋ง์ ํ๋ ๊ฒ์ธ๋ฐ, ์นํ์ด์ง๋ฅผ ์ ์ ์ผ๋ก ๋ฏธ๋ฆฌ ์์ฑํด๋๊ณ , ์๋ฒ์ ๋ฐฐํฌํด๋๋ ๊ฒ
- SSG์์๋ ์๋ฐ์คํฌ๋ฆฝํธ ํ์ผ์ html ํ์ผ๊ณผ ํจ๊ป ๊ฐ์ง๊ณ ์์ ์ ์๊ธฐ ๋๋ฌธ์, ๋์ ์ธ ์์๋ ์ถฉ๋ถํ ์ถ๊ฐํ ์ ์์.
- ๊ฒฐ๋ก ,
- CSR๋ฅผ ๋ง์ด ์ฌ์ฉํ๋ค๋ฉด, ๋ด๊ฐ ์ต์ข ์ ์ผ๋ก ๋ฒ๋ค๋งํ์ฌ ์ฌ์ฉ์์๊ฒ ๋ณด๋ด์ฃผ๋ jsํ์ผ์ ์ด๋ป๊ฒ ํ๋ฉด ํจ์จ์ ์ผ๋ก ๋ง์ด ๋ถํ ํ์ฌ ์ฒซ ๋ฒ์งธ๋ก ์ฌ์ฉ์๊ฐ ๋ณด๊ธฐ ์ํด์ ํ์ํ ์ ๋ง ํ์์ ์ธ html ์์๋ง ๋ณด๋ผ ์ ์์ ์ง ๊ณ ๋ฏผํด์ผ ํ๊ณ
- SSR์ ๊ฒฝ์ฐ, ์ฌ์ฉ์๊ฐ ๋ณด๊ณ ์ธํฐ๋ ์ (TTI)ํ๋ ์๊ฐ์ ๋จ์ฐจ๋ฅผ ์ค์ด๊ธฐ ์ํด์ ์ด๋ค ๋ ธ๋ ฅ์ ํ ์ ์์์ง ๊ณ ๋ฏผํด์ผ ํจ
- ์ด๋ค ๊ฒ์ด ์ต๊ณ ๋ค, ์ ์ผ ๋ซ๋ค๋ผ๋ ํ๋จ ๋ณด๋ค๋ ๋ด๊ฐ ๋ง๋ค์ด์ผ ํ๋ ์น์ฌ์ดํธ ํน์ฑ์ ๋ง๊ฒ ๋ค์ํ ๋ฐฉ์์ ๋ ๋๋ง์ ํ์ฉํ์ฌ ํ์ด์ง๋ฅผ ๊ตฌ์ฑ
'Frontend ๐ > React' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[React] ์ฌ์ ๋ ๋๋ง, Suspense etc. (1) | 2024.07.24 |
---|---|
[React] ํ์ด๋๋ ์ด์ (Hydration), Next etc. (1) | 2024.07.12 |
[React] useLayoutEffect, ์ด๋ฒคํธ ํธ๋ค๋ง etc. (1) | 2024.07.05 |
[React] ์ปดํฌ๋ํธ ๋ผ์ดํ ์ฌ์ดํด, Hooks etc. (1) | 2024.07.04 |
[React] FLUX, ๋ฆฌ๋์ค, state ๋ถ๋ณ์ฑ, ๋ฆฌ๋์ ๋ถ๋ณ์ฑ, side effect etc. (0) | 2024.06.30 |