
1. ์ฑ๊ธ ํ์ด์ง ์ ํ๋ฆฌ์ผ์ด์ ์ด๋?
์ฑ๊ธ ํ์ด์ง ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฝ์์ธ SPA๋ ๋ ๋๋ง๊ณผ ๋ผ์ฐํ ์ ํ์ํ ๋๋ถ๋ถ์ ๊ธฐ๋ฅ์ ์๋ฒ๊ฐ ์๋ ๋ธ๋ผ์ฐ์ ์ ์๋ฐ์คํฌ๋ฆฝํธ์ ์์กดํ๋ ๋ฐฉ์์ ์๋ฏธํ๋ค. SPA๋ ๋ง ๊ทธ๋๋ก ํ๋์ ํ์ด์ง๋ก ๊ตฌํ๋๋ฉฐ ์๋ก์ด ํ์ด์ง๋ฅผ ๋ฐ์์ค์ง ์๋๋ค. ์ต์ด์ ์ฒซ ํ์ด์ง์์ ๋ฐ์ดํฐ๋ฅผ ๋ชจ๋ ๋ถ๋ฌ์จ ์ดํ์ ํ์ด์ง ์ ํ ๋จ๊ณ์์๋ ์๋ฐ์คํฌ๋ฆฝํธ์ ๋ธ๋ฌ์ฐ์ ์ history.pushState์ history.replaceState๋ก ์ด๋ค์ง๊ธฐ ๋๋ฌธ์ ์๋ฒ์์ HTML์ ๋ด๋ ค๋ฐ์ง ์๊ณ ํ๋์ ํ์ด์ง์์ ๋ชจ๋ ์์ ์ ์ฒ๋ฆฌํ๋ค.
SPA๋ ์ต์ด ์ฒซ ํ์ด์ง๋ฅผ ๋ฐ์ ๋๋ SSR์ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ ์ดํ์๋ CSR์ ์ด์ฉํ์ฌ ๋ ๋๋ง์ ์งํํด์ผ ํ๋ค.
1.1 SPA์์ ํ์ด์ง ์ ํ์ด ์ผ์ด๋๋ ๊ณผ์ ์ ์ค๋ช ํ์์ค
ํ์ด์ง ์ ํ ์ ์๋ก์ด HTML ํ์ด์ง๋ฅผ ์์ฒญํ๋ ๊ฒ์ด ์๋๋ผ ์๋ฐ์คํฌ๋ฆฝํธ์์ ๋ค์ ํ์ด์ง์ ๋ ๋๋ง์ ํ์ํ ์ ๋ณด๋ง HTTP ์์ฒญ ๋ฑ์ผ๋ก ๊ฐ์ ธ์จ ๋ค์, ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํ์ผ๋ก <body/> ๋ด๋ถ์ DOM์ ์ถ๊ฐ, ์์ , ์ญ์ ํ๋ ๋ฐฉ๋ฒ์ผ๋ก ํ์ด์ง๊ฐ ์ ํ๋๋ค.
1.2 SPA์ ์ฅ์ ์ ์ค๋ช ํ์์ค
- ํ์ด์ง ์ ํ์ ํ์ํ ์ผ๋ถ ์์ญ๋ง ๋ค์ ๊ทธ๋ฆด ์ ์๊ธฐ ๋๋ฌธ์ ํจ์ฌ ๋ ๋งค๋๋ฌ์ด UI๋ฅผ ๋ณด์ฌ์ค ์ ์๋ค.
- SPA์์๋ ๋จ์ง ๋ธ๋ผ์ฐ์ ๋ด๋ถ์์ ์๋ํ๋ ์๋ฐ์คํฌ๋ฆฝํธ๋ง ์ ์์ฑํ๋ฉด ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฝ๊ฒ ๋ง๋ค ์ ์๋ค.
- ์ด์ ํ๋ฐํธ์๋ ๊ฐ๋ฐ์๋ค์๊ฒ ์ข ๋ ๊ฐํธํ ๊ฐ๋ฐ ๊ฒฝํ์ ์ ๊ณตํ๋ค.
1.3 JAM ์คํ์ด ๋ฌด์์ธ์ง ์ค๋ช ํ์์ค.
JAM์คํ์ด๋ JavaScript, API, Markup ์คํ์ ์ค์ฌ ๋งํ๋ ์คํ์ด๋ค. React, Vue, Angular ๋ฑ ํ๋ ์์ํฌ(React๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ค)๋ค์ ๋ฑ์ฅ์ผ๋ก ๋๋ถ๋ถ์ ์์ ์ ์๋ฐ์คํฌ๋ฆฝํธ์์ ์ํํ ์ ์๊ฒ ๋์ด, ํ๋ฐํธ์๋๋ ์๋ฐ์คํฌ๋ฆฝํธ์ ๋งํฌ์ (HTML, CSS)์ ๋ฏธ๋ฆฌ ๋น๋ํด ๋๊ณ ์ ์ ์ผ๋ก ์ฌ์ฉ์์๊ฒ ์ ๊ณตํ๋ฉด ์ดํ ์๋์ ๋ชจ๋ ์ฌ์ฉ์์ ํด๋ผ์ด์ธํธ์์ ์คํ๋๋ฏ๋ก ์๋ฒ ํ์ฅ์ฑ ๋ฌธ์ ์ ์ข ๋ ์์ ๋ก์์ง ์ ์๊ฒ ๋์๋ค.
+ ์ด์ ์๋ ์๋ฒ ํ์ฅ์ฑ ๋ฌธ์ ์ ์ด๋ ค์์ด ์์๋?
๊ทธ๋ ๋ค. ์ด์ ์๋ LAMP ์คํ, (Linux, Apache, MySQL, PHP/Python)์ผ๋ก ์น ๊ฐ๋ฐ์ด ๊ตฌ์ฑ๋์ด ์์๋๋ฐ, ์ด๋๋งํด๋ ์๋ฐ์คํฌ๋ฆฝํธ์์ ํ ์ ์๋ ์ผ์ด ์ ํ์ ์ด์๊ธฐ ๋๋ฌธ์ ๋๋ถ๋ถ์ ์ฒ๋ฆฌ๋ฅผ ์๋ฒ์์ ํด์ผ๋ง ํ๋ค. ๋ฐ๋ผ์ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ธฐ๋ฅ์ด ๋ค์ํด์ง๊ฑฐ๋ ์ฌ์ฉ์๊ฐ ๋์ด๋๋ฉด ์ด์ ๋์์ ์๋ฒ๋ ํ์ฅํด์ผ ํ๊ธฐ ๋๋ฌธ์ ํด๋ผ์ฐ๋์ ๊ฐ๋ ์ด ๋ถ์กฑํ๋ ์ด๋๋ ์๋ฒ ํ์ฅ์ฑ์ ์ด๋ ค์์ ๊ฒช์๋ค.
+ JAM ์คํ๊ณผ Node.js์ ๊ณ ๋ํ๋ก ์ธ๊ธฐ๋ฅผ ์ป๊ณ ์๋ ์คํ์ ๋ฌด์์ธ๊ฐ?
- MEAN(MongoDB, Express.js, AngularJS, Node.js)
- MERN(MongoDB, Express.js, React, Node.js)
2. ์๋ฒ ์ฌ์ด๋ ๋ ๋๋ง์ด๋?
์๋ฒ ์ฌ์ด๋ ๋ ๋๋ง์ ์ฝ์ด์ธ SSR์ ์๋ฒ์์ ๋ชจ๋ ๋ ๋๋ง ์์ ์ ํ๊ณ ์ฌ์ฉ์์๊ฒ ํ๋ฉด์ ์ ๊ณตํ๋ ๋ฐฉ์์ด๋ค. ํด๋ผ์ด์ธํธ ๋ ๋๋ง์ ์ฌ์ฉ์ ๊ธฐ๊ธฐ์ ์ฑ๋ฅ์ ์ํฅ์ ๋ฐ์ง๋ง SSR์ ์๋ฒ์์ ์ ๊ณตํ๊ธฐ ๋๋ฌธ์ ๋น๊ต์ ์์ ์ ์ธ ๋ ๋๋ง์ด ๊ฐ๋ฅํ๋ค.
2.1 SSR์ ์ฅ๋จ์ ์ ์ค๋ช ํ์์ค
[์ฅ์ ]
- ์ต์ด ํ์ด์ง ์ง์
์ด ๋น๊ต์ ๋น ๋ฅด๋ค.
- ์ผ๋ฐ์ ์ผ๋ก ์๋ฒ์์ HTTP ์์ฒญ์ ์ํํ๋ ๊ฒ์ด ๋ ๋น ๋ฅด๊ณ , HTML์ ๊ทธ๋ฆฌ๋ ์์ ๋ ์๋ฒ์์ ํด๋น HTML์ ๋ฌธ์์ด๋ก ๋ฏธ๋ฆฌ ๊ทธ๋ ค์ ๋ด๋ ค์ฃผ๋ ๊ฒ์ด ํด๋ผ์ด์ธํธ์์ ๊ธฐ์กด HTML์ ์ฝ์ ํ๋ ๊ฒ๋ณด๋ค ๋ ๋น ๋ฅด๋ค.
- ๊ฒ์ ์์ง๊ณผ SNS ๊ณต์ ๋ฑ ๋ฉํ๋ฐ์ดํฐ ์ ๊ณต์ด ์ฝ๋ค.
- SSR์ ๊ฒ์ ์์ง ์ต์ ํ์ ์ ์ฉํ๋ค.
- SPA์์๋ ๊ฒ์์์ง์๊ฒ HTML์ด๋ ๊ฐ์ข ์ ๋ณด๋ฅผ ์ ๊ณตํ๊ธฐ ์ํด ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์คํํด์ผ ํ์ง๋ง ๋ก๋ด์ ํ์ด์ง๋ฅผ ๋ณด๋ ๊ฒ์ด ์๋ ํ์ด์ง์ ์ ์ ์ธ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ค๋ ๊ฒ์ด ๋ชฉ์ ์ด๋ผ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ๋ค์ด๋ก๋ํ๊ฑฐ๋ ์คํํ ํ์๊ฐ ์๋ค.
- SSR์์๋ ๊ฒ์ ์์ง์ ์ ๊ณตํ ์ ๋ณด๋ฅผ ์๋ฒ์์ ๊ฐ๊ณตํด HTML์๋ต์ผ๋ก ์ ๊ณตํ ์ ์๊ธฐ ๋๋ฌธ์ ๊ฒ์ ์์ง ์ต์ ํ์ ๋งค์ฐ ์ฉ์ดํ๋ค.
- ๋์ ๋ ์ด์์ ์ด๋์ด ์ ๋ค.
- ๋์ ๋ ์ด์์ ์ด๋์ด๋ ์ฌ์ฉ์์๊ฒ ํ์ด์ง๋ฅผ ๋ณด์ฌ์ค ์ดํ์ ๋ค๋ฆ๊ฒ ์ด๋ค HTML ์ ๋ณด๊ฐ ์ถ๊ฐ๋๊ฑฐ๋ ์ญ์ ๋์ด ๋ง์น ํ๋ฉด์ด ๋์ปฅ๊ฑฐ๋ฆฌ๋ ๊ฒ๊ณผ ๊ฐ์ ๋ถ์ ์ ์ธ ์ฌ์ฉ์ ๊ฒฝํ์ ์๋ฏธํ๋ค.
- SPA์์๋ ํ์ด์ง ์ฝํ ์ธ ๊ฐ API ์์ฒญ์ ์์กดํ๊ณ , API ์์ฒญ์ ์๋ต ์๋๊ฐ ์ ๊ฐ๊ฐ์ด๋ฉฐ, ์ด๋ฅผ ์ ์ ํ ์ฒ๋ฆฌํด๋์ง ์๋๋ค๋ฉด ๋์ ๋ ์ด์์ ์ด๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋ค.
- ํ์ง๋ง SSR์์๋ ์ด๋ฌํ API ์์ฒญ์ด ์์ ํ ์๋ฃ๋ ์ดํ์ ์์ฑ๋ ํ์ด์ง๋ฅผ ์ฌ์ฉ์์๊ฒ ์ ๊ณตํ๋ฏ๋ก ์ด๋ฌํ ๋ฌธ์ ์์ ๋น๊ต์ ์์ ๋กญ๋ค.
- ์ฌ์ฉ์์ ๋๋ฐ์ด์ค ์ฑ๋ฅ์ ๋น๊ต์ ์์ ๋กญ๋ค
- ์๋ฐ์คํฌ๋ฆฝํธ ๋ฆฌ์์ค ์คํ์ ๋ถ๋ด์ ์๋ฒ์์ ๋๋ ์ ์์ผ๋ฏ๋ก ์ฌ์ฉ์์ ๋๋ฐ์ด์ค ์ฑ๋ฅ์ผ๋ก๋ถํฐ ์กฐ๊ธ ๋ ์์ ๋ก์์ง ์ ์๋ค.
- ํ์ง๋ง ์ธํฐ๋ท ์๋๊ฐ ๋๋ฆฌ๋ค๋ฉด ์ด๋ ํ ๋ฐฉ๋ฒ๋ก ์ ์ฐ๋ ๋๋ฆด ๊ฒ์ด๊ณ , ์ฌ์ฉ์ ๋ฐฉ๋ฌธ์ด ํญ์ฆํด ์๋ฒ์ ๋ถ๋ด์ด ์ฆ๊ฐํ๊ณ ์ด๋ฅผ ์ํ ์ ์ ํ ์ฒ๋ฆฌ๊ฐ ๋ง๋ จ๋์ด ์์ง ์๋ค๋ฉด SSR๋ ์ถฉ๋ถํ ๋๋ฆด ์ ์๋ค.
- ๋ณด์์ ์ข ๋ ์์ ํ๋ค.
- SSR์ ์ธ์ฆ ํน์ ๋ฏผ๊ฐํ ์์ ์ ์๋ฒ์์ ์ํํ๊ณ ๊ทธ ๊ฒฐ๊ณผ๋ง ๋ธ๋ผ์ฐ์ ์ ์ ๊ณตํด ๋ณด์ ์ํ์ ํผํ ์ ์๋ค.
[๋จ์ ]
- ์์ค์ฝ๋๋ฅผ ์์ฑํ ๋ ํญ์ ์๋ฒ๋ฅผ ๊ณ ๋ คํด์ผ ํ๋ค.
- ์๋ฒ์์ ์คํ๋ ๊ฐ๋ฅ์ฑ์ด ์๋ ์ฝ๋๋ window์ ๋ํ ์ ๊ทผ์ ์ต์ํํด์ผ ํ๊ณ , window ์ฌ์ฉ์ด ๋ถ๊ฐํผํ๋ฉด ํด๋น ์ฝ๋๊ฐ ์๋ฒ ์ฌ์ด๋์์ ์คํ๋์ง ์๋๋ก ์ฒ๋ฆฌํด์ผ ํ๋ค.
- ์ ์ ํ ์๋ฒ๊ฐ ๊ตฌ์ถ๋ผ ์์ด์ผ ํ๋ค.
- SSR์ ์ฌ์ฉ์์ ์์ฒญ์ ๋ฐ์ ๋ ๋๋ง์ ์ํํ ์๋ฒ๊ฐ ํ์ํ์ง๋ง ์๋ฒ๋ฅผ ๊ตฌ์ถํ๋ ๊ฒ์ ์ ๋ ์ฌ์ด ๊ฒ์ด ์๋๋ค.
- ์ฌ์ฉ์์ ์์ฒญ์ ๋ฐ๋ผ ์ ์ ํ๊ฒ ๋์ํ ์ ์๋ ๋ฌผ๋ฆฌ์ ์ธ ๊ฐ์ฉ๋์ ํ๋ณดํด์ผ ํ๊ณ , ๋๋ก๋ ์๊ธฐ์น ์์ ์ฅ์ ์ํฉ์ ๋์ํ ์ ์๋๋ก ๋ณต๊ตฌ ์ ๋ต๋ ํ์ํ๋ค. ๋ํ ์์ฒญ์ ๋ถ์ฐ์ํค๊ณ , ํ๋ก์ธ์ค๊ฐ ์๊ธฐ์น ๋ชปํ๊ฒ ๋ค์ด๋ ๋๋ฅผ ๋๋นํด PM2์ ๊ฐ์ ํ๋ก์ธ์ค ๋งค๋์ ์ ๋์๋ ํ์ํ๋ค.
- ์๋น์ค ์ง์ฐ์ ๋ฐ๋ฅธ ๋ฌธ์
- SPA์์๋ ๋๋ฆฐ ์์ ์ ์ํ์ค์ '๋ก๋ฉ ์ค'๊ณผ ๊ฐ์ ์๋ด๋ฅผ ํ ์ ์์ง๋ง SSR์์ ์ง์ฐ์ด ์ผ์ด๋๋ฉด ์ฌ์ฉ์๋ ๋ ๋๋ง ์์ ์ด ๋๋ ๋๊น์ง ์ด๋ค ์ ๋ณด๋ ์ ๊ณต๋ฐ์ ์ ์๋ค. ๊ทธ๋์ ๊ท๋ชจ๊ฐ ์ปค์ง๊ณ ์์ ์ด ๋ณต์กํด์ง๋ ๋ฑ ๋ณ๋ชฉ ํ์์ด ์ฌํด์ง๋ฉด SSR์ ๋ ์ ์ข์ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํ ์๋ ์๋ค.
2.2 ๊ฐ์ฅ ๋ฐ์ด๋ SPA๊ณผ ๊ฐ์ฅ ๋ฐ์ด๋ MPA ์ค ์ด๋ค ๊ฒ์ ์ฌ์ฉํ ๊ฒ์ธ๊ฐ?
๊ฐ์ฅ ๋ฐ์ด๋ SPA๋ฅผ ์ฌ์ฉํ ๊ฒ์ด๋ค. MPA๊ฐ ์์ฒญ๋ ์ต์ ํ๋ฅผ ๊ฐ๋ฏธํ๋คํ๋๋ผ๋ ๊ฐ์ฅ ๋ฐ์ด๋ SPA๋ผ๋ฉด SPA๊ฐ ๊ฐ์ง ๋ธ๋ผ์ฐ์ API์ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ํ์ฉํ ๋ผ์ฐํ ์ ๊ธฐ๋ฐ์ผ๋ก ํ ๋งค๋๋ฌ์ด ๋ผ์ฐํ ๋ณด๋ค ๋ฐ์ด๋ ์ฑ๋ฅ์ ๋ณด์ฌ์ค ์๋ ์์ ๊ฒ์ด๋ค.
(๊ฐ์ฅ ๋ฐ์ด๋ SPA๋ Gmail์ ์์๋ก ๋ค์์)
2.3 ํ๊ท ์ ์ธ SPA์ ํ๊ท ์ ์ธ MPA ์ค ์ด๋ค ๊ฒ์ ์ฌ์ฉํ ๊ฒ์ธ๊ฐ?
ํ๊ท ์ ์ธ MPA๋ฅผ ์ฌ์ฉํ ๊ฒ์ด๋ค. ํ๊ท ์ ์ธ SPA๋ ํ๊ท ์ ์ธ MPA๋ณด๋ค ๋๋ฆฌ๋ค. ์ผ๋ฐ์ ์ธ SPA์์ ๋ ๋๋ง๊ณผ ๋ผ์ฐํ ์ ์ต์ ํ๊ฐ ๋ผ ์์ง ์๋ค๋ฉด ์ฌ์ฉ์ ๊ธฐ๊ธฐ์ ๋ฐ๋ผ ์ฑ๋ฅ์ด ๋ค์ฅ๋ ์ฅํ๊ณ , ์ ์ ํ ์ฑ๋ฅ ์ต์ ํ๋ ๋ผ ์์ง ์์ ๊ฐ๋ฅ์ฑ์ด ๋๊ธฐ ๋๋ฌธ์ MPA ๋๋น ์ฑ๋ฅ์ด ์์ฌ์ธ ๊ฐ๋ฅ์ฑ์ด ํฌ๋ค.
์ฌ์ง์ด ์ต๊ทผ์๋ MPA์์ ๋ฐ์ํ๋ ๋ผ์ฐํ ์ผ๋ก ์ธํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ค์ํ API๊ฐ ๋ธ๋ผ์ฐ์ ์ ์ถ๊ฐ๋๊ณ ์๋ค.
- ํ์ธํธ ํ๋ฉ, back forwrad cache, Shared Element Transitions
2.4 ํ๋์ SSR์ ๋ํด์ ์ค๋ช ํ์์ค.
์ต์ด ์น์ฌ์ดํธ ์ง์ ์ SSR๋ก ์๋ฒ์์ ์์ฑ๋ HTML์ ์ ๊ณตํ๊ณ ์ดํ ๋ผ์ฐํ ์์๋ ์๋ฒ์์ ๋ด๋ ค๋ฐ์ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ๋ฐํ์ผ๋ก SPA์ฒ๋ผ ์๋ํ๋ ๋ฐฉ์์ ๋ง์ด ์ฌ์ฉํ๋ค.
3. SSR์ ์ํด ๋ฆฌ์กํธ API
- renderToString
- ์ค์ ๋ธ๋ผ์ฐ์ ๊ฐ ๊ทธ๋ ค์ผ ํ HTML ๊ฒฐ๊ณผ๋ฅผ ๋ง๋ค์ด๋ธ๋ค.
- ํด๋ผ์ด์ธํธ์์ ์คํ๋์ง ์๊ณ ์์ฑ๋ HTML์ ์๋ฒ์์ ์ ๊ณตํ ์ ์๊ธฐ์ ์ด๊ธฐ ๋ ๋๋ง์ ๋ฐ์ด๋ ์ฑ๋ฅ์ ๋ณด์ด๋ฉฐ, ๊ฒ์ ์์ง์ด๋ SNS ๊ณต์ ๋ฅผ ์ํ ๋ฉํ ์ ๋ณด๋ renderToString์์ ๋ฏธ๋ฆฌ ์ค๋นํ ์ฑ๋ก ์ ๊ณตํ ์ ์๋ค.
- data-reactroot ์์ฑ์ด ์๊ธฐ ๋๋ฌธ์ renderToStaticMarkup๊ณผ ๋ค๋ฅด๊ฒ hydrate ํจ์์์ ๋ฃจํธ๋ฅผ ์๋ณํ๋ ๊ธฐ์ค์ ์ด ๋์ด useEffect์ ๊ฐ์ API๋ฅผ ์คํํ ์ ์๋ค.
- renderToNodeStream
- renderToString๊ณผ renderToStaticMarkup์ ๋ธ๋ผ์ฐ์ ์์๋ ์คํํ ์ ์์ง๋ง renderToNodeStream์ ๋ธ๋ผ์ฐ์ ์์ ์ฌ์ฉํ๋ ๊ฒ์ด ์์ ํ ๋ถ๊ฐ๋ฅํ๋ค.
- renderToNodeStream๋ ์์ ํ Node.js ํ๊ฒฝ์ ์์กดํ๊ณ ์๋ค.
- ๊ฒฐ๊ณผ๋ฌผ์์๋ ์ฐจ์ด๊ฐ ์๋๋ฐ renderToNodeStream๋ Node.js์ ReadableStream์ผ๋ก ๋ฐํํ๋ค.
- ์ ์ฌ์ฉํ ๊น?
- ์คํธ๋ฆผ : ํฐ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃฐ ๋ ๋ฐ์ดํฐ๋ฅผ ์ฒญํฌ(chunk, ์์ ๋จ์)๋ก ๋ถํ ํด ์กฐ๊ธ์ฉ ๊ฐ์ ธ์ค๋ ๋ฐฉ์
- ๋ฐํ๋๋ ๊ฒฐ๊ณผ๋ฌผ์ด ์ ๋ทฐ๋ธ ์์ ๋ฑ๊ณผ ๊ฐ์ด ํด ๋, ํฐ ํฌ๊ธฐ์ ๋ฐ์ดํฐ๋ฅผ ์ฒญํฌ ๋จ์๋ก ๋ถ๋ฆฌํด ์์ฐจ์ ์ผ๋ก ์ฒ๋ฆฌํ ์ ์๋ค. (์ ํ๋ธ๋ ์ฌ์ฉ์๊ฐ ๋ณผ ์ ์๋ ๋ช ์ด๋ผ๋ ๋จผ์ ๋ค์ด๋ก๋๋๋ฉด ๊ทธ ๋ถ๋ถ์ ๋จผ์ ๋ณด์ฌ์ฃผ๊ณ , ์ดํ์ ๊ณ์ํด์ ์์์ ๋ค์ด๋ก๋ํ๋ค.)
- hydrate
- hydrate๋ ์์ฑ๋ HTML ์ฝํ ์ธ ์ ์๋ฐ์คํฌ๋ฆฝํธ ํธ๋ค๋ฌ๋ ์ด๋ฒคํธ๋ฅผ ๋ถ์ด๋ ์ญํ ์ ํ๋ค.
4. Next.js์์ ๋ฒ๋ค๋ง๊ณผ ์ปดํ์ผ์ ๋น ๋ฅด๊ฒ ์ํํ๊ธฐ ์ํด ๋ง๋ค์ด์ง ์ต์ ์ ๋ฌด์์ธ๊ฐ?
swcMinify, SWC๋ ๋ฐ๋ฒจ์ ๋นํด ๋ ๋น ๋ฅธ ์๋๋ฅผ ๋ณด์ฌ์ฃผ๊ธฐ ๋๋ฌธ์ ํน๋ณํ ์ด์ ๊ฐ ์๋ค๋ฉด ์ฐ๋ ๊ฒ์ ๊ถ์ฅํ๋ค.
4.1 Next.js์ ๋ผ์ฐํ ๊ตฌ์กฐ๋ ๋ฌด์์ธ๊ฐ?
/pages ๋๋ ํฐ๋ฆฌ๋ฅผ ๊ธฐ์ด๋ก ๊ตฌ์ฑ๋๋ค.
๊ฐ ํ์ด์ง์ ์๋ default export๋ก ๋ด๋ณด๋ธ ํจ์๊ฐ ํด๋น ํ์ด์ง์ ๋ฃจํธ ์ปดํฌ๋ํธ๊ฐ ๋๋ค.
4.2 getServerSideProps์ ์ ๋ฌด์ ์ฐจ์ด๋ฅผ ์ค๋ช ํ์์ค.
getServerSideProps๊ฐ ์๋ค๋ฉด ์๋ฒ์์ ์คํํ์ง ์์๋ ๋๋ ํ์ด์ง๋ก ์ฒ๋ฆฌํ๋ค. ๋ฐ๋ผ์ getServerSideProps๋ฅผ ๋ฃ์ด์ฃผ์ง ์๋๋ค๋ฉด ๋น๋ ์์ ์ ๋ฏธ๋ฆฌ ๋ง๋ค์ด๋ ๋๋ ํ์ด์ง๋ก ๊ฐ์ฃผํด๋ฒ๋ ค window๋ undefined๊ฐ ์๋๋ค.
4.3 Next.js์์ ์ฌ์ฉํ ์ ์๋ CSS์ ์ฌ์ฉ ๋ฐฉ๋ฒ์ ๋ํด ๋์ดํ์์ค.
- ์ ์ญ ์คํ์ผ
- ์ปดํฌ๋ํธ ๋ ๋ฒจ CSS
- SCSS์ SASS
- CSS-in-JS
- styled-jsx, styled-components, Emotion, Linaria ๋ฑ
'FE > React' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[React] SPA, CSR์ ๊ฐ์๊น ๋ค๋ฅผ๊น (0) | 2024.05.30 |
---|---|
React ๊ฐ๋ฐ์ Node.js๋ฅผ ์ค์นํ๋ ์ด์ (0) | 2024.03.15 |
ํ์ด์ง ์ด๋ ์ ์คํฌ๋กค ์์น ํญ์ ์์ ๊ณ ์ ์ํค๊ธฐ (0) | 2024.02.17 |