๐ ๋ค์ด๊ฐ๋ฉฐ๋ฆฌ์กํธ๊ฐ ๋ฐ์ด๋ ์ฑ๋ฅ์ ๋ณด์ฌ์ค ์ ์๋ ๋น๊ฒฐ ์ค ํ๋๋ ๋ฐ๋ก ๊ฐ์ ๋(Virtual DOM)์ ๋๋ค.์ด๋ ๋ฆฌ์กํธ์ ํต์ฌ ๊ฐ๋ ์ค ํ๋๋ก ๊ฐ์ ๋์ ๋ํด ์์๋ณด๊ฒ ์ต๋๋ค.DOM(Document Object Model)์น ์ฌ์ดํธ์ ์ ์ํ๋ฉด ๋ณด์ด๋ ๊ฐ๊ฐ์ ์์(Element)๋ค์ด ๋ชจ์ฌ ํ๋์ ๋ฌธ์(Document)๋ฅผ ๊ตฌ์ฑํฉ๋๋ค.์ด๋ฌํ ๋ฌธ์์ ๊ตฌ์กฐ๋ฅผ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๊ฐ ์ดํดํ ์ ์๋๋ก ํํํ ๊ฒ์ด ๋ฐ๋ก DOM์ ๋๋ค.DOM์ ์์๋ค์ ํธ๋ฆฌ(Tree) ํํ๋ก ํํํ๋ฉฐ, ๊ฐ ์์์ ํด๋นํ๋ ๋ ธ๋(Node)๊ฐ ์กด์ฌํฉ๋๋ค.๊ฐ๋ฐ์๋ค์ DOM์ด ์ ๊ณตํ๋ API๋ฅผ ์ด์ฉํด ์ด๋ฌํ DOM ๊ตฌ์กฐ์ ์ ๊ทผํ๊ณ , ๋ด์ฉ์ด๋ ์คํ์ผ์ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.์ด๋ฐ ๊ณผ์ ์ DOM ์กฐ์์ด๋ผ๊ณ ๋ถ๋ฆ ๋๋ค. ํ์ง๋ง ์๋ฅผ ๋ค์ด, ์น ํ์ด์ง์ ํน์ ..
์ ์ HTTP๋ Hyper Text Transfer Protocol์ ์ฝ์๋ก ์น์์์ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๊ธฐ ์ํ ํ๋กํ ์ฝ์ ๋๋ค. ์๋์๋ฆฌ HTTP๋ ํด๋ผ์ด์ธํธ-์๋ฒ ๋ชจ๋ธ์ ๊ธฐ๋ฐ์ ๋๊ณ ์์ต๋๋ค. ํด๋ผ์ด์ธํธ๋ ์๋ฒ์ ์์ฒญ(request)๋ฅผ ๋ณด๋ด๊ณ , ์๋ฒ๋ ์ด์ ๋ํ ์๋ต(response)์ ๋ณด๋ ๋๋ค. HTTP ๋ฉ์๋ HTTP ๋ฉ์๋๋ ํด๋ผ์ด์ธํธ๊ฐ ์ํํ๋ ๋์์ ์๋ฒ์๊ฒ ์๋ ค์ค๋๋ค. ์ฆ, ํด๋ผ์ด์ธํธ๋ ์์ฒญ(request)์ ๋ชฉ์ ์ ๋ฐ๋ผ ์ ์ ํ HTTP ๋ฉ์๋๋ฅผ ์ฌ์ฉํฉ๋๋ค. HTTP ๋ฉ์๋ ์ค๋ช ์ฌ์ฉ ์์ GET ๋ฐ์ดํฐ ์กฐํ๋ฅผ ์์ฒญ ํน์ ํ์ด์ง ์ ์, ์ ๋ณด ๊ฒ์ POST ๋ฐ์ดํฐ ์์ฑ ์์ฒญ ํ์๊ฐ์ , ๊ธ์ฐ๊ธฐ PUT ๋ฐ์ดํฐ ์์ ์์ฒญ ํ์ ์ ๋ณด ์์ , ๊ธ ์์ DELETE ๋ฐ์ดํฐ ์ญ์ ์์ฒญ ํ์ ์ ๋ณด ์ญ์ , ๊ธ ์ญ..
๐ ๋ค์ด๊ฐ๋ฉฐ ํจ์ ์ปดํฌ๋ํธ ๋์ ๋ฆฌ์กํธ์์ ํจ์ ์ปดํฌ๋ํธ๋ ๋ฆฌ์กํธ๊ฐ ์ฒ์ ์๊ฒผ์ ๋๋ถํฐ ์์์ง๋ง, ์ฒ์์๋ ์ํ๊ด๋ฆฌ๋ ์๋ช ์ฃผ๊ธฐ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ์ ์์ด์ ์ฃผ๋ก ๋จ์ํ ํํ์ ์ํ ์ฉ๋๋ก ์ฌ์ฉ๋์์ต๋๋ค. ํ์ง๋ง, ๋ฆฌ์กํธ 16.8 ๋ฒ์ ์์ Hooks๊ฐ ๋์ ๋๋ฉด์ ํจ์ ์ปดํฌ๋ํธ์์๋ ์ํ๊ด๋ฆฌ์ ์๋ช ์ฃผ๊ธฐ ๋ฉ์๋์ ์ ์ฌํ ๊ธฐ๋ฅ์ ํ์ฉํ ์ ์๊ฒ ๋์์ต๋๋ค. Hooks์ ๋์ ์ ํจ์ ์ปดํฌ๋ํธ์ ํ์ฉ ๋ฒ์๋ฅผ ํฌ๊ฒ ํ์ฅ์ํค๊ณ , ํ์ฌ๋ ํจ์ ์ปดํฌ๋ํธ๋ง์ผ๋ก๋ ๋๋ถ๋ถ์ ๊ธฐ๋ฅ์ ๊ตฌํํ ์ ์๊ฒ ๋์๊ณ , ๊ทธ ๊ฒฐ๊ณผ ํจ์ ์ปดํฌ๋ํธ์ ์ฌ์ฉ์ด ํฌ๊ฒ ๋์์ต๋๋ค. ์ค์ ๋ก ๋ฆฌ์กํธ ๊ณต์๋ฌธ์์์๋ ํด๋์ค ์ปดํฌ๋ํธ๋ณด๋ค ํจ์ ์ปดํฌ๋ํธ๋ก ์์ฑํ๋ ๊ฒ์ ๊ถ์ฅํ๊ณ ์์ต๋๋ค. ํจ์ํ(Functional)์ด ์๋๋ผ ํจ์(Function) ์ปดํฌ๋ํธ๋ผ๊ณ ๋ถ๋ฅด..
๐ ๋ค์ด๊ฐ๋ฉฐ ์๋ฐ์คํฌ๋ฆฝํธ์ ํต์ฌ ๊ฐ๋ ์ค ํ๋์ธ ์ด๋ฒคํธ ๋ฒ๋ธ๋ง๊ณผ ์บก์ณ๋ง์ ๋ํด์ ์์๋ณด๊ฒ ์ต๋๋ค. ๋ฒ๋ธ๋ง(Bubbling) ์ด๋ฒคํธ ๋ฒ๋ธ๋ง์ด๋ ๋ฌด์์ผ๊น์? ํ ์์์ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๋ฉด, ํด๋น ์์์ ํ ๋น๋ ํธ๋ค๋ฌ๊ฐ ๋์ํ๊ณ , ์ด์ด์ ๋ถ๋ชจ ์์์ ํธ๋ค๋ฌ๊ฐ ๋์ํฉ๋๋ค. ๊ฐ์ฅ ์ต์๋จ์ ์กฐ์ ์์๋ฅผ ๋ง๋ ๋๊น์ง ํด๋น ๊ณผ์ ์ด ๋ฐ๋ณต์ด ๋ฉ๋๋ค. ๊ฐ๋จํ ์๋ ์ฝ๋ ์์ ๋ฅผ ๋ณด๋ฉด ๋ฐ๋ก ์ดํด๊ฐ ๋ ๊ฒ์ ๋๋ค. ๊ฐ์ฅ ์์ชฝ์ ์๋ pํ๊ทธ๋ฅผ ํด๋ฆญํ๋๋ฐ 3๊ฐ์ ํธ๋ค๋ฌ๊ฐ ๋์ํ๋ ๊ฒ ๋ณด์ด์๋์? p์ ํ ๋น๋ onclick ํธ๋ค๋ฌ ์คํ ๋ฐ๊นฅ์ div์ ํ ๋น๋ ํธ๋ค๋ฌ ์คํ ๊ทธ ๋ฐ๊นฅ์ form์ ํ ๋น๋ ํธ๋ค๋ฌ ์คํ documnet ๊ฐ์ฒด๋ฅผ ๋ง๋ ๋๊น์ง, ๊ฐ ์์์ ํ ๋น๋ onclick ํธ๋ค๋ฌ๊ฐ ๋์ํฉ๋๋ค. ๋ง์ฐฌ๊ฐ์ง๋ก div๋ฅผ ํด๋ฆญํ๋ฉด div -..
๐ ๋ค์ด๊ฐ๋ฉฐ ์๋ฐ์คํฌ๋ฆฝํธ์์ ์ฝ๋์ ์คํ ์์์ ์ค์ฝํ๋ฅผ ์ดํดํ๋ ๋ฐ ์ค์ํ ์ญํ ์ ํ๋ ์ค์ํ ๊ฐ๋ ์ค ํ๋์ธ ํธ์ด์คํ (hoisting)์ ๋ํด์ ์์๋ณด๊ฒ ์ต๋๋ค. ํธ์ด์คํ (hoisting)์ด๋ โ ํธ์ด์คํ ์ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ด ์คํฌ๋ฆฝํธ๋ฅผ ํด์ํ๊ณ ์คํํ๋ ๊ณผ์ ์์, ๋ณ์๋ ํจ์, ํด๋์ค ์ ์ธ์ ์ฝ๋์ ๋งจ ์๋ก '๋์ด์ฌ๋ฆฌ๋' ๊ฒ๊ณผ ๊ฐ์ ํ์์ ๋งํฉ๋๋ค. ๋ณดํต ํธ์ด์คํ ์ ๋ํ ์ค๋ช ์ ๋ณด๋ฉด '๋์ด์ฌ๋ ค์ง๋ค'๋ผ๊ณ ๋๋ถ๋ถ ์ค๋ช ์ด ๋์ด ์๋๋ฐ ํธ์ด์คํ ์ด ์ค์ ๋ก ์ฝ๋๋ฅผ ๋ฌผ๋ฆฌ์ ์ผ๋ก ์ต์๋จ์ผ๋ก ์ฎ๊ธฐ๋ ๊ฒ์ ์๋๋๋ค. ์ด๋ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ๋ด๋ถ ๋์ ๋ฐฉ์์ ์ค๋ช ํ๋ ๊ฐ๋ ์ผ ๋ฟ์ ๋๋ค. ํธ์ด์คํ ์ ์คํ ์ปจํ ์คํธ์ ์์ฑ ๋จ๊ณ์์ ์ผ์ด๋ฉ๋๋ค. ์คํ ์ปจํ ์คํธ๋ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๊ฐ ์คํ๋๋ ํ๊ฒฝ์ ๋งํฉ๋๋ค. ์์ฑ ๋จ๊ณ์์๋ ๋ณ์..
๐ ๋ค์ด๊ฐ๋ฉฐ ์๋ฐ์คํฌ๋ฆฝํธ์์ ์ด๋ฒคํธ ๋ฃจํ(Event Loop)๋ ๋ฌด์์ด๊ณ , ์ ์ค์ํ ๊ฐ๋ ์ผ๊น์? ์ฑ๊ธ ์ค๋ ๋(Single Thread)๋? ์๋ฐ์คํฌ๋ฆฝํธ๋ ์ฑ๊ธ ์ค๋ ๋ ๊ธฐ๋ฐ์ ์ธ์ด์ ๋๋ค. ๊ทธ๋ ๋ค๋ฉด ์ฑ๊ธ ์ค๋ ๋๋ ๋ฌด์์ผ๊น์? ์ฑ๊ธ ์ค๋ ๋๋ฅผ ์ดํดํ๊ธฐ ์ ์ ์ค๋ ๋๋ผ๋ ๊ฐ๋ ์ ๋จผ์ ์์์ผ ํฉ๋๋ค. ์ค๋ ๋๋ ํ๋ก์ธ์ค์ ์คํ ๋จ์์ ๋๋ค. ์ฆ, ์ผ์ ์ฒ๋ฆฌํ๋ ์์ ์์๊ณผ ๊ฐ์ ์ญํ ์ ํ๋ค๊ณ ์๊ฐํ๋ฉด ๋ฉ๋๋ค. ์ฑ๊ธ ์ค๋ ๋๋ผ๋ ๊ฒ์ ๋ง ๊ทธ๋๋ก ์ค๋ ๋๊ฐ ํ๋๋ง ์กด์ฌ, ์ผ์ ์ฒ๋ฆฌํ๋ ์์ ์์์ด ํ ๋ช ๋ฐ์ ์๋ ์๊ธฐ์ ๋๋ค. ๋ธ๋กํน(Blocking)๊ณผ ๋ ผ๋ธ๋กํน(Non-blocking) ์ฐ๋ฆฌ์ ์์ ์์์ ํ ๋ช ์ด๋ผ์ ๋ชจ๋ ์ผ์ ํ ๋ฒ์ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค. ๋ง์ฝ ์ฐ๋ฆฌ๊ฐ ์ปดํจํฐ์๊ฒ ๋งก๊ธด ์ผ ์ค ํ๋๊ฐ ๋๋ฌด ์ค๋ ๊ฑธ๋ฆฐ๋ค๋ฉด ์ด๋ป..
๐ ๋ค์ด๊ฐ๋ฉฐ ์ด์ ๊ธ 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๋ณด๋ค ๋ ๋น ๋ฅด๊ณ ์์ ์ ์ด๋ผ๊ณ ํ๋ ์ฌ์ฉ์๋ ์๋ค๊ณ ํฉ๋๋ค..