์ฐธ๊ณ ๊ธ ์๋ฌธ
(์ด๋ฒ ๊ธ์ ๊ฒฝ์ฐ ํด๋น ๊ธ์ ๋ง๋ถํ ์ค๋ช ์ด ๋ถ์กฑํ๋ค๊ณ ๋๊ปด์ง๋ ๊ฒ๋ค์ ๋ค์ ์์นญํ์ฌ ์์ฑํ์ฌ.. ์ฐธ๊ณ ๊ธ์ด๋ผ๊ณ ํ๊ธฐ์๋ ๋จธ์ฑํ๋ค.)
โ
React18์์ ๋์ ๋ ๊ฐ๋ ์ธ, ๋ฆฌ์กํธ ์๋ฒ ์ปดํฌ๋ํธ(React Server Component) ์ ๋ํ์ฌ ํฌ์คํ ํด๋ณด๊ณ ์ ํ๋ค.
๋ฆฌ์กํธ ์๋ฒ ์ปดํฌ๋ํธ๋ ๋จ์ด ๊ทธ๋๋ก React ์์ ์ ๊ณตํ๋, ์๋ฒ์์ ๋์ํ๋ ์ปดํฌ๋ํธ๋ฅผ ์๋ฏธํ๋ค.
(ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ๋ ์๋? ๋ผ๊ณ ๋ฌผ์ผ๋ฉด.. ํด๋น ๊ธฐ์ ์ด ์ ์ฉ๋์ง ์์ ์ด์ ์ ๋ชจ๋ ์ปดํฌ๋ํธ๋ค์ด ๋ฐ๋ก ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ์ด๋ค.)
โ
๋ค์ด๊ฐ๊ธฐ์ ์์.. ๋น๊ตํ๊ธฐ ์ํด์๋ ์ ํ๋๋ ๊ฐ๋ ์ ๋ํ ์ดํด๊ฐ ํ์ํ๋ค.
React18์์ ๋์ ๋ ๊ฐ๋ ์ด ๋ฆฌ์กํธ ์๋ฒ ์ปดํฌ๋ํธ ๋ผ๋ฉด, ๊ทธ ์ด์ ์๋ ์ด๋ค ์์ผ๋ก ๋ ๋๋ง์ ์งํํ๊ณ ์์์๊น?
โ
~ React17 ๊น์ง์ ๋ ๋๋ง
React17 ๊น์ง์ ๋ ๋๋ง์ CSR๊ณผ SSR๋ก ์ค๋ช ๋๋ค.
โ CSR (Client Side Rendering)
React18 ์ด์ ์ ๋ฆฌ์กํธ ์์ ์ปดํฌ๋ํธ์ ๋ชจ๋ ๋ ๋๋ง์ ํด๋ผ์ด์ธํธ(๋ธ๋ผ์ฐ์ )์์ ์ด๋ฃจ์ด์ง.
๋ก์ง
- ์๋ฒ๋ React๋ก ์์ฑํ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ฅผ ๋ธ๋ผ์ฐ์ ์ ์๋ตํ๊ณ ,
- ๋ธ๋ผ์ฐ์ ๋ ์๋ต๋ฐ์ ์๋ฐ์คํฌ๋ฆฝํธ ํ์ผ์ ํด์ํ์ฌ HTMLํ์ผ๋ก ๋ ๋๋งํ๊ณ , ์ธํฐ๋ ์ ์ด ํ์ํ ์ฝ๋๋ค(event listener ๋ฑ)์ ์ฅ์ฐฉ
โ
โก SSR (Server Side Rendering)
๊ธฐ๋ณธ react.js ์ ๊ฒฝ์ฐ๋ CSR. Next,js ์ ์ผ์ด์ค๊ฐ ์๋ฒ ์ฌ์ด๋ ๋ ๋๋ง์ ํด๋น๋๋ ๋ฏ. (Next.js๊ฐ ๋์ค๋ฉด์ SSR์ ์ฝ๊ฒ ๊ตฌํํ ์ ์๊ฒ ๋จ.)
๋ก์ง
-Next.js ๋ฅผ ํตํด ์๋ฒ ๋จ์์ 1) ํ์ด์ง๋ณ๋ก ์ฝ๋๋ฅผ ์ชผ๊ฐ ํ(Code Split) 2) HTML์ ๋ ๋๋งํ ๋ค์, 3) ๋ธ๋ผ์ฐ์ ์ ์๋ตํ๋ฉด.
- ๋ธ๋ผ์ฐ์ ๋ ์ ๋ฌ ๋ฐ์ 1) HTML์ ๋ ธ์ถํ๊ณ , 2) ์ถ๊ฐ๋ก ์ ๋ฌ ๋ฐ์ JS ์ฝ๋๋ค(event listener)์ ๊ฒฐํฉํ๋ Hydration ๊ณผ์ ์ ๊ฑฐ์นจ.
โป Hydration: ๋ผ๋ ๋ฟ์ธ HTML์ JS์ฝ๋๋ฅผ ๊ฒฐํฉ์์ผ ์ธํฐ๋์ (click event ์ฒ๋ฆฌ ๊ฐ์ ๊ฒ)์ ์ฅ์ฐฉํ๋ ๊ณผ์ ..
โ
Next.js ๋ฅผ ์ฌ์ฉํ์ฌ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ธ๋ผ์ฐ์ ์์ ๋ ๋๋ง์ด ๋๋ CSR์ด ๊ธฐ๋ณธ.
SSR์ ์์ฑํ๋ ค๋ฉดใ ก, ๊ธฐํ ์ถ๊ฐ์ ์ธ ์ฝ๋ ์์ฑ์ด๋ ์ค์ ์ ํด์ฃผ์ด์ผ ํ์...
โ
React18 ์ดํ์ ๋ ๋๋ง
๋ ๊ฐ์ง ํ์์ผ๋ก ์ปดํฌ๋ํธ๋ฅผ ๋ง๋ค ์ ์๊ฒ ๋์๋ค. (in next13)
โ
โ
โ Server Component
์๋ฒ์์ HTML์ ๋ ๋๋ง ํด์ ๋ธ๋ผ์ฐ์ ์ ์๋ตํ๋ ๋ฐฉ์
ํ์ด๋๋ ์ด์ (Hydration) ๊ณผ์ ์ด ์์
โ
โก Client Component
์๋ฒ์์ ๊ธฐ๋ณธ์ ์ธ HTML์ ๋ ๋๋งํ์ฌ ๋ธ๋ผ์ฐ์ ์ ์๋ตํ๋ ๋ฐฉ์
Hydration(JS Interactivity)๋ง ๋ธ๋ผ์ฐ์ ์์ ์ด๋ค์ง.
โ
๊ธฐ๋ณธ์ ์ธ HTML ์์ฒด๋ ๋ชจ๋ ์๋ฒ์์ ๋ ๋๋ง ๋จ..
๋จ, Client Component์ ๊ฒฝ์ฐ์๋ง ๋ธ๋ผ์ฐ์ ์์ ํ์ด๋๋ ์ด์ ๊ณผ์ ์ด ๋ฐ์, !!
โ
๊ทธ๋ฌ๋ฏ๋ก..
Event Listener(ํด๋ฆญ ์ด๋ฒคํธ ๋ฑ), Browser API(Web Storage ๋ฑ), React Hooks(useState, useEffect ๋ฑ) ๋ฑ์ ๋ธ๋ผ์ฐ์ ์์๋ง ์๋ํ๋ ํด๋ผ์ด์ธํธ ๋จ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๊ธฐ ๋๋ฌธ์..
Hydration ๊ณผ์ ์ ๊ฑฐ์น์ง ์๋ Server Component์์๋ ์ ์๊ฐ ๋ ์ ์์. !!!
+) ํ์ฌ ๋ฆฌ์กํธ ์๋ฒ ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํด๋ณผ ์ ์๋ ๋ฐฉ๋ฒ์ next.js 13๋ฒ์ ์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ๋ฟ์.
โ
React Server Component์ ์ฅ์
- ์๋ฒ ์ ์ฉ ์ฝ๋๋ฅผ ์คํํ๋ ์ต์ด์ "๊ณต์์ ์ธ" ๋ฐฉ๋ฒ
- ์ปดํฌ๋ํธ ๋ด์์ ์๋ฒ ์ ์ฉ ์ฝ๋๋ฅผ ์คํํ๋ ๋ฐฉ๋ฒ์ด ์๊ฒผ๋ค
- ์ฑ๋ฅ ํฅ์.
- ๋ ์ด์ ๊ธฐ๋ฅ๊ณผ ๋ฒ๋ค ํฌ๊ธฐ์ trade-off ๋ฅผ ๊ณ ๋ คํ์ง ์์๋ ๋จ
โ
์ ๋ฆฌํด๋ณด๋ฉด
1. ์๋ก์ด ํจ๋ฌ๋ค์์์ ์ฐ๋ฆฌ๊ฐ ์ ์๊ณ ์๋ "ํ์ค" ๋ฆฌ์กํธ ํ๋ ์์ํฌ๋ "ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ" ๋ผ๋ ์ด๋ฆ์ผ๋ก ๋ฆฌ๋ธ๋๋ฉ ๋จ.
โ
2. ์๋ก์ด ํจ๋ฌ๋ค์์์ ์๋ฒ์๋ง ๋ ๋๋ง์ด ๋๋ ์๋ก์ด ์ ํ์ ์ปดํฌ๋ํธ์ธ '์๋ฒ ์ปดํฌ๋ํธ'๊ฐ ์ถ๊ฐ. ํด๋น ์ฝ๋๋ ์๋ฐ์คํฌ๋ฆฝํธ ๋ฒ๋ค์ ํฌํจ๋์ง ์์ผ๋ฏ๋ก hydrate ํ๊ฑฐ๋ rerendering์ ํ์ง ์๋๋ค.
ํด๋น ๋ด์ฉ์ ๋ณด์... ๋ฌด์กฐ๊ฑด์ ์ผ๋ก ์๋ก๋์จ ๊ฒ์ด ์ข๋ค! ๋ผ๋ ๊ฐ๋ ๋ณด๋ค๋
์๋ฒ ์ปดํฌ๋ํธ์ ํด๋ผ์ด์ธํธ์ ๋ก์ง์ ์ธ ํน์ง์ ์ ์๊ณ .. ์ ์ฌ์ ์์ ์ฌ์ฉํด์ฃผ๋ ๊ฒ์ด ์ข์ ๊ฒ ๊ฐ์๋ณด์ธ๋ค. (์ฌ์ง์ด ์๋ก ๋์จ ๊ฐ๋ ๋ํ ์๋๋ฉฐ, ๊ธฐ๋ณธ ์ฌ์ฉ์๋ค์ด ์ฐํํ์ฌ ์ฐ๋ ๊ธฐ๋ฅ์ ๋ฆฌ์กํธ๊ฐ ๊ณต์์ ์ธ ๋ฐฉ๋ฒ์ ์ ์ํด์ค ๋ฌ์์ค์.)
โ
๊ทธ๋ ๋ค๋ฉด..
โ
Server Component์ Client Component๋ ๊ฐ๊ฐ ์ธ์ ์ฌ์ฉํ๋ฉด ์ข์๊น?
โ
Client Component
- interactivity ๋ฐ Event Listener ์ฌ์ฉ์ด ํ์ํ ๋
- React Hook (useState, useEffect ๋ฑ) ์ฌ์ฉ์ด ํ์ํ ๋
- Browser ๋จ์ API (web storage ๋ฑ) ์ฌ์ฉ์ด ํ์ํ ๋
โ
Server Component
-์์ Client Component ์ฌ์ฉ์ด ๋ถ๊ฐํผํ ๊ฒฝ์ฐ๋ฅผ ์ ์ธํ ๋ชจ๋ ๊ฒฝ์ฐ ...
โ
์ฐธ๊ณ ๋ก ๊ณต์ ๋ฌธ์์์๋ ์๋์ case์์ ์๋ฒ ํด๋ผ์ด์ธํธ๋ฅผ ์ฌ์ฉํ ๊ฒ์ ๊ฐ์ถํ๊ณ ์๋ค.
1. fetch Data
2. Access Backend Resources(directly)
3. Keep sensitive information on the server (access tokens, API keys, etc)
4. Keep large dependencies on the server / Reduce client-side Javascript
โ
์ ๋ฐ์ ์ผ๋ก ์๋ฒ ํต์ ๊ณผ ๊ด๋ จ์๋ ๋ด์ฉ์ ๋ํ ์ฒ๋ฆฌ๋ฅผ ๊ฐ์ถํ๋ ๋ฏ
ํ๋ฉด์ ์์๋ก ๋ค์ด๋ณด์๋ฉด
์ฌ๊ธฐ์
๋จ์ํ html๋ก ์ด๋ฃจ์ด์ ธ ์ ์ ์ธํฐ๋ ์ ์ด ์์ ๊ฒ์ผ๋ก ์ถ์ ๋๋ sidebar, Main, Navbar ์ปดํฌ๋ํธ๋ ์๋ฒ ์ปดํฌ๋ํธ๋ก ๊ตฌํํ๋ ๊ฒ์ด ์ข์ ๊ฒ์ด๊ณ
Search๋ Button ๊ฐ์ ์ ์ ์ธํฐ๋ ์ ์ด ์ผ์ด๋ react hook์ผ๋ก ๊ธฐ๋ฅ์ ๊ตฌํํ์ฌ์ผ ํ๋ ์ปดํฌ๋ํธ๋ค์ ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ๋ก ๊ตฌํํ๋ ๊ฒ์ด ์ข์ํ ๋ค.
โป ์๋ฒ ์ปดํฌ๋ํธ๋ ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ๋ฅผ ํฌํจ ์ํฌ ์ ์์. ์ญํ์ ๋ถ๊ฐ.