๐ ๋ค์ด๊ฐ๋ฉฐ์น ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ปค์ง์๋ก ๋ฒ๋ค ํฌ๊ธฐ๋ ํจ๊ป ์ปค์ง๊ฒ ๋ฉ๋๋ค. ์ด๋ ์ด๊ธฐ ๋ก๋ฉ ์๊ฐ์ ์ง์ ์ ์ธ ์ํฅ์ ๋ฏธ์น์ฃ .Vite์์ ์ ๊ณตํ๋ Code Splitting ๊ธฐ๋ฅ์ ํ์ฉํ๋ฉด ์ด ๋ฌธ์ ๋ฅผ ํจ๊ณผ์ ์ผ๋ก ํด๊ฒฐํ ์ ์์ต๋๋ค. ํด๋น ๊ธ์์๋ manualChunks์ ๋ํด์๋ง ๋ค๋ฃน๋๋ค.์ Code Splitting์ด ํ์ํ ๊น?์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๋น๋ํ๋ฉด ๋ชจ๋ Javascript ์ฝ๋๊ฐ ํ๋์ ํฐ ํ์ผ๋ก ๋ฒ๋ค๋ง ๋ฉ๋๋ค.ํ์ง๋ง ์ด ์ํฉ์ ์๋ ๋ฌธ์ ๋ค์ ์ผ์ผํฌ ์ ์์ต๋๋ค.๊ธด ์ด๊ธฐ ๋ก๋ฉ ์๊ฐ: ์ฌ์ฉ์๊ฐ ์ฒซ ํ์ด์ง๋ฅผ ๋ณด๊ธฐ ์ ์ ๋ชจ๋ ์ฝ๋๋ฅผ ๋ค์ด๋ก๋ํด์ผ ํฉ๋๋ค.๋ถํ์ํ ๋ฆฌ์์ค ๋ญ๋น: ๋น์ฅ ํ์ํ์ง ์์ ์ฝ๋๋ ํจ๊ป ๋ถ๋ฌ์ต๋๋ค.๋นํจ์จ์ ์ธ ์บ์ฑ: ์์ ์ฝ๋ ๋ณ๊ฒฝ์๋ ์ ์ฒด ๋ฒ๋ค์ ๋ค์ ๋ค์ด๋ก๋ํด์ผ ํฉ๋๋ค.๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ ์ฆ..
๐ ๋ค์ด๊ฐ๋ฉฐ์ต๊ทผ ํ์ฌ์์ ๋ด๋นํ๋ ์๋น์ค์ ๋ํด์ CRA์์ Vite๋ก ๋ง์ด๊ทธ๋ ์ด์ ์ ํ๋ฉด์ ์ฝ๊ฐ์ ์ฝ๋ ๊ฐ์ ๊น์ง ์งํ์ ํ๋ ๊ฒฝํ์ ๊ฐ๊ฒ ๋์์ต๋๋ค. ํ๋ก์ ํธ ๊ท๋ชจ๊ฐ ์์ ํธ์ด ์๋์๊ธฐ ๋๋ฌธ์ ๋ง์ด๊ทธ๋ ์ด์ ์ ํ๋ฉด์ webpack์ ์์กดํ๊ณ ์๋ ๋ฑ์ ์ฌ์ด๋์ดํํธ๊ฐ ๋ฐ์ํ๋ ๋ถ๋ถ์์ ์ ์ผ ๊ฑฑ์ ์ ๋ง์ด ํ๋๋ฐ์. ์ด๋ฒ ๊ธ์์๋ ํฌ๊ฒ ์ ๋ง์ด๊ทธ๋ ์ด์ ์ ์งํํ๋์ง, CRA์ Vite๋ ์ด๋ค ์ฐจ์ด๊ฐ ์๋์ง ์ด๋ป๊ฒ ์งํํ๋์ง, ์ด๋ค ๊ฒฐ๊ณผ๊ฐ ์์๋์ง ๊ธฐ๋กํ๋ ค ํฉ๋๋ค.โ๏ธ ๋ง์ด๊ทธ๋ ์ด์ ์ ํ์์ฑํ์ฌ ๋ด๋นํ ์๋น์ค๋ webpack ๊ธฐ๋ฐ์ CRA๋ก ๊ตฌ์ฑ๋ ํ๋ก์ ํธ์์ต๋๋ค. ์ฒซ ๋ฒ์งธ, ์ค๋ ๊ฑธ๋ฆฌ๋ ๊ฐ๋ฐ ์๋ฒ ๊ตฌ๋์๊ฐ์ด์์ต๋๋ค.๊ตฌ๋๋๋ ์๊ฐ๊น์ง ํ๊ท ์ฝ 20์ด๊ฐ ์์๋๊ณ ์ต๋ ์ฝ 30์ด๊น์ง ์์๋๋ ์ํฉ์ด์์ต๋๋ค. ๋ ๋ฒ..
๐ ๋ค์ด๊ฐ๋ฉฐํ์ฌ React 19 ๋ฒ์ ์ ์ ๋ฐ์ดํธ์ ๋ํด์ ๋ง์ ๊ด์ฌ์ ๊ฐ์ง๊ณ ์์ต๋๋ค. ์ฌ๋ฌ ๋ณ๊ฒฝ์ฌํญ๋ค์ด ๋ง์ง๋ง ์ด๋ฒ ํฌ์คํ ์์๋ ํต์ฌ ๋ด์ฉ์ด๋ผ๊ณ ์๊ฐํ๋ ๋ถ๋ถ์ ํฌ์คํ ํ๋ ค ํฉ๋๋ค. ์ฆ, ๊ธฐ์กด์๋ ํ์ํ๊ณ ์ฌ์ฉํด์ผ ํ์ง๋ง 19 ๋ฒ์ ์ด ๋์ ๋๋ฉด์ ์ฌ์ฉํ์ง ์์๋ ๋๋ ๊ฒ๋ค๊ณผ ์ถ๊ฐ๋ก ๋ช ๊ฐ์ง ์๋ก์ด ๊ธฐ๋ฅ๋ค์ ์๊ฐํ๋ ค๊ณ ํฉ๋๋ค. ํ์ฌ 2024๋ 5์ 15์ผ ๊ธฐ์ค์ผ๋ก ๋ฆฌ์กํธ 19๋ฒ์ ์ ์ฌ์ฉํด๋ณด๊ณ ์ถ๋ค๋ฉด ์นด๋๋ฆฌ ๋ฒ์ ์ ์ค์นํ์ฌ ์ฌ์ฉํ ์ ์์ต๋๋ค.npm i react@canary react-dom@canaryoryarn add react@canary react-dom@canaryReact Compoiler19 ๋ฒ์ ์ ๊ฐ์ฅ ํฐ ๋ถ๋ถ์ ๋ฆฌ์กํธ ์ปดํ์ผ๋ฌ์ ๋๋ค. ๋ฆฌ์กํธ ์ปดํ์ผ๋ฌ๋ ๋ฆฌ์กํธ ์ฝ๋๋ฅผ ์ผ๋ฐ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ก..
๐ ๋ค์ด๊ฐ๋ฉฐ ์ด๋ฒ ํฌ์คํ ์์๋ React์์ ์ฌ์ฉ๋๋ ์ํ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ํด์ ๊ฐ๊ฐ์ ํน์ง๊ณผ ๊ฐ์ธ์ ์ธ ๊ฒฌํด๊ฐ ๋ค์ด๊ฐ ์์ต๋๋ค. ํ์ฌ ํฌ์คํ ์์ ๋ค๋ฃฐ ์ฃผ์ ๋ค ๊ฐ์ง ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ค. react-redux & redux-toolkit recoil zustand jotai React์์ ์ํ ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํจ๊ป ๊ฐ๋ฐ์ ํ๋ค ๋ณด๋ฉด ์์์ ์ธ๊ธํ ๋ค ๊ฐ์ง ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค ํ๋์ฏค์ ๋ถ๋ช ์๊ณ ๊ณ์๋ฆฌ๋ผ ์๊ฐํฉ๋๋ค. ์ ์ด๋ฏธ์ง๋ ์ต๊ทผ 1๋ ๊ฐ ๋ค ๊ฐ์ง ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ NPM ๋ํฅ์ ๋๋ค. ํ์ฌ ์ถ์ธ๋ก ๋ดค์ ๋ 1์: redux (react-redux & redux-tookit) 2์: zustand 3์: jotai 4์: recoil ์ ์์๋ก ๋ณด์ ๋๋ค. ๊ทธ๋ผ ๊ฐ๋จํ ์ฝ๋ ์์ ์ ํจ๊ป ํน์ง์ ์์๋ณด๊ฒ ์ต๋๋ค. Redux..
๐ ๋ค์ด๊ฐ๋ฉฐ๋ฆฌ์กํธ๊ฐ ๋ฐ์ด๋ ์ฑ๋ฅ์ ๋ณด์ฌ์ค ์ ์๋ ๋น๊ฒฐ ์ค ํ๋๋ ๋ฐ๋ก ๊ฐ์ ๋(Virtual DOM)์ ๋๋ค.์ด๋ ๋ฆฌ์กํธ์ ํต์ฌ ๊ฐ๋ ์ค ํ๋๋ก ๊ฐ์ ๋์ ๋ํด ์์๋ณด๊ฒ ์ต๋๋ค.DOM(Document Object Model)์น ์ฌ์ดํธ์ ์ ์ํ๋ฉด ๋ณด์ด๋ ๊ฐ๊ฐ์ ์์(Element)๋ค์ด ๋ชจ์ฌ ํ๋์ ๋ฌธ์(Document)๋ฅผ ๊ตฌ์ฑํฉ๋๋ค.์ด๋ฌํ ๋ฌธ์์ ๊ตฌ์กฐ๋ฅผ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๊ฐ ์ดํดํ ์ ์๋๋ก ํํํ ๊ฒ์ด ๋ฐ๋ก DOM์ ๋๋ค.DOM์ ์์๋ค์ ํธ๋ฆฌ(Tree) ํํ๋ก ํํํ๋ฉฐ, ๊ฐ ์์์ ํด๋นํ๋ ๋ ธ๋(Node)๊ฐ ์กด์ฌํฉ๋๋ค.๊ฐ๋ฐ์๋ค์ DOM์ด ์ ๊ณตํ๋ API๋ฅผ ์ด์ฉํด ์ด๋ฌํ DOM ๊ตฌ์กฐ์ ์ ๊ทผํ๊ณ , ๋ด์ฉ์ด๋ ์คํ์ผ์ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.์ด๋ฐ ๊ณผ์ ์ DOM ์กฐ์์ด๋ผ๊ณ ๋ถ๋ฆ ๋๋ค. ํ์ง๋ง ์๋ฅผ ๋ค์ด, ์น ํ์ด์ง์ ํน์ ..
๐ ๋ค์ด๊ฐ๋ฉฐ ํจ์ ์ปดํฌ๋ํธ ๋์ ๋ฆฌ์กํธ์์ ํจ์ ์ปดํฌ๋ํธ๋ ๋ฆฌ์กํธ๊ฐ ์ฒ์ ์๊ฒผ์ ๋๋ถํฐ ์์์ง๋ง, ์ฒ์์๋ ์ํ๊ด๋ฆฌ๋ ์๋ช ์ฃผ๊ธฐ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ์ ์์ด์ ์ฃผ๋ก ๋จ์ํ ํํ์ ์ํ ์ฉ๋๋ก ์ฌ์ฉ๋์์ต๋๋ค. ํ์ง๋ง, ๋ฆฌ์กํธ 16.8 ๋ฒ์ ์์ Hooks๊ฐ ๋์ ๋๋ฉด์ ํจ์ ์ปดํฌ๋ํธ์์๋ ์ํ๊ด๋ฆฌ์ ์๋ช ์ฃผ๊ธฐ ๋ฉ์๋์ ์ ์ฌํ ๊ธฐ๋ฅ์ ํ์ฉํ ์ ์๊ฒ ๋์์ต๋๋ค. Hooks์ ๋์ ์ ํจ์ ์ปดํฌ๋ํธ์ ํ์ฉ ๋ฒ์๋ฅผ ํฌ๊ฒ ํ์ฅ์ํค๊ณ , ํ์ฌ๋ ํจ์ ์ปดํฌ๋ํธ๋ง์ผ๋ก๋ ๋๋ถ๋ถ์ ๊ธฐ๋ฅ์ ๊ตฌํํ ์ ์๊ฒ ๋์๊ณ , ๊ทธ ๊ฒฐ๊ณผ ํจ์ ์ปดํฌ๋ํธ์ ์ฌ์ฉ์ด ํฌ๊ฒ ๋์์ต๋๋ค. ์ค์ ๋ก ๋ฆฌ์กํธ ๊ณต์๋ฌธ์์์๋ ํด๋์ค ์ปดํฌ๋ํธ๋ณด๋ค ํจ์ ์ปดํฌ๋ํธ๋ก ์์ฑํ๋ ๊ฒ์ ๊ถ์ฅํ๊ณ ์์ต๋๋ค. ํจ์ํ(Functional)์ด ์๋๋ผ ํจ์(Function) ์ปดํฌ๋ํธ๋ผ๊ณ ๋ถ๋ฅด..
๐ ๋ค์ด๊ฐ๋ฉฐ ์ด์ ๊ธ React.memo ๊ธ์์ ๋ถ๋ชจ ์ปดํฌ๋ํธ์์ ํจ์๋ฅผ props๋ก ๋ฐ์ ๋ ํด๊ฒฐํ ์ ์๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ useCallback์ ๋ํด์ ์์๋ณด๊ฒ ์ต๋๋ค. useCallback์ด๋ โ ๋จผ์ React์์ useCallback์ ๋ฆฌ๋ ๋๋ง ์ฌ์ด์ ํจ์ ์ ์๋ฅผ ์บ์ ํ ์ ์๊ฒ ํด์ฃผ๋ React ํ ์ ๋๋ค. ์ฆ, useCallback ํ ์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ปดํฌ๋ํธ ์คํ ์ ๋ฐ์ ๊ฑธ์ณ ํจ์๋ฅผ ์ ์ฅํ ์ ์๊ฒ ํ๋ ํ ์ผ๋ก React์ ํจ์๋ฅผ ์บ์ฑํ๊ณ ๋งค ์คํ๋ง๋ค ํด๋น ํจ์๋ฅผ ์ฌ์์ฑ๋๋ ์ํฉ์ ๋ง์ ์ ์์ต๋๋ค. ์ฌ์ฉ ๋ฐฉ๋ฒ ์บ์ฑํ๋ ค๋ ํจ์๋ฅผ useCallback์ผ๋ก ๋ํ ํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค. // Button.js const Button = ({ onClick }) => { console.log('..
๐ ๋ค์ด๊ฐ๋ฉฐ React์์ ์ฑ๋ฅ์ ์ต์ ํํ๊ธฐ ์ํด ์ฌ์ฉํ ์ ์๋ React.memo์ ๋ํด ์๊ฐํ๊ณ , ๊ธฐ๋ฅ์ ์ด๋ค ์ํฉ์์ ์ ์ฌ์ฉํ๊ณ ๋์์๋ฆฌ์ ์ฌ์ฉ ์์ ์ฝ๋๋ ํจ๊ป ์์๋ณด๊ฒ ์ต๋๋ค. React.memo๋ โ memo๋ฅผ ์ฌ์ฉํ๋ฉด ํด๋น ์ปดํฌ๋ํธ์ props๊ฐ ๋ณ๊ฒฝ๋์ง ์์ ๊ฒฝ์ฐ ๋ฆฌ๋ ๋๋ง์ ๊ฑด๋๋ธ ์ ์์ต๋๋ค. ์ฆ, ๋ฉ๋ชจํ๋ ๋ฒ์ ์ ์ปดํฌ๋ํธ๋ก ํด๋น ์ปดํฌ๋ํธ์ props๊ฐ ๋ณ๊ฒฝ๋ ๋๋ง ๋ฆฌ๋ ๋๋ง์ ํ ์ ์์ต๋๋ค. ์ปค๋ค๋ ํ๋ชจ์ ์ปดํฌ๋ํธ๋ ๋ณต์กํ ์ํฉ์์ ๋ถํ์ํ ๋ฆฌ๋ ๋๋ง์ ๋ง์ ์ฑ๋ฅ์ ์ต์ ํํ ์ ์์ต๋๋ค. ๋์ ์๋ฆฌ ๐ก React.memo๋ ์ธ์๋ก ๋ค์ด๊ฐ ์ปดํฌ๋ํธ์ ์ด๋ค props๊ฐ ์ ๋ ฅ๋๋์ง ํ์ธํ๊ณ ์ ๋ ฅ๋๋ ๋ชจ๋ props์ ์ ๊ท ๊ฐ์ ํ์ธํ ๋ค ์ด๋ฅผ ๊ธฐ์กด์ props์ ๊ฐ๊ณผ ๋น๊ตํ๋๋ก ๋ฆฌ์กํธ์๊ฒ ์ ..
๐ ๋ค์ด๊ฐ๋ฉฐ React์์ ํ๋ฉด (DOM)๋ฅผ ์บก์ฒ, ์ ์ฅํ๋ ๊ธฐ๋ฅ์ ๋ํด์ ์์๋ณด๋ ค ํฉ๋๋ค. ์์ ํ ์ด ํ๋ก์ ํธ๋ฅผ ํ๋ฉด์ ์ฌ๋ฌ๊ฐ์ง ๋ฌธ์ ๋ฅผ ๋ง์ด ํ์๋๋ฐ, ๊ฒฐ๊ณผ์ ์ผ๋ก ์ฑ๊ณตํ ๋ฐฉ๋ฒ๋ค๋ก ํฌ์คํ ํ๊ฒ ๋ฉ๋๋ค. ์บก์ณ(์คํฌ๋ฆฐ์ท)์ ๋์์ฃผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค ๋ํ์ ์ผ๋ก html2canvas, dom-to-image, html-to-image ๋ฑ์ด ์์ต๋๋ค. ๊ธฐ๋ฅ์ ๊ตฌํํ๋ฉด์ html2canvas์ dom-to-image๋ฅผ ๋ชจ๋ ์ฌ์ฉํด ๋ดค์ต๋๋ค. ์ ๊ฐ ์ฌ์ฉํด ๋ณธ ๋ ๊ฐ์ง ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ํด์๋ ์ผ๋ฐ์ ์ผ๋ก ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ชจ๋ ์์ญ์ ์ ํํ๊ฒ ์บก์ฒํ๊ณ DOM ์์์ ์ ์ฉ๋ CSS ์คํ์ผ์ ์บก์ฒํ๋ ๋ฐ ํฐ ๋ฌธ์ ๋ ์์์ต๋๋ค. ๊ทธ๋ฌ๋ dom-to-image๊ฐ html2canvas๋ณด๋ค ๋ ๋น ๋ฅด๊ณ ์์ ์ ์ด๋ผ๊ณ ํ๋ ์ฌ์ฉ์๋ ์๋ค๊ณ ํฉ๋๋ค..