"ํ๋์ ์ด๋ฒคํธ๊ฐ ๋ค์์ DOM ๋ณ๊ฒฝ"
์น ํ๋ก ํธ์๋ ๊ฐ๋ฐ์์ Rerendering
์น ํ์ด์ง์ ๋ ๋๋ง์ ์ฌ์ฉ์๊ฐ ๋ณด๋ ํ๋ฉด์ ๋ฐ๊พธ๋ ์์ ์ด๋ค. ์ฌ์ฉ์๊ฐ ๋ฒํผ์ ๋๋ฅด๊ฑฐ๋ ํ์ด์ง๋ฅผ ์ด๋ํ ๋, ์น ํ์ด์ง์ ํ๋ฉด์ด ์ด๋ป๊ฒ ๋ณ๊ฒฝ๋ ๊น ?
1. Javascript๋ฅผ ํตํ HTML(DOM) ์ง์ ์กฐ์
์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ๋ฉด HTML์ DOM์ ์ง์ ์กฐ์ํ์ฌ ํ์ด์ง์ ๋ค์ํ ์์๋ฅผ ์ ์ดํ ์ ์๋ค.
์ด๋ฅผ ํตํด ํ๋ฉด์ ๋ค์ํ ๋ณํ๋ฅผ ์ค ์ ์๋ค.
์๋ฐ์คํฌ๋ฆฝํธ๋ DOM์ ์กฐ์ํ์ฌ ํ๋ฉด์ ๋์ ์ผ๋ก ๋ณ๊ฒฝํ๋ค. ํ๋ฉด์ ํน์ ์ด๋ฒคํธ๋ฅผ ๊ฐ์งํ๊ณ , ์ด๋ฒคํธ์ ๋ฐ์ํ์ฌ ํ์ด์ง์ ์์๋ค์ ์ง์ ์กฐ์ํ ์ ์๋ค.
ํ์ง๋ง Javascript๋ฅผ ํตํด ์ง์ DOM์ ๋ณ๊ฒฝํ๋ฉด ์ฌ๋ฌ ๋จ์ ๋ค์ด ์๋ค.
- HTML(DOM) ์์ ํ๋ํ๋์ฉ ์ง์ ์กฐ์์ ๊ฐํด์ผํ๋ค.
- Hard to Manage: ์ผ์ผ DOM์ ๋งค๋ฒ ์ ํํ์ฌ ์กฐ์ํด์ผํจ. (๊ฐ๋ฐ์ด ํ๋ค์ด์ง)
- DOM ์์ ํ๋๊ฐ ๋ฐ๋ ๋๋ง๋ค ๋งค๋ฒ ๋ฐ๋ณต์ ์ธ Rendering Proces
- Render Tree → Layout(Reflow) → Pain(Repaint)
2. jQuery ๋ฑ์ฅ: Javascript๋ฅผ ํตํ DOM์กฐ์์ ์ฝ๊ฒ ๋์์ฃผ๋ "๋ผ์ด๋ธ๋ฌ๋ฆฌ"
์๋ฐ์คํฌ๋ฆฝํธ๋ก DOM์ ์ง์ ์กฐ์ํ๋ ๊ฒ์ด ๋ถํธํ๊ณ ์ฑ๋ฅ ๋ฌธ์ ๊ฐ ์๊ธธ ์ ์๋ค๋ ์ ์ ๋ณด์ํ๊ธฐ ์ํด jQuery๊ฐ ๋ฑ์ฅํ๋ค.
jQuery๋ ์๋ฐ์คํฌ๋ฆฝํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ๋ค์๊ณผ ๊ฐ์ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค.
- DOM ์์์ ์ ํ๊ณผ ์กฐ์์ ๊ฐํธํ๊ฒ ํ ์ ์๋ค.
- ๋ค์ํ ๋ธ๋ผ์ฐ์ ๊ฐ์ ํธํ์ฑ ๋ฌธ์ ๋ฅผ ์ฝ๊ฒ ํด๊ฒฐํ ์ ์๋ค.
ํ์ง๋ง jQuery๋ ํฐ ๊ท๋ชจ์ ์น ์ดํ๋ฆฌ์ผ์ด์ ์์ ํ๊ณ๊ฐ ์กด์ฌํ๋ค. ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด React์ ๊ฐ์ ํ๋ ์์ํฌ๊ฐ ๋ฑ์ฅํ๋ค.
3. React์ ๋ฑ์ฅ: DOM ์กฐ์์ ๋จ์ํ
React๋ Facebook์์ ๊ฐ๋ฐํ ์๋ฐ์คํฌ๋ฆฝํธ ํ๋ ์์ํฌ์ด๋ค. ๋ณต์กํ ์ํ ๋ณํ์ ๋ฐ๋ฅธ ๋ค์์ DOM๋ณ๊ฒฝ์ ํจ์จ์ ์ผ๋ก ์ฒ๋ฆฌํ ์ ์๋ค.
์๋ฅผ๋ค์ด 4๊ฐ์ ์ฌ์ง ๋ฆฌ์คํธ๋ฅผ ๋ณด์ฌ์ฃผ๋ ํ์ด์ง์์ ๋๋ณด๊ธฐ ๋ฒํผ์ ๋๋ ์ ๋ ์ถ๊ฐ 4๊ฐ์ ์ฌ์ง์ ๋ณด์ฌ์ฃผ๋ ๊ฒ์ ์ฌ์ง ๋ฆฌ์คํธ ๋จ์ผ HTML ์์์ ํ๋จ์ ์ถ๊ฐ๋ก ๋ณด์ฌ์ค 4๊ฐ์ ์ฌ์ง ๋ฆฌ์คํธ๋ฅผ ํ๋ฒ์ ์ถ๊ฐ ๋์ดํ๋ฉด๋๋ค.
์ด๋ ํ๋ฒ์ DOM Repaint๋ฅผ ๋ฐ์์ํจ๋ค. ์ผ๋ฐ์ ์ธ ์ผํ๋ชฐ ํํ์ด์ง์ ๊ฐ์ ๊ฒฝ์ฐ์ React๊ฐ ํ์ ์๋ค.
ํ์ง๋ง, ์๋์ ๊ฐ์ด ๋ค์ HTML ์์๊ฐ ๋ฐ๋๋(๋ค์์ DOM Repaint๊ฐ ๋ฐ์ํ๋) ๊ฒฝ์ฐ React๊ฐ ํ์ํ๋ค.
- ํ๋์ ์ด๋ฒคํธ๊ฐ ๋ค์ DOM์ ๋ณ๊ฒฝํ๋ ๊ฒฝ์ฐ
- ํ๋์ ์ด๋ฒคํธ: ์ํ(๋ฐ์ดํฐ, Model) ๋ณ๊ฒฝ(Controller) → ๋ค์ DOM ๋ณ๊ฒฝ = ํ์ด์ง View
- ์ผ๋ฐ ์ผํ๋ชฐ ํํ์ด์ง๊ฐ ์๋๋ผ ํผ๋ ๊ธฐ๋ฐ์ ํํ์ด์ง์์ React๊ฐ ํ์ํ๋ค(์ฑ๊ณผ ๋น์ทํ ์น, ์น์ฑ)
- ํ์ด์ค๋ถ์ ์ฐ๋ฆฌ๊ฐ ๋ณด๊ณ ์๋ ์น ํ์ด์ง์์ ํผ๋๋ ๊ณ์ ๊ฐฑ์ ๋๊ณ , ์๋ฆผ์ด ํ์๋๋ฉฐ, ๋๊ธ ์์ ๋ด์ฉ์ด ๋์ ์ผ๋ก ์ ๋ฐ์ดํธ ๋๋ค. ์ด๋ฌํ ๋์์ ํจ์จ์ ์ผ๋ก ์ฒ๋ฆฌํ๊ธฐ ์ํด React ๊ฐ์ ํ๋ ์์ํฌ๊ฐ ํ์ํ๋ค.
ํ๋ก ํธ์๋ ์๋ฐ์คํฌ๋ฆฝํธ ํ๋ ์์ํฌ๋ ํ๋ฉด์ ๋ ๋๋ง๊ณผ ์ํ ๊ด๋ฆฌ๋ฅผ ๋ณด๋ค ํจ์จ์ ์ผ๋ก ์ฒ๋ฆฌํ๊ธฐ ์ํด ๋ฑ์ฅํ๋ค.
React์ ๊ฐ์ ํ๋ ์์ํฌ๋ DOM์ ์ง์ ์กฐ์ํ๋ ๋ณต์ก์ฑ์ ์ค์ฌ์ฃผ๊ณ SPA(Single Page Application, ๋จ์ผ ํ์ด์ง ์ดํ๋ฆฌ์ผ์ด์ )์ ๊ตฌํ, ๋คํธ์ํฌ ์์ฒญ ์์ด๋ ํ์ด์ง ์ ํ์ ๊ฐ๋ฅํ๊ฒ ํ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค.
๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํ๋ ์์ํฌ
- React = ๋ผ์ด๋ธ๋ฌ๋ฆฌ
- UI ๊ตฌ์ถ์ ์ง์ค๋ ๋๊ตฌ๋ก, ์ปดํฌ๋ํธ ๊ธฐ๋ฐ์ผ๋ก ํ๋ฉด์ ๊ตฌ์ฑํ๋ ์ญํ ์ํ๋ค.
- ๋ฆฌ์กํธ๋ ํน์ ํ ๋ฐฉ์์ ๊ฐ์ ์ฑ์ด ์๊ณ , ๋ค๋ฅธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ํด์ ์์ ๋กญ๊ฒ ๊ฒฐํฉํด์ ์ฌ์ฉํ๋ค.
- ์ ์ฒด ์ดํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ ํ์ง ์์ผ๋ฉฐ, ํ์์ ๋ฐ๋ผ ๋ค์ํ ๋๊ตฌ์ ํจ๊ป ์ฌ์ฉํ ์ ์๋ ์ ์ฐ์ฑ์ ์ ๊ณต.
- Vue, Angular = ํ๋ ์์ํฌ
Next.js๋ ๋ฆฌ์กํธ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ ํ๋ ์์ํฌ๋ก, ๋ฆฌ์กํธ์ ๋จ์ ์ ๋ณด์ํ๋ฉฐ SSR(Server Side Rendering, ์๋ฒ์ฌ์ด๋๋ ๋๋ง), SSG(Static Site Generation, ์ ์ ์ฌ์ดํธ ์์ฑ), Routing System(๋ผ์ฐํ ์์คํ ) ๋ฑ์ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค.
๋ฆฌ์กํธ๋ UI ๊ตฌ์ถ์๋ง ์ง์คํ๋ ๋ฐ๋ฉด, Next.js๋ ์ ์ฒด ์ดํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์กฐ์ ์๋ฒ ์ธก ๊ธฐ๋ฅ๊น์ง ํฌํจํ์ฌ ๊ฐ๋ฐ์๊ฐ ๋น ๋ฅด๊ฒ ํ๋ก์ ํธ๋ฅผ ์์ํ๊ณ ๋ฐฐํฌํ ์ ์๋๋ก ๋๋ ํ๋ ์์ํฌ์ด๋ค.
๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํ๋ ์์ํฌ: ๋ชฉ์ ๋ฐ ์ ์ด๊ถ ์ฐจ์ด
์๋ธ์จ์ด ์์
๋นต ๋ผ์ด๋ธ๋ฌ๋ฆฌ = ์ํธ, ํ์ดํธ , ํ๋ซ
์๋์์น ํ๋ ์์ํฌ = ์ฌ์ด์ฆ → ๋นต → ์น์ฆ → ์ผ์ฑ → ์์ค
๋ผ์ด๋ธ๋ฌ๋ฆฌ
๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์์ธ ๊ตฌํ์ฒด๋ฅผ ์ ๊ณตํ๊ณ , ๊ฐ๋ฐ์๋ ํ์ํ ๊ธฐ๋ฅ์ ์ฌ์ฉ์ ์ํด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ฐ์ ธ์ ์ฝ๋๋ฅผ ํฉ์น๋ค.
๊ฐ๋ฐ์๋ ์์ ์ ์ฝ๋์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ํฉ์ณ์ง๋๋ก ๊ฐ๋ณ ์ค์ ๋ฐ ์ฝ๋ฉ์ด ํ์ํ๋ค.
- ๊ฐ๋ฐ์๊ฐ ์ ์ด: ๊ฐ๋ฐ์๊ฐ ์ง์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ ํํ๊ณ ์ฝ๋์ ์ ์ฉํ๋ค.
- ์ฑ ์: ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ ์ค์ ํ๊ณ ๊ธฐ์กด ์ฝ๋์ ํฉ์น๋ ์ฑ ์์ ๊ฐ๋ฐ์์๊ฒ ์๋ค.
- ์์ ๋กญ๊ฒ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ฒฐํฉํ๊ณ ์ฌ์ฉํ ์ ์์ง๋ง, ํตํฉ ๊ณผ์ ์์์ ๋ณต์ก์ฑ๋ ๊ฐ๋ฐ์๊ฐ ํด๊ฒฐํด์ผํจ.(
๊ณ -ํต)
๊ฒฐ๋ก : ํ๋ฆ ์ ์ด๊ถ = ๊ฐ๋ฐ์์ ๋ชซ
ํ๋ ์์ํฌ
ํ๋ ์์ํฌ๋ ๊ป๋ฐ๊ธฐ๋ง ์ฃผ์ด์ง ๋ฟ ์์ธ ๊ตฌํ์ฒด๋ ๊ฐ๋ฐ์๊ฐ ์ง์ ๊ฐ๋ฐํ๊ฑฐ๋, ๋ค๋ฅธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ ๊ฐ์ ธ์ ๊ฝ๋๋ค.
๊ฐ๋ฐ์ ํฐ ๊ตฌ์กฐ๋ฅผ ์ ๊ณตํ๋ฉฐ, ๊ทธ ์์์ ๊ฐ๋ฐ์๊ฐ ํ์ํ ์ธ๋ถ ๊ตฌํ์ ํ ์ ์๋๋ก ๋๋๋ค.
- ํ๋ ์์ํฌ๊ฐ ์ ์ด: ํ๋ ์์ํฌ๊ฐ ์ ์ฒด์ ์ธ ํ๋ฆ์ ๊ด๋ฆฌํ๊ณ , ๊ฐ๋ฐ์๋ ๊ทธ ์์์ ํ์ํ ๋ถ๋ถ์ ์ฑ์ ๋ฃ๋๋ค.
- IoC(Inversion of Control, ์ ์ด๊ถ์ ์ญ์ ): ์ ์ด๊ถ์ด ๊ฐ๋ฐ์์๊ฒ์ ํ๋ ์์ํฌ๋ก ๋์ด๊ฐ๋ค. ๊ฐ๋ฐ์๋ ํ ์์์ ์ฝ๋๋ฅผ ์์ฑํด์ผ ํ๋ค.
- ํธ๋ฆฌ์ฑ: ํ๋ ์์ํฌ๋ ๋ฏธ๋ฆฌ ์ค์ ๋ ๊ตฌ์กฐ์ ํ๋ฆ์ ์ ๊ณตํ๋ฏ๋ก ๊ฐ๋ฐ์๋ ์ธ๋ถ์ ์ธ ๊ตฌํ๋ง ์ ๊ฒฝ ์ฐ๋ฉด ๋๋ค.
โน๏ธ์ฐธ๊ณ
[ASAC 6๊ธฐ ๊ฐ์์๋ฃ]
'๐ปDEV-STUDY > React' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[React] React์ State, Props, Ref์ ์ญํ (1) | 2024.09.18 |
---|---|
[React] Vite๋ก React ์ด๊ธฐ ์ฑ ์ค์ (2) | 2024.09.18 |
[React] JSX ๋ฌธ๋ฒ + ๋จ๋ฐฉํฅ ๋ฐ์ธ๋ฉ + VDOM (1) | 2024.09.17 |
[React] ๋ ๋๋ง๋ฐฉ์(CSR)๊ณผ ์น ์ดํ๋ฆฌ์ผ์ด์ ๊ตฌ์กฐ(SPA) (1) | 2024.09.17 |