2024-03-25.md
๐กDIL: ๋ชจ๋ ๋ฆฌ์กํธ ๋ฅ ๋ค์ด๋ธ, 4์ฃผ์ฐจ-1
์คํฐ๋: ์๊ฐ CS, https://github.com/monthly-cs/2024-03-modern-react-deep-dive
์ค๋ ์งํ: ๊ฐ์ธ๊ณต๋ถ
DIL-week4-1_2024-03-25
| DIL ์ฃผ์ฐจ | ๋ฒ์ | ๋ด์ฉ | ์ค๋์ฐจ ์ง๋ | | -------- | ------ | ------------------------------- | ----------- | | 4์ฃผ์ฐจ | 4, 8์ฅ | SSR๊ณผ ESlint, ํ ์คํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ | 252p~269p |
์ค๋ ์ฝ์ ๋ด์ฉ์ markdown์ผ๋ก ๊ฐ๋จํ ๋ฉ๋ชจ
์ฝ์ ์๊ฐ: 10~11์
์๋ฒ ์ฌ์ด๋ ๋๋๋ง SSR
CSR
- ํด๋ผ์ด์ธํธ ์ฌ์ด๋ ๋ผ์ฐํ
, ํด๋ผ์ด์ธํธ ์ฌ์ด๋ ๋๋๋ง, ์ฑ๊ธ ํ์ด์ง ์ ํ๋ฆฌ์ผ์ด์
- ์ต์ด ๋ฐ์ดํฐ ๋ก๋ฉ ์ดํ, ํ์ด์ง ์ ํ์
history.pushState
,history.replaceState
- ์ต์ด ๋ฐ์ดํฐ ๋ก๋ฉ ์ดํ, ํ์ด์ง ์ ํ์
- ex) Gmail
์น ๊ธฐ์ ์คํ
| ์คํ๋ช | ์คํ ๋ด์ฉ | | ------ | --------------------------------------- | | LAMP | Linux, Apache, MySQL, PHP/Python | | JAM | JavaScript, API, Markup | | MEAN | MongoDB, Express.js, AngularJS, Node.js | | MERN | MongoDB, Express.js, React, Node.js |
- ํ๋ฐํธ์๋๋ JS, HTML, CSS๋ฅผ ๋น๋ ํ, ์ ์ ์ผ๋ก ์ฌ์ฉ์์๊ฒ ์ ๊ณต -> ํด๋ผ์ด์ธํธ์์ ์คํ
- ์๋ฒ ํ์ฅ์ฑ์ด ๋ ์์ ๋ก์์ก๋ค
- Node.js์ ๊ณ ๋ํ => MEAN, MEAN ์คํ
ํ๊ท ์๋ฐ์คํฌ๋ฆฝํธ ๋ฆฌ์์ค ํฌ๊ธฐ์ ์ฐ์ํฅ
- https://httparchive.org/reports/state-of-javascript#reqJs
| | desktop | mobile | | -------------------------------------------------------------------------------- | ----------- | ----------- | | JavaScript Bytes | 601.1 KB | 552.6 KB | | JavaScript Requests | 23 Requests | 22 Requests | | First Contentful Paint | 2.3 | 3.8 | | Time to Interactive | 4.2 | 14.3 |
- ์ฒด๊ฐ์ ์น ์ ํ๋ฆฌ์ผ์ด์
์ ๋ก๋ฉ ์๋๊ฐ ๋๋ ค์ง
- https://www.nngroup.com/articles/the-need-for-speed/
- ์น ๊ฐ๋ฐ ํ๊ฒฝ์ด ๋ฐ๋์๋ค
- ์น์์ ๋ ๋ง์ ์์ ์ ์ฒ๋ฆฌํ๊ณ ์๋ค
- ์ฝ๋์ ์์ด ์ฆ๊ฐ -> JS ํ์ฑ์ ์ํด CPU๋ฅผ ์๋นํ๋ ์๊ฐ์ด ์ฆ๊ฐ
- ๋ชจ๋ฐ์ผ ๊ธฐ์ค: onLoad๋ 10.8์ด, Time to Interactive 14.3์ด
- ๋ ๊ฐ์ง ์์ธ ๋ชจ๋ ๊ณ ๊ฐ์ ์ค๋ํ ์ ์๋ ๋ด์ฉ์ด ์๋
- ์ ํ์ ์น ์๋น์ค ํ๊ฒฝ์ ๋ํ ๊ณ ๋ฏผ์ ํด์ผ ํจ
Server-Side Rendering์ด๋?
MPA, Multi-Page Lifecycle์
- ์๋ฒ์์ ํ์ด์ง ์์ฒญ ๋ฐ์ ํ, ์์ฑ๋ HTML๋ฅผ ๋๋๋งํ๋ค
SPA, Single-Page Application Lifecycle์
- ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ํ์ฉํด ํ๋์ ํ์ด์ง์์ ๋๋๋ง์ ์ํํ๋ค. ํ์์ ์ธ ํ๊ณ๊ฐ ์๋ค.
- ์ฌ์ฉ์์๊ฒ ์ ๊ณต๋๋ ์๋ฐ์คํฌ๋ฆฝํธ ๋ฒ๋ค์์ ๋๋๋ง
- ์ฌ์ฉ์ ๊ธฐ๊ธฐ์ ์ฑ๋ฅ์ ์ํฅ์ ๋ฐ์ (SSR๋ณด๋ค ๋ถ์์ )
SSR์
์ฅ์
์ฅ์ 1. ์ต์ด ํ์ด์ง ์ง์ First Contentful Paint์ด ๋น๊ต์ ๋น ๋ฅด๋ค
- ex) ์ธ๋ถ API ํธ์ถ์ ๋ง์ด ์์งํ๋ ํ์ด์ง, HTML์ ํฌ๊ธฐ๊ฐ ํฐ ํ์ด์ง
- HTTP ์์ฒญ: ์๋ฒ์์ ํ๋ ๊ฒ ๋น ๋ฆ
- HTML ๊ทธ๋ฆฌ๊ธฐ: ์๋ฒ์์ ๋ฌธ์์ด๋ก ๋ฏธ๋ฆฌ ๊ทธ๋ ค์ ๋ด๋ ค์ฃผ๋ ๊ฒ, ํด๋ผ์ด์ธํธ์์ ๊ธฐ์กด HTML์ ์ฝ์ ํ๋ ๊ฒ๋ณด๋ค ๋น ๋ฆ
์ฅ์ 2. ๊ฒ์ ์์ง ์ต์ ํ
- ๊ฒ์ ์์ง, SNS ๊ณต์ , ๋ฉํ ๋ฐ์ดํฐ ์ ์ฉ
- ๊ฒ์ ์์ง ๋ก๋ด > HTML ๋ค์ด๋ก๋(JS๋ ์คํ ์ํจ) > OG ํ๊ทธ ๊ธฐ๋ฐ์ผ๋ก ๊ฒ์(๊ณต์ ) ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ค๊ณ , ๊ฒ์ ์์ง์ ์ ์ฅํ๋ค
์ฅ์ 3. Cumulative Layout Shift
- ๋์ ๋ ์ด์์ ์ด๋์ด ์ ๋ค
- API ์์ฒญ ์๋ฃ ํ ์์ฑ๋ ํ์ด์ง๋ฅผ ์ ๊ณตํ๋ฏ๋ก Layout Shift๊ฐ ์ ์ง๋ง, ์ต์ด ํ์ด์ง ๋ค์ด๋ก๋๊ฐ ๋๋ ค์ง ์ ์๋๋ฐ > ๋ฆฌ์กํธ 18์์ ๋ฑ์ฅํ ์คํธ๋ฆผ์ผ๋ก ํด๊ฒฐ๋ ์ ์๋ค > ์ดํ์ ๋ค๋ฃธ
์ฅ์ 4. ์ฌ์ฉ์์ ๋๋ฐ์ด์ค ์ฑ๋ฅ์ ๋น๊ต์ ์์ ๋ก์
- ๋ถ๋ด์ ์๋ฒ์~
์ฅ์ 5. ๋ณด์
- JAM ์คํ: ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ชจ๋ ํ๋์ด ๋ธ๋ผ์ฐ์ ์ ๋ ธ์ถ
- API ํธ์ถ๊ณผ ์ธ์ฆ ๋ฑ์ ๋ฏผ๊ฐํ ์์ > ์๋ฒ์์ ์ํํ๊ณ ๊ฒฐ๊ณผ๋ง ๋ธ๋ผ์ฐ์ ์ ๊ณต
๋จ์
๋จ์ 1. ์๋ฒ ํ๊ฒฝ์ ๋ํ ๊ณ ๋ ค๊ฐ ํ์
- ์์ค ์ฝ๋ ์ ๋ฐ์ ๊ฑธ์ณ, ์๋ฒ ํ๊ฒฝ ๊ณ ๋ ค
- ex) window, sessionStorage, ์ ์ญ ๊ฐ์ฒด
๋จ์ 2. ์ ์ ํ ์๋ฒ ๊ตฌ์ถ
- ์ฌ์ฉ์์ ์์ฒญ์ ๋ฐ์ ๋๋๋ง์ ์ํํ ์๋ฒ๊ฐ ํ์
- ๋ฌผ๋ฆฌ์ ์ธ ๊ฐ์ฉ๋, ์ฅ์ ๋ณต๊ตฌ ์ ๋ต, ์์ฒญ ๋ถ์ฐ, ํ๋ก์ธ์ค ๋งค๋์ ์ ๋์
๋จ์ 3. ์๋น์ค ์ง์ฐ
- ์ง์ฐ๋๋ค๋ฉด? ๋ณ๋ชฉ ์ํ์์ ์ด๋ค ์ ๋ณด๋ ์ ๊ณตํ ์ ์์
SPA vs SSR
- SSR is not ๋ง๋ฅ
- ๋ฌด๊ฑฐ์ด ์์ ์ ์๋ฒ์ ๋ฏธ๋ฃฌ๋ค๊ณ ํด์ ๋ชจ๋ ์ฑ๋ฅ ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋์ง ์์
- ์๋ชป๋ ์ค๊ณ ์, ์ฑ๋ฅ์ ํด์น๊ณ ๊ด๋ฆฌ ํฌ์ธํธ๋ง ๋์ด๋๋ ์ญํจ๊ณผ
- ์๋ง๋ SPA
- ๋ ์ด์ง ๋ก๋ฉ lazy loading: ์ค์์ฑ ๋ฎ์ ๋ฆฌ์์ค
- ์ฝ๋ ๋ถํ code splitting: ๋ถํ์ํ ๋ฆฌ์์ค ๋ค์ด๋ก๋ ๋ฐ ์คํ ๋ฐฉ์ง
- ๋ณ๊ฒฝ ํ์ํ HTML๋ง ๊ต์ฒดํ๋ ์ต์ ํ
- SPA์ ์ฑ๋ฅ ์ต์ ํ
- ์ฌ์ฉ์ ๊ธฐ๊ธฐ์ ์์กด
- ์ต์ ํ: ํ์ด์ง ์ ํ ์ ํ์ํ ๋ฆฌ์์ค/๊ณตํต ๋ฆฌ์์ค, ๋ค์ด๋ก๋์ ๋๋๋ง ์ฐ์ ์์ ์ ๋ต => ์ด๋ ต๋ค
- Paint Holding: ๊ฐ์ ์ถ์ฒ(origin)์์ ๋ผ์ฐํ ์ด ์ผ์ด๋ ๊ฒฝ์ฐ, ์ด์ ํ์ด์ง์ ๋ชจ์ต์ ๋ณด์ฌ์ฃผ๋ ๊ธฐ๋ฒ
- back forward cache(bfcache): ์์ผ๋ก ๊ฐ๊ธฐ ๋ค๋ก ๊ฐ๊ธฐ ํ์ด์ง ์บ์ฑ
- Shared Element Transitions: ํ์ด์ง ๋ผ์ฐํ ์, ๋์ผ ์์ ์ฝํ ์คํธ๋ฅผ ์ ์งํ๊ธฐ
- ํ๋์ SSR (Next.js, Remix)
- ์ต์ด ์น ์ฌ์ดํธ ์ง์ ์, SSR
- ์ดํ ๋ผ์ฐํ , SPA๊ฐ์ด ์๋
- ์๋ ๋ฐฉ์์ ์ดํดํ์ง ๋ชปํ๋ฉด, LAMP ์คํ๊ณผ ๋ค๋ฆ์๋ MPA๋ฅผ ๋ง๋ค์ด๋ฒ๋ฆฌ๊ฑฐ๋, ์๋ฒ์์ ์์๋กฑ ์ํ๋ SPA ์๋น์ค๋ฅผ ๋ง๋ค ์ ์๋ค
- ๋ ๊ฐ์ง ๋ฐฉ๋ฒ์ ๋ชจ๋ ์์งํ๊ณ , ๊ฐ ์ฅ์ ์ ์ทจํ๋ ์น ์๋น์ค ๊ตฌ์ถ =>
- ํ์์ ๋ฐ๋ผ ๋ง๋ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ ์ ์๋ค.