React์ ๋์์ฑ ๋ ๋๋ง ๊ธฐ๋ฅ์ ์ดํด๋ณด๊ณ , ํ๋ ์ ๋๋กญ ๋ฌธ์ ๋ฅผ ์๋ณํ๊ณ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ ๋ฐฐ์ฐ๋ฉฐ, ์ ์ธ๊ณ ์ฌ์ฉ์์๊ฒ ์ํํ ๊ฒฝํ์ ์ ๊ณตํ๋๋ก ์ ํ๋ฆฌ์ผ์ด์ ์ ์ต์ ํํ์ธ์.
React ๋์์ฑ ๋ ๋๋ง: ์ต์ ์ ์ฑ๋ฅ์ ์ํ ํ๋ ์ ๋๋กญ ์ดํด ๋ฐ ์ํ
React์ ๋์์ฑ ๋ ๋๋ง์ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐ์์ฑ๊ณผ ์ฒด๊ฐ ์ฑ๋ฅ์ ํฅ์์ํค๊ธฐ ์ํด ์ค๊ณ๋ ๊ฐ๋ ฅํ ๊ธฐ๋ฅ์ ๋๋ค. ์ด๋ฅผ ํตํด React๋ ๋ฉ์ธ ์ค๋ ๋๋ฅผ ์ฐจ๋จํ์ง ์๊ณ ์ฌ๋ฌ ์์ ์ ๋์์ ์ฒ๋ฆฌํ์ฌ ๋ ๋ถ๋๋ฌ์ด ์ฌ์ฉ์ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๋์์ฑ ๋ ๋๋ง์ ์ฌ์ฉํ๋๋ผ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฌ์ ํ ํ๋ ์ ๋๋กญ์ ๊ฒฝํํ ์ ์์ผ๋ฉฐ, ์ด๋ ๋ฒ๋ฒ ๊ฑฐ๋ฆฌ๋ ์ ๋๋ฉ์ด์ , ์ง์ฐ๋ ์ํธ ์์ฉ, ๊ทธ๋ฆฌ๊ณ ์ ๋ฐ์ ์ผ๋ก ์ข์ง ์์ ์ฌ์ฉ์ ๊ฒฝํ์ผ๋ก ์ด์ด์ง ์ ์์ต๋๋ค. ์ด ๊ธ์์๋ React์ ๋์์ฑ ๋ ๋๋ง์ ๋ณต์ก์ฑ์ ๊น์ด ํ๊ณ ๋ค๊ณ , ํ๋ ์ ๋๋กญ์ ์์ธ์ ํ๊ตฌํ๋ฉฐ, ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ์๋ณํ๊ณ ์ํํ์ฌ ์ ์ธ๊ณ ์ฌ์ฉ์๋ฅผ ์ํ ์ต์ ์ ์ฑ๋ฅ์ ๋ณด์ฅํ๋ ์ค์ฉ์ ์ธ ์ ๋ต์ ์ ๊ณตํฉ๋๋ค.
React ๋์์ฑ ๋ ๋๋ง ์ดํดํ๊ธฐ
์ ํต์ ์ธ React ๋ ๋๋ง์ ๋๊ธฐ์ ์ผ๋ก ์๋ํฉ๋๋ค. ์ฆ, ์ปดํฌ๋ํธ๊ฐ ์ ๋ฐ์ดํธ๋์ด์ผ ํ ๋ ์ ์ฒด ๋ ๋๋ง ํ๋ก์ธ์ค๊ฐ ์๋ฃ๋ ๋๊น์ง ๋ฉ์ธ ์ค๋ ๋๋ฅผ ์ฐจ๋จํฉ๋๋ค. ์ด๋ ํนํ ๋ณต์กํ๊ณ ํฐ ์ปดํฌ๋ํธ ํธ๋ฆฌ๋ฅผ ๊ฐ์ง ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ง์ฐ๊ณผ ๋ฌด์๋ต์ ์ ๋ฐํ ์ ์์ต๋๋ค. React 18์ ๋์ ๋ ๋์์ฑ ๋ ๋๋ง์ ๋ ๋๋ง์ ๋ ์๊ณ ์ค๋จ ๊ฐ๋ฅํ ์์ ์ผ๋ก ๋ถํดํจ์ผ๋ก์จ ๋ ํจ์จ์ ์ธ ์ ๊ทผ ๋ฐฉ์์ ์ ๊ณตํฉ๋๋ค.
์ฃผ์ ๊ฐ๋
- ํ์ ์ฌ๋ผ์ด์ฑ(Time Slicing): React๋ ๋ ๋๋ง ์์ ์ ์์ ๋ฉ์ด๋ฆฌ๋ก ๋๋์ด ๊ฐ ๋ฉ์ด๋ฆฌ ์ฒ๋ฆฌ ํ ๋ธ๋ผ์ฐ์ ์ ์ ์ด๊ถ์ ๋๊ฒจ์ค ์ ์์ต๋๋ค. ์ด๋ฅผ ํตํด ๋ธ๋ผ์ฐ์ ๋ ์ฌ์ฉ์ ์ ๋ ฅ ๋ฐ ์ ๋๋ฉ์ด์ ์ ๋ฐ์ดํธ์ ๊ฐ์ ๋ค๋ฅธ ์์ ์ ์ฒ๋ฆฌํ ์ ์์ด UI๊ฐ ๋ฉ์ถ๋ ๊ฒ์ ๋ฐฉ์งํฉ๋๋ค.
- ์ค๋จ(Interruptions): React๋ ์ฌ์ฉ์ ์ํธ ์์ฉ๊ณผ ๊ฐ์ด ๋ ๋์ ์ฐ์ ์์์ ์์ ์ ์ฒ๋ฆฌํด์ผ ํ ๊ฒฝ์ฐ ์งํ ์ค์ธ ๋ ๋๋ง ํ๋ก์ธ์ค๋ฅผ ์ค๋จํ ์ ์์ต๋๋ค. ์ด๋ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ฌ์ฉ์ ์์ ์ ๊ณ์ ๋ฐ์ํ๋๋ก ๋ณด์ฅํฉ๋๋ค.
- Suspense: Suspense๋ ์ปดํฌ๋ํธ๊ฐ ๋ฐ์ดํฐ๋ฅผ ๋ก๋ํ๋ ๋์ ๋ ๋๋ง์ "์ผ์ ์ค๋จ"ํ ์ ์๊ฒ ํด์ค๋๋ค. ๊ทธ๋ฌ๋ฉด React๋ ๋ฐ์ดํฐ๊ฐ ์ฌ์ฉ ๊ฐ๋ฅํด์ง ๋๊น์ง ๋ก๋ฉ ํ์๊ธฐ์ ๊ฐ์ ๋์ฒด UI๋ฅผ ํ์ํ ์ ์์ต๋๋ค. ์ด๋ ๋ฐ์ดํฐ ๋๊ธฐ ์ค UI๊ฐ ์ฐจ๋จ๋๋ ๊ฒ์ ๋ฐฉ์งํ์ฌ ์ฒด๊ฐ ์ฑ๋ฅ์ ํฅ์์ํต๋๋ค.
- Transitions: Transitions๋ ๊ฐ๋ฐ์๊ฐ ํน์ ์ ๋ฐ์ดํธ๋ฅผ ๋ ๊ธด๊ธํ ๊ฒ์ผ๋ก ํ์ํ ์ ์๊ฒ ํด์ค๋๋ค. React๋ (์ง์ ์ ์ธ ์ฌ์ฉ์ ์ํธ ์์ฉ๊ณผ ๊ฐ์) ๊ธด๊ธํ ์ ๋ฐ์ดํธ๋ฅผ transitions๋ณด๋ค ์ฐ์ ์ํ์ฌ ์ฑ์ ๋ฐ์์ฑ์ ์ ์งํฉ๋๋ค.
์ด๋ฌํ ๊ธฐ๋ฅ๋ค์ ์งํฉ์ ์ผ๋ก ๋ ์ ์ฐํ๊ณ ๋ฐ์์ฑ์ด ๋ฐ์ด๋ ์ฌ์ฉ์ ๊ฒฝํ์ ๊ธฐ์ฌํ๋ฉฐ, ํนํ ์ ๋ฐ์ดํธ๊ฐ ์ฆ๊ณ ๋ณต์กํ UI๋ฅผ ๊ฐ์ง ์ ํ๋ฆฌ์ผ์ด์ ์์ ๋์ฑ ๊ทธ๋ ์ต๋๋ค.
ํ๋ ์ ๋๋กญ์ด๋ ๋ฌด์์ธ๊ฐ?
ํ๋ ์ ๋๋กญ์ ๋ธ๋ผ์ฐ์ ๊ฐ ์ํ๋ ํ๋ ์ ์๋(์ผ๋ฐ์ ์ผ๋ก ์ด๋น 60ํ๋ ์(FPS) ์ด์)๋ก ํ๋ ์์ ๋ ๋๋งํ ์ ์์ ๋ ๋ฐ์ํฉ๋๋ค. ์ด๋ ๋์ ๋ณด์ด๋ ๋๊น, ์ง์ฐ, ๊ทธ๋ฆฌ๊ณ ์ ๋ฐ์ ์ผ๋ก ๊ฑฐ์ฌ๋ฆฌ๋ ์ฌ์ฉ์ ๊ฒฝํ์ ์ด๋ํฉ๋๋ค. ๊ฐ ํ๋ ์์ ํน์ ์์ ์ UI ์ค๋ ์ท์ ๋ํ๋ ๋๋ค. ๋ธ๋ผ์ฐ์ ๊ฐ ํ๋ฉด์ ์ถฉ๋ถํ ๋น ๋ฅด๊ฒ ์ ๋ฐ์ดํธํ ์ ์์ผ๋ฉด ํ๋ ์์ ๊ฑด๋๋ฐ๊ฒ ๋์ด ์ด๋ฌํ ์๊ฐ์ ๋ถ์์ ์ฑ์ด ๋ฐ์ํฉ๋๋ค.
๋ชฉํ ํ๋ ์ ์๋ 60 FPS๋ ํ๋ ์๋น ์ฝ 16.67๋ฐ๋ฆฌ์ด์ ๋ ๋๋ง ์์ฐ์ ์๋ฏธํฉ๋๋ค. ๋ธ๋ผ์ฐ์ ๊ฐ ํ๋ ์์ ๋ ๋๋งํ๋ ๋ฐ ์ด๋ณด๋ค ์ค๋ ๊ฑธ๋ฆฌ๋ฉด ํ๋ ์์ด ๋๋กญ๋ฉ๋๋ค.
React ์ ํ๋ฆฌ์ผ์ด์ ์์ ํ๋ ์ ๋๋กญ์ ์์ธ
๋์์ฑ ๋ ๋๋ง์ ์ฌ์ฉํ๋๋ผ๋ React ์ ํ๋ฆฌ์ผ์ด์ ์์ ํ๋ ์ ๋๋กญ์ ๊ธฐ์ฌํ ์ ์๋ ๋ช ๊ฐ์ง ์์ธ์ด ์์ต๋๋ค:
- ๋ณต์กํ ์ปดํฌ๋ํธ ์ ๋ฐ์ดํธ: ํฌ๊ณ ๋ณต์กํ ์ปดํฌ๋ํธ ํธ๋ฆฌ๋ ๋ ๋๋งํ๋ ๋ฐ ์๋นํ ์๊ฐ์ด ๊ฑธ๋ ค ์ฌ์ฉ ๊ฐ๋ฅํ ํ๋ ์ ์์ฐ์ ์ด๊ณผํ ์ ์์ต๋๋ค.
- ๋น์ฉ์ด ํฐ ๊ณ์ฐ: ๋ ๋๋ง ํ๋ก์ธ์ค ๋ด์์ ๋ณต์กํ ๋ฐ์ดํฐ ๋ณํ์ด๋ ์ด๋ฏธ์ง ์ฒ๋ฆฌ์ ๊ฐ์ ๊ณ์ฐ ์ง์ฝ์ ์ธ ์์ ์ ์ํํ๋ฉด ๋ฉ์ธ ์ค๋ ๋๊ฐ ์ฐจ๋จ๋ ์ ์์ต๋๋ค.
- ์ต์ ํ๋์ง ์์ DOM ์กฐ์: ์ฆ๊ฑฐ๋ ๋นํจ์จ์ ์ธ DOM ์กฐ์์ ์ฑ๋ฅ ๋ณ๋ชฉ ํ์์ ์ผ์ผํฌ ์ ์์ต๋๋ค. React์ ๋ ๋๋ง ์ฃผ๊ธฐ ์ธ๋ถ์์ ์ง์ DOM์ ์กฐ์ํ๋ ๊ฒ๋ ๋ถ์ผ์น์ ์ฑ๋ฅ ๋ฌธ์ ๋ก ์ด์ด์ง ์ ์์ต๋๋ค.
- ๊ณผ๋ํ ๋ฆฌ๋ ๋๋ง: ๋ถํ์ํ ์ปดํฌ๋ํธ ๋ฆฌ๋ ๋๋ง์ ์ถ๊ฐ์ ์ธ ๋ ๋๋ง ์์ ์ ์ ๋ฐํ์ฌ ํ๋ ์ ๋๋กญ ๊ฐ๋ฅ์ฑ์ ๋์ ๋๋ค. ์ด๋ ์ข ์ข `React.memo`, `useMemo`, `useCallback`์ ๋ถ์ ์ ํ ์ฌ์ฉ์ด๋ `useEffect` ํ ์ ์๋ชป๋ ์์กด์ฑ ๋ฐฐ์ด๋ก ์ธํด ๋ฐ์ํฉ๋๋ค.
- ๋ฉ์ธ ์ค๋ ๋์์์ ์ฅ๊ธฐ ์คํ ์์ : ๋คํธ์ํฌ ์์ฒญ์ด๋ ๋๊ธฐ์ ์์ ๊ณผ ๊ฐ์ด ์ฅ์๊ฐ ๋ฉ์ธ ์ค๋ ๋๋ฅผ ์ฐจ๋จํ๋ JavaScript ์ฝ๋๋ ๋ธ๋ผ์ฐ์ ๊ฐ ํ๋ ์์ ๋์น๊ฒ ํ ์ ์์ต๋๋ค.
- ์๋ํํฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ: ๋นํจ์จ์ ์ด๊ฑฐ๋ ์ ๋๋ก ์ต์ ํ๋์ง ์์ ์๋ํํฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ฑ๋ฅ ๋ณ๋ชฉ ํ์์ ์ ๋ฐํ๊ณ ํ๋ ์ ๋๋กญ์ ๊ธฐ์ฌํ ์ ์์ต๋๋ค.
- ๋ธ๋ผ์ฐ์ ์ ํ: ๋นํจ์จ์ ์ธ ๊ฐ๋น์ง ์ปฌ๋ ์ ์ด๋ ๋๋ฆฐ CSS ๊ณ์ฐ๊ณผ ๊ฐ์ ํน์ ๋ธ๋ผ์ฐ์ ๊ธฐ๋ฅ์ด๋ ์ ํ๋ ๋ ๋๋ง ์ฑ๋ฅ์ ์ํฅ์ ์ค ์ ์์ต๋๋ค. ์ด๋ ๋ธ๋ผ์ฐ์ ์ ๊ธฐ๊ธฐ์ ๋ฐ๋ผ ๋ค๋ฅผ ์ ์์ต๋๋ค.
- ๊ธฐ๊ธฐ ์ ํ: ์ ํ๋ฆฌ์ผ์ด์ ์ด ๊ณ ์ฌ์ ๊ธฐ๊ธฐ์์๋ ์๋ฒฝํ๊ฒ ์๋ํ์ง๋ง ๊ตฌํ ๋๋ ์ ์ฌ์ ๊ธฐ๊ธฐ์์๋ ํ๋ ์ ๋๋กญ์ด ๋ฐ์ํ ์ ์์ต๋๋ค. ๋ค์ํ ๊ธฐ๊ธฐ ์ฑ๋ฅ์ ๋ง์ถฐ ์ต์ ํํ๋ ๊ฒ์ ๊ณ ๋ คํด์ผ ํฉ๋๋ค.
ํ๋ ์ ๋๋กญ ์๋ณํ๊ธฐ: ๋๊ตฌ์ ๊ธฐ๋ฒ
ํ๋ ์ ๋๋กญ์ ํด๊ฒฐํ๋ ์ฒซ ๋ฒ์งธ ๋จ๊ณ๋ ๊ทธ ์กด์ฌ๋ฅผ ์๋ณํ๊ณ ๊ทผ๋ณธ ์์ธ์ ์ดํดํ๋ ๊ฒ์ ๋๋ค. ์ด๋ฅผ ๋๋ ์ฌ๋ฌ ๋๊ตฌ์ ๊ธฐ๋ฒ์ด ์์ต๋๋ค:
React ํ๋กํ์ผ๋ฌ
React ๊ฐ๋ฐ์ ๋๊ตฌ์์ ์ฌ์ฉํ ์ ์๋ React ํ๋กํ์ผ๋ฌ๋ React ์ปดํฌ๋ํธ์ ์ฑ๋ฅ์ ๋ถ์ํ๋ ๊ฐ๋ ฅํ ๋๊ตฌ์ ๋๋ค. ๋ ๋๋ง ์ฑ๋ฅ์ ๊ธฐ๋กํ๊ณ ๋ ๋๋ง์ ๊ฐ์ฅ ์ค๋ ๊ฑธ๋ฆฌ๋ ์ปดํฌ๋ํธ๋ฅผ ์๋ณํ ์ ์์ต๋๋ค.
React ํ๋กํ์ผ๋ฌ ์ฌ์ฉํ๊ธฐ:
- ๋ธ๋ผ์ฐ์ ์์ React ๊ฐ๋ฐ์ ๋๊ตฌ๋ฅผ ์ฝ๋๋ค.
- "Profiler" ํญ์ ์ ํํฉ๋๋ค.
- "Record" ๋ฒํผ์ ํด๋ฆญํ์ฌ ํ๋กํ์ผ๋ง์ ์์ํฉ๋๋ค.
- ๋ถ์ํ๋ ค๋ ๋ ๋๋ง ํ๋ก์ธ์ค๋ฅผ ํธ๋ฆฌ๊ฑฐํ๊ธฐ ์ํด ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ์ํธ ์์ฉํฉ๋๋ค.
- "Stop" ๋ฒํผ์ ํด๋ฆญํ์ฌ ํ๋กํ์ผ๋ง์ ์ค์งํฉ๋๋ค.
- ๊ธฐ๋ก๋ ๋ฐ์ดํฐ๋ฅผ ๋ถ์ํ์ฌ ์ฑ๋ฅ ๋ณ๋ชฉ ํ์์ ์๋ณํฉ๋๋ค. "ranked" ๋ฐ "flamegraph" ๋ทฐ์ ์ฃผ์๋ฅผ ๊ธฐ์ธ์ด์ธ์.
๋ธ๋ผ์ฐ์ ๊ฐ๋ฐ์ ๋๊ตฌ
๋ธ๋ผ์ฐ์ ๊ฐ๋ฐ์ ๋๊ตฌ๋ ์น ์ฑ๋ฅ ๋ถ์์ ์ํ ๋ค์ํ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค. ์ฌ๊ธฐ์๋ ๋ค์์ด ํฌํจ๋ฉ๋๋ค:
- Performance ํญ: Performance ํญ์์๋ ๋ ๋๋ง, ์คํฌ๋ฆฝํ , ๋คํธ์ํฌ ์์ฒญ์ ํฌํจํ ๋ธ๋ผ์ฐ์ ํ๋์ ํ์๋ผ์ธ์ ๊ธฐ๋กํ ์ ์์ต๋๋ค. ์ด๋ React ์์ฒด ์ธ๋ถ์์ ์ฅ๊ธฐ ์คํ ์์ ๊ณผ ์ฑ๋ฅ ๋ณ๋ชฉ ํ์์ ์๋ณํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
- ์ด๋น ํ๋ ์ ์(FPS) ๋ฏธํฐ: FPS ๋ฏธํฐ๋ ํ๋ ์ ์๋๋ฅผ ์ค์๊ฐ์ผ๋ก ํ์ํฉ๋๋ค. FPS์ ํ๋ฝ์ ์ ์ฌ์ ์ธ ํ๋ ์ ๋๋กญ์ ๋ํ๋ ๋๋ค.
- Rendering ํญ: Rendering ํญ(Chrome ๊ฐ๋ฐ์ ๋๊ตฌ)์์๋ ๋ค์ ์น ํด์ง๋ ํ๋ฉด ์์ญ์ ๊ฐ์กฐ ํ์ํ๊ณ , ๋ ์ด์์ ์ด๋์ ์๋ณํ๋ฉฐ, ๊ธฐํ ๋ ๋๋ง ๊ด๋ จ ์ฑ๋ฅ ๋ฌธ์ ๋ฅผ ๊ฐ์งํ ์ ์์ต๋๋ค. "Paint flashing" ๋ฐ "Layout Shift Regions"์ ๊ฐ์ ๊ธฐ๋ฅ์ด ๋งค์ฐ ์ ์ฉํ ์ ์์ต๋๋ค.
์ฑ๋ฅ ๋ชจ๋ํฐ๋ง ๋๊ตฌ
์ฌ๋ฌ ์๋ํํฐ ์ฑ๋ฅ ๋ชจ๋ํฐ๋ง ๋๊ตฌ๋ ์ค์ ์๋๋ฆฌ์ค์์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฑ๋ฅ์ ๋ํ ํต์ฐฐ๋ ฅ์ ์ ๊ณตํ ์ ์์ต๋๋ค. ์ด๋ฌํ ๋๊ตฌ๋ ์ข ์ข ๋ค์๊ณผ ๊ฐ์ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค:
- ์ค์ ์ฌ์ฉ์ ๋ชจ๋ํฐ๋ง(RUM): ์ค์ ์ฌ์ฉ์๋ก๋ถํฐ ์ฑ๋ฅ ๋ฐ์ดํฐ๋ฅผ ์์งํ์ฌ ์ฌ์ฉ์ ๊ฒฝํ์ ๋ ์ ํํ๊ฒ ๋ํ๋ ๋๋ค.
- ์ค๋ฅ ์ถ์ : ์ฑ๋ฅ์ ์ํฅ์ ๋ฏธ์น ์ ์๋ JavaScript ์ค๋ฅ๋ฅผ ์๋ณํ๊ณ ์ถ์ ํฉ๋๋ค.
- ์ฑ๋ฅ ์๋ฆผ: ์ฑ๋ฅ ์งํ๊ฐ ๋ฏธ๋ฆฌ ์ ์๋ ์๊ณ๊ฐ์ ์ด๊ณผํ ๋ ์๋ฆผ์ ๋ฐ๋๋ก ์ค์ ํฉ๋๋ค.
์ฑ๋ฅ ๋ชจ๋ํฐ๋ง ๋๊ตฌ์ ์๋ก๋ New Relic, Sentry, Datadog์ด ์์ต๋๋ค.
์์: React ํ๋กํ์ผ๋ฌ๋ฅผ ์ฌ์ฉํ์ฌ ๋ณ๋ชฉ ํ์ ์๋ณํ๊ธฐ
ํฐ ํญ๋ชฉ ๋ชฉ๋ก์ ๋ ๋๋งํ๋ ๋ณต์กํ ์ปดํฌ๋ํธ๊ฐ ์๋ค๊ณ ์์ํด ๋ณด์ธ์. ์ฌ์ฉ์๋ค์ด ์ด ๋ชฉ๋ก์ ์คํฌ๋กคํ ๋ ๋ฒ๋ฒ ๊ฑฐ๋ฆฌ๊ณ ๋ฐ์์ด ์๋ค๊ณ ๋ณด๊ณ ํฉ๋๋ค.
- React ํ๋กํ์ผ๋ฌ๋ฅผ ์ฌ์ฉํ์ฌ ๋ชฉ๋ก์ ์คํฌ๋กคํ๋ ๋์ ์ธ์ ์ ๊ธฐ๋กํฉ๋๋ค.
- ํ๋กํ์ผ๋ฌ์ ์์ ์ฐจํธ(ranked chart)๋ฅผ ๋ถ์ํฉ๋๋ค. ํน์ ์ปดํฌ๋ํธ์ธ `ListItem`์ด ๋ชฉ๋ก์ ๊ฐ ํญ๋ชฉ์ ๋ํด ๋ ๋๋งํ๋ ๋ฐ ์ง์์ ์ผ๋ก ์ค๋ ์๊ฐ์ด ๊ฑธ๋ฆฌ๋ ๊ฒ์ ๋ฐ๊ฒฌํฉ๋๋ค.
- `ListItem` ์ปดํฌ๋ํธ์ ์ฝ๋๋ฅผ ๊ฒ์ฌํฉ๋๋ค. ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ๋์ง ์์์์๋ ๋ถ๊ตฌํ๊ณ ๊ฐ ๋ ๋๋ง๋ง๋ค ๊ณ์ฐ ๋น์ฉ์ด ํฐ ๊ณ์ฐ์ ์ํํ๋ค๋ ๊ฒ์ ๋ฐ๊ฒฌํฉ๋๋ค.
์ด ๋ถ์์ ์ต์ ํ๊ฐ ํ์ํ ์ฝ๋์ ํน์ ์์ญ์ ๊ฐ๋ฆฌํต๋๋ค. ์ด ๊ฒฝ์ฐ `useMemo`๋ฅผ ์ฌ์ฉํ์ฌ ๋น์ฉ์ด ํฐ ๊ณ์ฐ์ ๋ฉ๋ชจ์ด์ ์ด์ ํ์ฌ ๋ถํ์ํ๊ฒ ์ฌ์คํ๋๋ ๊ฒ์ ๋ฐฉ์งํ ์ ์์ต๋๋ค.
ํ๋ ์ ๋๋กญ ์ํ ์ ๋ต
ํ๋ ์ ๋๋กญ์ ์์ธ์ ์๋ณํ ํ์๋ ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ์ํํ๊ณ ์ฑ๋ฅ์ ํฅ์์ํค๊ธฐ ์ํด ๋ค์ํ ์ ๋ต์ ๊ตฌํํ ์ ์์ต๋๋ค:
1. ์ปดํฌ๋ํธ ์ ๋ฐ์ดํธ ์ต์ ํ
- ๋ฉ๋ชจ์ด์ ์ด์ (Memoization): `React.memo`, `useMemo`, `useCallback`์ ์ฌ์ฉํ์ฌ ์ปดํฌ๋ํธ์ ๋ถํ์ํ ๋ฆฌ๋ ๋๋ง๊ณผ ๋น์ฉ์ด ํฐ ๊ณ์ฐ์ ๋ฐฉ์งํฉ๋๋ค. ์๊ธฐ์น ์์ ๋์์ ํผํ๊ธฐ ์ํด ์์กด์ฑ ๋ฐฐ์ด์ ์ฌ๋ฐ๋ฅด๊ฒ ์ง์ ํด์ผ ํฉ๋๋ค.
- ๊ฐ์ํ(Virtualization): ํฐ ๋ชฉ๋ก์ด๋ ํ ์ด๋ธ์ ๊ฒฝ์ฐ `react-window`๋ `react-virtualized`์ ๊ฐ์ ๊ฐ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ๋ณด์ด๋ ํญ๋ชฉ๋ง ๋ ๋๋งํฉ๋๋ค. ์ด๋ ํ์ํ DOM ์กฐ์์ ์์ ํฌ๊ฒ ์ค์ ๋๋ค.
- ์ฝ๋ ์คํ๋ฆฌํ (Code Splitting): ์ ํ๋ฆฌ์ผ์ด์ ์ ํ์์ ๋ฐ๋ผ ๋ก๋ํ ์ ์๋ ๋ ์์ ์ฒญํฌ๋ก ๋๋๋๋ค. ์ด๋ ์ด๊ธฐ ๋ก๋ ์๊ฐ์ ์ค์ด๊ณ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐ์์ฑ์ ํฅ์์ํต๋๋ค. ์ปดํฌ๋ํธ ์์ค ์ฝ๋ ์คํ๋ฆฌํ ์๋ React.lazy์ Suspense๋ฅผ ์ฌ์ฉํ๊ณ , ๋ผ์ฐํธ ๊ธฐ๋ฐ ์ฝ๋ ์คํ๋ฆฌํ ์๋ Webpack์ด๋ Parcel๊ณผ ๊ฐ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
- ๋ถ๋ณ์ฑ(Immutability): ๋ถํ์ํ ๋ฆฌ๋ ๋๋ง์ ์ ๋ฐํ ์ ์๋ ์ฐ๋ฐ์ ์ธ ๋ฐ์ดํฐ ๋ณ๊ฒฝ์ ํผํ๊ธฐ ์ํด ๋ถ๋ณ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํฉ๋๋ค. Immer์ ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋ถ๋ณ ๋ฐ์ดํฐ ์์ ์ ๋จ์ํํ๋ ๋ฐ ๋์์ด ๋ ์ ์์ต๋๋ค.
2. ๋น์ฉ์ด ํฐ ๊ณ์ฐ ์ค์ด๊ธฐ
- ๋๋ฐ์ด์ฑ(Debouncing) ๋ฐ ์ค๋กํ๋ง(Throttling): ๋๋ฐ์ด์ฑ๊ณผ ์ค๋กํ๋ง์ ์ฌ์ฉํ์ฌ ์ด๋ฒคํธ ํธ๋ค๋ฌ๋ API ํธ์ถ๊ณผ ๊ฐ์ ๋น์ฉ์ด ํฐ ์์ ์ ๋น๋๋ฅผ ์ ํํฉ๋๋ค. ์ด๋ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ฆ์ ์ ๋ฐ์ดํธ๋ก ์ธํด ๊ณผ๋ถํ๋๋ ๊ฒ์ ๋ฐฉ์งํฉ๋๋ค.
- ์น ์์ปค(Web Workers): ๊ณ์ฐ ์ง์ฝ์ ์ธ ์์ ์ ๋ณ๋์ ์ค๋ ๋์์ ์คํ๋๊ณ ๋ฉ์ธ ์ค๋ ๋๋ฅผ ์ฐจ๋จํ์ง ์๋ ์น ์์ปค๋ก ์ฎ๊น๋๋ค. ์ด๋ฅผ ํตํด ๋ฐฑ๊ทธ๋ผ์ด๋ ์์ ์ด ์ํ๋๋ ๋์ UI๊ฐ ๋ฐ์์ฑ์ ์ ์งํ ์ ์์ต๋๋ค.
- ์บ์ฑ(Caching): ์์ฃผ ์ก์ธ์คํ๋ ๋ฐ์ดํฐ๋ฅผ ์บ์ํ์ฌ ๋ชจ๋ ๋ ๋๋ง์์ ๋ค์ ๊ณ์ฐํ๋ ๊ฒ์ ํผํฉ๋๋ค. ์์ฃผ ๋ณ๊ฒฝ๋์ง ์๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ธฐ ์ํด ์ธ๋ฉ๋ชจ๋ฆฌ ์บ์๋ ๋ก์ปฌ ์คํ ๋ฆฌ์ง๋ฅผ ์ฌ์ฉํฉ๋๋ค.
3. DOM ์กฐ์ ์ต์ ํ
- ์ง์ ์ ์ธ DOM ์กฐ์ ์ต์ํ: React์ ๋ ๋๋ง ์ฃผ๊ธฐ ์ธ๋ถ์์ ์ง์ DOM์ ์กฐ์ํ๋ ๊ฒ์ ํผํฉ๋๋ค. ์ผ๊ด์ฑ๊ณผ ํจ์จ์ฑ์ ๋ณด์ฅํ๊ธฐ ์ํด ๊ฐ๋ฅํ๋ฉด React๊ฐ DOM ์ ๋ฐ์ดํธ๋ฅผ ์ฒ๋ฆฌํ๋๋ก ํฉ๋๋ค.
- ์ ๋ฐ์ดํธ ์ผ๊ด ์ฒ๋ฆฌ(Batch Updates): `ReactDOM.flushSync`(๋๋ฌผ๊ฒ ์ ์คํ๊ฒ ์ฌ์ฉ!)๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ๋ฌ ์ ๋ฐ์ดํธ๋ฅผ ๋จ์ผ ๋ ๋๋ง์ผ๋ก ์ผ๊ด ์ฒ๋ฆฌํฉ๋๋ค. ์ด๋ ์ฌ๋ฌ DOM์ ๋์์ ๋ณ๊ฒฝํ ๋ ์ฑ๋ฅ์ ํฅ์์ํฌ ์ ์์ต๋๋ค.
4. ์ฅ๊ธฐ ์คํ ์์ ๊ด๋ฆฌ
- ๋น๋๊ธฐ ์์ : `async/await` ๋ฐ Promises์ ๊ฐ์ ๋น๋๊ธฐ ์์ ์ ์ฌ์ฉํ์ฌ ๋ฉ์ธ ์ค๋ ๋๋ฅผ ์ฐจ๋จํ๋ ๊ฒ์ ํผํฉ๋๋ค. ๋คํธ์ํฌ ์์ฒญ ๋ฐ ๊ธฐํ I/O ์์ ์ด ๋น๋๊ธฐ์ ์ผ๋ก ์ํ๋๋๋ก ํฉ๋๋ค.
- RequestAnimationFrame: `requestAnimationFrame`์ ์ฌ์ฉํ์ฌ ์ ๋๋ฉ์ด์ ๋ฐ ๊ธฐํ ์๊ฐ์ ์ ๋ฐ์ดํธ๋ฅผ ์์ฝํฉ๋๋ค. ์ด๋ ์ ๋ฐ์ดํธ๊ฐ ๋ธ๋ผ์ฐ์ ์ ์๋ก๊ณ ์นจ ๋น๋์ ๋๊ธฐํ๋์ด ๋ ๋ถ๋๋ฌ์ด ์ ๋๋ฉ์ด์ ์ ๋ง๋ญ๋๋ค.
5. ์๋ํํฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ต์ ํ
- ์ ์คํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ ํ: ์ ์ต์ ํ๋๊ณ ์ฑ๋ฅ์ผ๋ก ์๋ ค์ง ์๋ํํฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ ํํฉ๋๋ค. ์ฉ๋์ด ํฌ๊ฑฐ๋ ์ฑ๋ฅ ๋ฌธ์ ๊ฐ ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ํผํฉ๋๋ค.
- ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ง์ฐ ๋ก๋ฉ(Lazy Load): ์๋ํํฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํ ๋ฒ์ ๋ชจ๋ ๋ก๋ํ๋ ๋์ ํ์ํ ๋ ๋ก๋ํฉ๋๋ค. ์ด๋ ์ด๊ธฐ ๋ก๋ ์๊ฐ์ ์ค์ด๊ณ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ๋ฐ์ ์ธ ์ฑ๋ฅ์ ํฅ์์ํต๋๋ค.
- ์ ๊ธฐ์ ์ธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ ๋ฐ์ดํธ: ์ฑ๋ฅ ๊ฐ์ ๋ฐ ๋ฒ๊ทธ ์์ ์ ํ์ฉํ๊ธฐ ์ํด ์๋ํํฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ต์ ์ํ๋ก ์ ์งํฉ๋๋ค.
6. ๊ธฐ๊ธฐ ์ฑ๋ฅ ๋ฐ ๋คํธ์ํฌ ์กฐ๊ฑด ๊ณ ๋ ค
- ์ ์ํ ๋ ๋๋ง(Adaptive Rendering): ๊ธฐ๊ธฐ์ ์ฑ๋ฅ๊ณผ ๋คํธ์ํฌ ์กฐ๊ฑด์ ๋ฐ๋ผ UI์ ๋ณต์ก์ฑ์ ์กฐ์ ํ๋ ์ ์ํ ๋ ๋๋ง ๊ธฐ์ ์ ๊ตฌํํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ์ ์ฌ์ ๊ธฐ๊ธฐ์์๋ ์ด๋ฏธ์ง ํด์๋๋ฅผ ๋ฎ์ถ๊ฑฐ๋ ์ ๋๋ฉ์ด์ ์ ๋จ์ํํ ์ ์์ต๋๋ค.
- ๋คํธ์ํฌ ์ต์ ํ: ๋๊ธฐ ์๊ฐ์ ์ค์ด๊ณ ๋ก๋ฉ ์๊ฐ์ ๊ฐ์ ํ๊ธฐ ์ํด ์ ํ๋ฆฌ์ผ์ด์ ์ ๋คํธ์ํฌ ์์ฒญ์ ์ต์ ํํฉ๋๋ค. ์ฝํ ์ธ ์ ์ก ๋คํธ์ํฌ(CDN), ์ด๋ฏธ์ง ์ต์ ํ, HTTP ์บ์ฑ๊ณผ ๊ฐ์ ๊ธฐ์ ์ ์ฌ์ฉํฉ๋๋ค.
- ์ ์ง์ ํฅ์(Progressive Enhancement): ์ ์ง์ ํฅ์์ ์ผ๋์ ๋๊ณ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ์ฌ ๊ตฌํ ๋๋ ์ฑ๋ฅ์ด ๋ฎ์ ๊ธฐ๊ธฐ์์๋ ๊ธฐ๋ณธ์ ์ธ ์์ค์ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋๋ก ํฉ๋๋ค.
์์: ๋๋ฆฐ ๋ชฉ๋ก ์ปดํฌ๋ํธ ์ต์ ํํ๊ธฐ
๋๋ฆฐ ๋ชฉ๋ก ์ปดํฌ๋ํธ ์์๋ก ๋์๊ฐ ๋ด ์๋ค. `ListItem` ์ปดํฌ๋ํธ๋ฅผ ๋ณ๋ชฉ ํ์์ผ๋ก ์๋ณํ ํ ๋ค์๊ณผ ๊ฐ์ ์ต์ ํ๋ฅผ ์ ์ฉํ ์ ์์ต๋๋ค:
- `ListItem` ์ปดํฌ๋ํธ ๋ฉ๋ชจ์ด์ ์ด์ : `React.memo`๋ฅผ ์ฌ์ฉํ์ฌ ํญ๋ชฉ ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ๋์ง ์์์ ๋ ๋ฆฌ๋ ๋๋ง์ ๋ฐฉ์งํฉ๋๋ค.
- ๋น์ฉ์ด ํฐ ๊ณ์ฐ ๋ฉ๋ชจ์ด์ ์ด์ : `useMemo`๋ฅผ ์ฌ์ฉํ์ฌ ๋น์ฉ์ด ํฐ ๊ณ์ฐ ๊ฒฐ๊ณผ๋ฅผ ์บ์ํฉ๋๋ค.
- ๋ชฉ๋ก ๊ฐ์ํ: `react-window` ๋๋ `react-virtualized`๋ฅผ ์ฌ์ฉํ์ฌ ๋ณด์ด๋ ํญ๋ชฉ๋ง ๋ ๋๋งํฉ๋๋ค.
์ด๋ฌํ ์ต์ ํ๋ฅผ ๊ตฌํํจ์ผ๋ก์จ ๋ชฉ๋ก ์ปดํฌ๋ํธ์ ์ฑ๋ฅ์ ํฌ๊ฒ ํฅ์์ํค๊ณ ํ๋ ์ ๋๋กญ์ ์ค์ผ ์ ์์ต๋๋ค.
์ ์ธ๊ณ ์ฌ์ฉ์๋ฅผ ์ํ ๊ณ ๋ ค์ฌํญ
์ ์ธ๊ณ ์ฌ์ฉ์๋ฅผ ์ํด React ์ ํ๋ฆฌ์ผ์ด์ ์ ์ต์ ํํ ๋๋ ๋คํธ์ํฌ ๋๊ธฐ ์๊ฐ, ๊ธฐ๊ธฐ ์ฑ๋ฅ, ์ธ์ด ํ์งํ์ ๊ฐ์ ์์๋ฅผ ๊ณ ๋ คํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
- ๋คํธ์ํฌ ๋๊ธฐ ์๊ฐ: ์ธ๊ณ ๊ฐ์ง์ ์ฌ์ฉ์๋ ๋ค๋ฅธ ๋คํธ์ํฌ ๋๊ธฐ ์๊ฐ์ ๊ฒฝํํ ์ ์์ต๋๋ค. CDN์ ์ฌ์ฉํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ ์์ฐ์ ์ ์ธ๊ณ์ ๋ฐฐํฌํ๊ณ ๋๊ธฐ ์๊ฐ์ ์ค์ ๋๋ค.
- ๊ธฐ๊ธฐ ์ฑ๋ฅ: ์ฌ์ฉ์๋ ์ฒ๋ฆฌ ๋ฅ๋ ฅ์ด ์ ํ๋ ๊ตฌํ ์ค๋งํธํฐ ๋ฐ ํ๋ธ๋ฆฟ์ ํฌํจํ ๋ค์ํ ๊ธฐ๊ธฐ์์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ก์ธ์คํ ์ ์์ต๋๋ค. ๋ค์ํ ๊ธฐ๊ธฐ ์ฑ๋ฅ์ ๋ง๊ฒ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ต์ ํํฉ๋๋ค.
- ์ธ์ด ํ์งํ: ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋ค๋ฅธ ์ธ์ด ๋ฐ ์ง์ญ์ ๋ง๊ฒ ์ ์ ํ ํ์งํ๋์๋์ง ํ์ธํฉ๋๋ค. ์ฌ๊ธฐ์๋ ํ ์คํธ ๋ฒ์ญ, ๋ ์ง ๋ฐ ์ซ์ ์์ ์ง์ , ๋ค๋ฅธ ์ฐ๊ธฐ ๋ฐฉํฅ์ ์์ฉํ๊ธฐ ์ํ UI ์กฐ์ ์ด ํฌํจ๋ฉ๋๋ค.
๊ฒฐ๋ก
ํ๋ ์ ๋๋กญ์ React ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฌ์ฉ์ ๊ฒฝํ์ ์๋นํ ์ํฅ์ ๋ฏธ์น ์ ์์ต๋๋ค. ํ๋ ์ ๋๋กญ์ ์์ธ์ ์ดํดํ๊ณ ์ด ๊ธ์์ ์ค๋ช ํ ์ ๋ต์ ๊ตฌํํจ์ผ๋ก์จ, ๋์์ฑ ๋ ๋๋ง์ ์ฌ์ฉํ๋๋ผ๋ ๋ถ๋๋ฝ๊ณ ๋ฐ์์ฑ ์๋ ์ฑ๋ฅ์ ์ํด ์ ํ๋ฆฌ์ผ์ด์ ์ ์ต์ ํํ ์ ์์ต๋๋ค. ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ๊ธฐ์ ์ผ๋ก ํ๋กํ์ผ๋งํ๊ณ , ์ฑ๋ฅ ์งํ๋ฅผ ๋ชจ๋ํฐ๋งํ๋ฉฐ, ์ค์ ๋ฐ์ดํฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ต์ ํ ์ ๋ต์ ์กฐ์ ํ๋ ๊ฒ์ ์๊ฐ์ด ์ง๋๋ ์ต์ ์ ์ฑ๋ฅ์ ์ ์งํ๋ ๋ฐ ์ค์ํฉ๋๋ค. ์ ์ธ๊ณ ์ฌ์ฉ์๋ฅผ ๊ณ ๋ คํ๊ณ ๋ค์ํ ๋คํธ์ํฌ ์กฐ๊ฑด๊ณผ ๊ธฐ๊ธฐ ์ฑ๋ฅ์ ๋ง๊ฒ ์ต์ ํํ๋ ๊ฒ์ ์์ง ๋ง์ธ์.
์ปดํฌ๋ํธ ์ ๋ฐ์ดํธ ์ต์ ํ, ๋น์ฉ์ด ํฐ ๊ณ์ฐ ์ค์ด๊ธฐ, DOM ์กฐ์ ์ต์ ํ, ์ฅ๊ธฐ ์คํ ์์ ๊ด๋ฆฌ, ์๋ํํฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ต์ ํ, ๊ทธ๋ฆฌ๊ณ ๊ธฐ๊ธฐ ์ฑ๋ฅ๊ณผ ๋คํธ์ํฌ ์กฐ๊ฑด์ ๊ณ ๋ คํ๋ ๋ฐ ์ง์คํจ์ผ๋ก์จ ์ ์ธ๊ณ ์ฌ์ฉ์์๊ฒ ์ฐ์ํ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํ ์ ์์ต๋๋ค. ์ต์ ํ์ ํ์ด์ ๋น๋๋ค!