ํด๋น ๊ธ์์ ๋ฒ์ถ์ผ ์คํฌ๋กค์ ์ง์ ๊ตฌํํ๊ธฐ ์ ์ ๋์ ์ ์ํด ์ฐพ์๋ณธ ์ด๋ฏธ ์์ฉํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ํด ์์ฑํด ๋ณด๊ฒ ์ต๋๋ค!
์ธ๊ธฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ฐ์
๊ฒํ ํด๋ณธ ๋ฒ์ธ์ผ ์คํฌ๋กค์ ์ง์ํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก๋ react-window, react-virtualized, react-virtuoso๊ฐ ์์ต๋๋ค.
๊ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๊ณ ์ ํ ์ ๊ทผ ๋ฐฉ์์ ํตํด ๋ฒ์ธ์ผ ์คํฌ๋กค์ ๊ตฌํํ๊ณ ์์ผ๋ฉฐ, ๋ค์ํ ์ฌ์ฉ ์ฌ๋ก์ ์ฑ๋ฅ ์๊ตฌ์ฌํญ์ ๋ง์ถ์ด ์ค๊ณ๋์์ต๋๋ค.
์ด ์ค์์ React Virtualized๋ ๊ฐ๋ฒผ์์ง ๋ฒ์ ์ธ React Window๊ฐ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ๋๋ฉฐ, React Virtuoso๋ ๋น๊ต์ ์ต๊ทผ์ ์ถ์๋์ด ์ฌ์ฉ๋์ด ์ ์ง๋ง ์ ์ ์ธ๊ธฐ๋ฅผ ๋๊ณ ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ค. React Virtuoso๋ React Window์๋ ์๋ ๊ธฐ๋ฅ๋ค์ ์ง์ํ์ฌ ๊ฐ๋ณ๊ณ ๊ฐ๋จํ๋ฉด์๋ ๋ค์ํ ์๊ตฌ์ ๋์ํ ์ ์์ต๋๋ค. ์ด๋ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๊ฐ์ ์คํฌ๋กค์ ํตํด ์คํฌ๋กค์ ๋ด๋ฆด ๋ ๋ฐ์ดํฐ๋ฅผ ๋๊น ์์ด ๋ณด์ฌ์ค ์ ์๋ windowing ์ฒ๋ฆฌ๋ฅผ ์ง์ํฉ๋๋ค.
Windowing
Windowing์ ํ์ฌ ํ๋ฉด์ ํ์ํ ๋ฐ์ดํฐ๋ง ํ์ํ๋ ๋ฐฉ๋ฒ์ ๋๋ค. ๊ธด ๋ฆฌ์คํธ์ ๊ฒฝ์ฐ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ํ ๋ฒ์ ๋ ๋๋งํ๋ฉด ์ฑ๋ฅ์ด ์ ํ๋๊ณ ๋ ์ด ๋ฐ์ํ ์ ์๊ธฐ ๋๋ฌธ์, windowing ๊ธฐ์ ์ ํตํด ํจ์จ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
์๋ฆฌ๋์ ๋๋ฆผ ์ฝ๋ฉ Express ๊ฐ์์ Rate Limit ๊ด๋ จ ์๊ณ ๋ฆฌ์ฆ์ ํ์ตํ๋ฉฐ ์๊ฒ ๋๋ ๊ฐ๋ ์ธ๋ฐ ๋ค์ ๋ณด๋ ๊ดํ ๋ฐ๊ฐ๋ค์! ใ ใ
์คํฌ๋กค ์์น
- React Virtualized๋ ์ฌ์ฉ์๊ฐ ์คํฌ๋กคํ ์์น๋ฅผ ๊ธฐ์ตํ๋ ๊ธฐ๋ฅ์ด ์์ด ํ์ด์ง๋ฅผ ์๋ก๊ณ ์นจํด๋ ๊ทธ ์์น์์ ๋ค์ ์์ํ ์ ์์ต๋๋ค.
- React Window๋ ์คํฌ๋กค ์์น ์ ์ฅ ๊ธฐ๋ฅ์ด ์์ด, ์๋ก๊ณ ์นจ ํ ์ต์๋จ ํญ๋ชฉ์ผ๋ก ๋์๊ฐ๋ ๋ถํธํจ์ด ์์ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, 1000๊ฐ์ ๋ฆฌ์คํธ ํญ๋ชฉ ์ค 700๋ฒ์งธ ํญ๋ชฉ์ ๋ณด๊ณ ์๋ค๊ฐ ์๋ก๊ณ ์นจํ๋ฉด ์ต์๋จ์ผ๋ก ์ด๋ํฉ๋๋ค.
- ํด๋ผ์ด์ธํธ ์ฌ์ด๋ ๋ผ์ฐํ ์ผ๋ก ์ธํด ํ์ด์ง ๊ฐ ์ด๋ ์ ์ํ๊ฐ ์ ์ง๋์ง๋ง, URL์ด ๋ณ๊ฒฝ๋๋ฉด ์คํฌ๋กค ์์น๊ฐ ์ด๊ธฐํ๋์ด ํ์ด์ง๊ฐ ์ธ๋ง์ดํธ๋๊ณ ์๋ก์ด ์ปดํฌ๋ํธ๊ฐ ๋ง์ดํธ๋๊ธฐ ๋๋ฌธ์ ์ด๊ธฐ ์ํ๋ก ๋์๊ฐ๋๋ค.
- ์ธ๋ง์ดํธ ์ API ์์ฒญ์ด ๋ค์ ๋ฐ์ํ ์ ์์ผ๋ฉฐ, Context API, Redux, React Query ๋ฑ์ ์ํ ๊ด๋ฆฌ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ์ฌ ๋ถํ์ํ API ์์ฒญ์ ๋ฐฉ์งํ ์ ์์ต๋๋ค.
๋์ด ๊ณ์ฐ (์ ์ , ๋์ )
- React Window๋ ์ ์ ์ธ ๋์ด๋ฅผ ์ง์ํ๋ฏ๋ก ๋ฆฌ์คํธ ํญ๋ชฉ์ ๋์ด๊ฐ ์ผ์ ํด์ผ ์ฌ์ฉ ๊ฐ๋ฅํฉ๋๋ค.
- React Virtualized๋ ๋์ ์ธ ๋์ด๋ฅผ ์ง์ํ์ฌ ๋ฆฌ์คํธ ํญ๋ชฉ์ ๋ด์ฉ์ ๋ฐ๋ผ ๋์ด๊ฐ ๋ฌ๋ผ์ ธ๋ ์๋์ผ๋ก ๊ณ์ฐํ ์ ์์ต๋๋ค. ์ด๋ฅผ ์ํด CellMeasurer ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ, ์ด ์ปดํฌ๋ํธ๋ ์๋ก์ด ์ฝํ ์ธ ๊ฐ ๋ํ๋ ๋ ๋์ด๋ฅผ ์๋์ผ๋ก ์ฌ๊ณ์ฐํฉ๋๋ค.
- CellMeasurer์ ํจ๊ป CellMeasurerCache๋ฅผ ์ฌ์ฉํ๋ฉด ๋์ด๋ฅผ ์บ์ํ์ฌ ์ฑ๋ฅ์ ํฅ์์ํฌ ์ ์์ต๋๋ค.
React Window
- ๋ชฉ์ : ๋ง์ ๋ฐ์ดํฐ ๋ฆฌ์คํธ์ ํ ํ์ ๋ฐ์ดํฐ๋ฅผ ํจ์จ์ ์ผ๋ก ๋ ๋๋งํ์ฌ ๋ทฐํฌํธ์ ๋ณด์ด๋ ํญ๋ชฉ๋ง ๋ ๋๋งํฉ๋๋ค.
- ์ฃผ์ ๊ธฐ๋ฅ:
- React Window๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ์ ์ธ ๋์ด๋ฅผ ๊ฐ์ง ๋ฆฌ์คํธ์ ๊ทธ๋ฆฌ๋๋ง ์ ๊ณตํฉ๋๋ค. ํ์ํ ์ต์ํ์ ๊ธฐ๋ฅ์ ์ ๊ณตํ์ฌ ๊ฒฝ๋ํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ค.
- DOM ๋ ธ๋ ์๋ฅผ ์ต์ํํ์ฌ ๋ ๋๋ง ์๊ฐ๊ณผ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ์ค์ ๋๋ค.
- ์ด๋ณด์๋ฅผ ์ํด ์ค๊ณ๋ ๊ฐ๋จํ API๋ก ์ฑ๋ฅ์ ์ค์ ์ ๋ก๋๋ค.
- react-window-infinite-loader์ ๊ฐ์ ์ธ๋ถ ํจํค์ง๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ์ ์ง์ฐ ๋ก๋ฉ์ ์ง์ํฉ๋๋ค.
- ์ฌ์ฉ๋ฒ: ์ต์ํ์ ์ค์ ์ผ๋ก ์ฝ๊ฒ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ, ์ฌ์ฉ์ ์ ์ ์์ฑ๊ณผ ์ด๋ฒคํธ ํธ๋ค๋ฌ ๋ํ ์ฌ์ฉ ๊ฐ๋ฅํฉ๋๋ค.
React Virtualized
- ๋ชฉ์ : React Window์ ์ ์ฌํ์ง๋ง ๋ ๋ณต์กํ ์ฌ์ฉ ์ฌ๋ก๋ฅผ ์ํ ํญ๋์ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
- ์ฃผ์ ๊ธฐ๋ฅ:
- React Virtualized๋ ๊ฐ์ํ๋ ๊ทธ๋ฆฌ๋, ํํฐ๋ง, ์ ๋ ฌ, ๋๋๊ทธ ์ค ๋๋กญ ๋ฑ ๋ค์ํ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
- ๊ฐ์ํ๋ ๊ทธ๋ฆฌ๋๋ ๋์ ์ธ ๋์ด ๊ณ์ฐ์ ํตํด ์ฌ์ฉ์์๊ฒ ๋ณด๊ธฐ ์ข์ ํํ๋ก ๋ฐ์ดํฐ๊ฐ ๋ฐฐ์น๋ฉ๋๋ค.
- ํํฐ๋ง ๊ธฐ๋ฅ์ ํน์ ์กฐ๊ฑด์ ๋ง๋ ํญ๋ชฉ๋ง ํ์ํ ์ ์์ต๋๋ค.
- ์ ๋ ฌ ๊ธฐ๋ฅ์ ํตํด ์ฌ์ฉ์๊ฐ ์ํ๋ ๊ธฐ์ค์ผ๋ก ๋ฆฌ์คํธ๋ฅผ ์ ๋ ฌํ ์ ์์ต๋๋ค.
- ๋๋๊ทธ ์ค ๋๋กญ ๊ธฐ๋ฅ์ ํตํด ๋ฆฌ์คํธ ํญ๋ชฉ์ ์์๋ฅผ ์ฝ๊ฒ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
- ์ผ๋ถ ์คํ์ผ์ CSS๊ฐ ํ์ํ๋ฉฐ, ๋ฒ๋ค ํฌ๊ธฐ๋ฅผ ์ค์ด๊ธฐ ์ํด ํน์ ๊ตฌ์ฑ ์์๋ง ์ํฌํธํ ์ ์์ต๋๋ค.
- ์ต์ ํ๋ฅผ ์ํด shallowCompare๋ฅผ ์ฌ์ฉํ์ฌ props๋ state๊ฐ ๋ณ๊ฒฝ๋์ง ์์ผ๋ฉด ๋ค์ ๋ ๋๋งํ์ง ์์ต๋๋ค.
- React Virtualized๋ ๊ฐ์ํ๋ ๊ทธ๋ฆฌ๋, ํํฐ๋ง, ์ ๋ ฌ, ๋๋๊ทธ ์ค ๋๋กญ ๋ฑ ๋ค์ํ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
- ์ฌ์ฉ๋ฒ: ๋ณต์กํ API ๋๋ฌธ์ ์ค์ ์ด ๋ ๋ณต์กํ ์ ์์ผ๋ฉฐ, react-window๋ react-virtuoso์ ๋น๊ตํด ์ ํ๋ฆฌ์ผ์ด์
์ ๋ฒ๋ค ํฌ๊ธฐ๋ฅผ ์ฆ๊ฐ์ํฌ ์ ์์ต๋๋ค.
React Virtuoso
- ๋ชฉ์ : ๊ฐ๋ณ ํฌ๊ธฐ ํญ๋ชฉ์ ์๋์ผ๋ก ์ฒ๋ฆฌํ๋ฉฐ, ๋ค์ํ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ํฌ๊ด์ ์ธ ๊ตฌ์ฑ ์์ ์ธํธ๋ฅผ ์ ๊ณตํฉ๋๋ค.
- ์ฃผ์ ๊ธฐ๋ฅ:
- ์๋ ํฌ๊ธฐ ์กฐ์ ์์ด ๊ฐ๋ณ ํฌ๊ธฐ ํญ๋ชฉ์ ์๋์ผ๋ก ์ฒ๋ฆฌํฉ๋๋ค.
- ์ฑํ ๋ฉ์์ง ๋ฆฌ์คํธ
- ์คํฐํค ํค๋๊ฐ ์๋ ๊ทธ๋ฃนํ๋ ํญ๋ชฉ
- ๋ฆฌ์คํธ์ ํญ๋ชฉ์ ์นดํ ๊ณ ๋ฆฌ๋ณ๋ก ๊ทธ๋ฃนํ ํ๋ค๋ ์๋ฏธ์ ๋๋ค!(์ ๊ฐ ํท๊ฐ๋ ธ๋ ๋ถ๋ถ์ด๋ผ ํ์ด ์ ์๊ฒ์!) ์๋ฅผ ๋ค์ด, ์ ํ ๋ฆฌ์คํธ๊ฐ "๊ณผ์ผ"์ด๋ "์ฑ์"์ ๊ฐ์ ์นดํ ๊ณ ๋ฆฌ๋ก ๋๋์ด ์์ ์ ์์ต๋๋ค. ๊ฐ ๊ทธ๋ฃน์๋ ์๋จ์ ๊ณ ์ ๋ ํค๋๊ฐ ์์ด ์ฌ์ฉ์๊ฐ ๋ฆฌ์คํธ๋ฅผ ์คํฌ๋กคํ ๋ ํ์ฌ ์ด๋ค ๊ทธ๋ฃน์ ๋ณด๊ณ ์๋์ง ์ฝ๊ฒ ์ ์ ์๊ฒ ํด์ค๋๋ค. ์ด ์คํฐํค ํค๋ ๊ธฐ๋ฅ์ ์ฌ์ฉ์์๊ฒ ๋ ๋์ ๋งฅ๋ฝ์ ์ ๊ณตํ์ฌ ์ฌ์ฉ ๊ฒฝํ์ ํฅ์์ํต๋๋ค.
- ๋ฌดํ ์คํฌ๋กค ๋ฑ์ ์ง์ํฉ๋๋ค.
- CSS ํด๋์ค ์์ฑ์ ํตํด ๋์ผํ ํฌ๊ธฐ์ ํญ๋ชฉ์ ์ฌ๋ฌ ์ด๋ก ํ์ํ ์ ์์ต๋๋ค.
- ์ฌ์ฉ๋ฒ: ๋ณต์กํ ๋ฆฌ์คํธ ๋ทฐ ๊ตฌํ์ ๋จ์ํํ์ฌ ์ง๊ด์ ์ธ API๋ก ๊ฐ๋ฐ์์๊ฒ ์ฌ์ฉํ๊ธฐ ์ฝ๊ฒ ์ค๊ณ๋์์ต๋๋ค.
์์ฝ ๋ฐ ๋ง๋ฌด๋ฆฌ
- ์ฑ๋ฅ: ์ธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ชจ๋ DOM ๋ ธ๋๋ฅผ ์ค์ด๊ณ ๋ ๋๋ง์ ์ต์ ํํ์ฌ ์ฑ๋ฅ์ ํฅ์์ํค๋ ๋ฐ ์ค์ ์ ๋ก๋๋ค.
- ๋ณต์ก์ฑ: React Window๊ฐ ๊ฐ์ฅ ๊ฐ๋จํ๊ณ ๊ฒฝ๋์ด๋ฉฐ, React Virtualized๋ ๋ ๋ง์ ๊ธฐ๋ฅ์ ์ ๊ณตํ์ง๋ง ๋ณต์ก์ฑ์ด ์ฆ๊ฐํฉ๋๋ค. React Virtuoso๋ ๊ณ ๊ธ ๊ธฐ๋ฅ๊ณผ ์ฌ์ฉ ํธ์์ฑ์ ๊ท ํ์ด ์ข์ต๋๋ค.
- ์ฌ์ฉ์ ์ ์: ๊ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ฌ์ฉ์๊ฐ ํ์์ ๋ง๊ฒ ์กฐ์ ํ ์ ์๋ ๋ค์ํ ์ต์ ์ ์ ๊ณตํฉ๋๋ค. ํนํ React Virtuoso์ React Virtualized๋ ์คํ์ผ์ด๋ ๋ ์ด์์์ ์ปค์คํฐ๋ง์ด์ฆํ๋ ๋ฐ ๋ ๋ง์ ์ ์ฐ์ฑ์ ์ค๋๋ค. ์๋ฅผ ๋ค์ด, ์ฌ์ฉ์๋ค์ ์์ ๋ง์ ๋์์ธ ์๊ตฌ์ ๋ง์ถฐ ํญ๋ชฉ์ ํฌ๊ธฐ, ์์, ๋ฐฐ์น ๋ฑ์ ์์ ๋กญ๊ฒ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
- React Window๋ ๊ธฐ๋ณธ์ ์ธ ๋ฆฌ์คํธ์ ๊ทธ๋ฆฌ๋, ์ ์ ์ธ ๋์ด๋ฅผ ์ง์ํ๋ฉฐ, ํ์ ์๋ ๊ธฐ๋ฅ๋ค์ ์ ๊ฑฐํ์ฌ ๊ฐ๋ณ๊ณ ๊ฐ๋จํ๊ฒ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์์ ํ๋ก์ ํธ์ ์ ํฉํ์ง๋ง, ๊ธฐ๋ฅ์ด ์ ํ์ ์ ๋๋ค.
- React Virtualized๋ ๋ง์ ๊ธฐ๋ฅ์ ์ง์ํ๋ฉฐ, ๋ณต์กํ UI/UX๋ฅผ ๊ตฌ์ถํ ๋ ์ ์ฉํ์ง๋ง, ์ค์ ์ด ๋ณต์กํ๊ณ ํ์ผ ํฌ๊ธฐ๊ฐ ํฐ ๋จ์ ์ด ์์ต๋๋ค.
- React Virtuoso๋ ๊ฒฝ๋ํ์ ๊ฐํธํจ์ ์ถ๊ตฌํ๋ฉฐ, ์ต๊ทผ ์ธ๊ธฐ๋ฅผ ๋๊ณ ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก, ํ์ํ ๊ธฐ๋ฅ์ด ๋ง๋ค๋ฉด ๋ค๋ฅธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํจ๊ป ์ฌ์ฉํ ์๋ ์์ต๋๋ค.
์ด์ฒ๋ผ ๊ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๊ฐ๊ธฐ ๋ค๋ฅธ ํน์ฑ๊ณผ ์ฅ๋จ์ ์ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ, ํ๋ก์ ํธ์ ์๊ตฌ์ ๋ง์ถฐ ์ ํํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
'Side Project > Allini - ๋ฐ๋ ค๊ฒฌ ์์ ๊ด๋ฆฌ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
React ์๋ฒ ์ปดํฌ๋ํธ ์ฌ์ธต ๋ถ์! (7) | 2024.10.22 |
---|---|
Virtual Scroll: ์ด๋ค ์ํฉ์์ ์จ์ผํ ๊น? (8) | 2024.10.13 |
SVG๋ฅผ ์ปดํฌ๋ํธ์ฒ๋ผ ์ฌ์ฉํ๊ธฐ ์ํ Webpack ์ค์ (4) | 2024.10.08 |
Yarn Berry ์ฌ์ฉ ์ PnP ๋ชจ๋์์๋ node_modules ํด๋๊ฐ ์๊ธฐ๋ ์ด์ ๋? (2) | 2024.09.02 |
REST API ๋ฌธ์ํ์ ์ธ์ฆ ๋ฌธ์ ํด๊ฒฐ ๊ณผ์ (0) | 2024.08.26 |