๐Ÿ’ป์šฉ๋‡ฝ ๊ฐœ๋ฐœ ๋…ธํŠธ๐Ÿ’ป
article thumbnail
[React] ๊ฐ€์ƒ ๋”(Virtual DOM)์ด ๋ฌด์—‡์ด๊ณ  ์™œ ์ค‘์š”ํ• ๊นŒ์š”?

๐Ÿ“– ๋“ค์–ด๊ฐ€๋ฉฐ๋ฆฌ์•กํŠธ๊ฐ€ ๋›ฐ์–ด๋‚œ ์„ฑ๋Šฅ์„ ๋ณด์—ฌ์ค„ ์ˆ˜ ์žˆ๋Š” ๋น„๊ฒฐ ์ค‘ ํ•˜๋‚˜๋Š” ๋ฐ”๋กœ ๊ฐ€์ƒ ๋”(Virtual DOM)์ž…๋‹ˆ๋‹ค.์ด๋Š” ๋ฆฌ์•กํŠธ์˜ ํ•ต์‹ฌ ๊ฐœ๋… ์ค‘ ํ•˜๋‚˜๋กœ ๊ฐ€์ƒ ๋”์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.DOM(Document Object Model)์›น ์‚ฌ์ดํŠธ์— ์ ‘์†ํ•˜๋ฉด ๋ณด์ด๋Š” ๊ฐ๊ฐ์˜ ์š”์†Œ(Element)๋“ค์ด ๋ชจ์—ฌ ํ•˜๋‚˜์˜ ๋ฌธ์„œ(Document)๋ฅผ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค.์ด๋Ÿฌํ•œ ๋ฌธ์„œ์˜ ๊ตฌ์กฐ๋ฅผ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๊ฐ€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋„๋ก ํ‘œํ˜„ํ•œ ๊ฒƒ์ด ๋ฐ”๋กœ DOM์ž…๋‹ˆ๋‹ค.DOM์€ ์š”์†Œ๋“ค์„ ํŠธ๋ฆฌ(Tree) ํ˜•ํƒœ๋กœ ํ‘œํ˜„ํ•˜๋ฉฐ, ๊ฐ ์š”์†Œ์— ํ•ด๋‹นํ•˜๋Š” ๋…ธ๋“œ(Node)๊ฐ€ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.๊ฐœ๋ฐœ์ž๋“ค์€ DOM์ด ์ œ๊ณตํ•˜๋Š” API๋ฅผ ์ด์šฉํ•ด ์ด๋Ÿฌํ•œ DOM ๊ตฌ์กฐ์— ์ ‘๊ทผํ•˜๊ณ , ๋‚ด์šฉ์ด๋‚˜ ์Šคํƒ€์ผ์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.์ด๋Ÿฐ ๊ณผ์ •์„ DOM ์กฐ์ž‘์ด๋ผ๊ณ  ๋ถ€๋ฆ…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์˜ˆ๋ฅผ ๋“ค์–ด, ์›น ํŽ˜์ด์ง€์˜ ํŠน์ •..

article thumbnail
[๋„คํŠธ์›Œํฌ] HTTP๋ž€ ๋ฌด์—‡์ผ๊นŒ์š”?

์ •์˜ HTTP๋ž€ Hyper Text Transfer Protocol์˜ ์•ฝ์ž๋กœ ์›น์ƒ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›๊ธฐ ์œ„ํ•œ ํ”„๋กœํ† ์ฝœ์ž…๋‹ˆ๋‹ค. ์ž‘๋™์›๋ฆฌ HTTP๋Š” ํด๋ผ์ด์–ธํŠธ-์„œ๋ฒ„ ๋ชจ๋ธ์— ๊ธฐ๋ฐ˜์„ ๋‘๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ๋Š” ์„œ๋ฒ„์— ์š”์ฒญ(request)๋ฅผ ๋ณด๋‚ด๊ณ , ์„œ๋ฒ„๋Š” ์ด์— ๋Œ€ํ•œ ์‘๋‹ต(response)์„ ๋ณด๋ƒ…๋‹ˆ๋‹ค. HTTP ๋ฉ”์†Œ๋“œ HTTP ๋ฉ”์†Œ๋“œ๋Š” ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ˆ˜ํ–‰ํ•˜๋Š” ๋™์ž‘์„ ์„œ๋ฒ„์—๊ฒŒ ์•Œ๋ ค์ค๋‹ˆ๋‹ค. ์ฆ‰, ํด๋ผ์ด์–ธํŠธ๋Š” ์š”์ฒญ(request)์˜ ๋ชฉ์ ์— ๋”ฐ๋ผ ์ ์ ˆํ•œ HTTP ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. HTTP ๋ฉ”์†Œ๋“œ ์„ค๋ช… ์‚ฌ์šฉ ์˜ˆ์‹œ GET ๋ฐ์ดํ„ฐ ์กฐํšŒ๋ฅผ ์š”์ฒญ ํŠน์ • ํŽ˜์ด์ง€ ์ ‘์†, ์ •๋ณด ๊ฒ€์ƒ‰ POST ๋ฐ์ดํ„ฐ ์ƒ์„ฑ ์š”์ฒญ ํšŒ์›๊ฐ€์ž…, ๊ธ€์“ฐ๊ธฐ PUT ๋ฐ์ดํ„ฐ ์ˆ˜์ • ์š”์ฒญ ํšŒ์› ์ •๋ณด ์ˆ˜์ •, ๊ธ€ ์ˆ˜์ • DELETE ๋ฐ์ดํ„ฐ ์‚ญ์ œ ์š”์ฒญ ํšŒ์› ์ •๋ณด ์‚ญ์ œ, ๊ธ€ ์‚ญ..

article thumbnail
[React] ํ•จ์ˆ˜(Function) ์ปดํฌ๋„ŒํŠธ vs ํด๋ž˜์Šค(Class) ์ปดํฌ๋„ŒํŠธ ์ฐจ์ด๊ฐ€ ๋ญ˜๊นŒ์š”?

๐Ÿ“– ๋“ค์–ด๊ฐ€๋ฉฐ ํ•จ์ˆ˜ ์ปดํฌ๋„ŒํŠธ ๋„์ž… ๋ฆฌ์•กํŠธ์—์„œ ํ•จ์ˆ˜ ์ปดํฌ๋„ŒํŠธ๋Š” ๋ฆฌ์•กํŠธ๊ฐ€ ์ฒ˜์Œ ์ƒ๊ฒผ์„ ๋•Œ๋ถ€ํ„ฐ ์žˆ์—ˆ์ง€๋งŒ, ์ฒ˜์Œ์—๋Š” ์ƒํƒœ๊ด€๋ฆฌ๋‚˜ ์ƒ๋ช…์ฃผ๊ธฐ ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์–ด์„œ ์ฃผ๋กœ ๋‹จ์ˆœํ•œ ํ‘œํ˜„์„ ์œ„ํ•œ ์šฉ๋„๋กœ ์‚ฌ์šฉ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ, ๋ฆฌ์•กํŠธ 16.8 ๋ฒ„์ „์—์„œ Hooks๊ฐ€ ๋„์ž…๋˜๋ฉด์„œ ํ•จ์ˆ˜ ์ปดํฌ๋„ŒํŠธ์—์„œ๋„ ์ƒํƒœ๊ด€๋ฆฌ์™€ ์ƒ๋ช…์ฃผ๊ธฐ ๋ฉ”์†Œ๋“œ์™€ ์œ ์‚ฌํ•œ ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. Hooks์˜ ๋„์ž…์€ ํ•จ์ˆ˜ ์ปดํฌ๋„ŒํŠธ์˜ ํ™œ์šฉ ๋ฒ”์œ„๋ฅผ ํฌ๊ฒŒ ํ™•์žฅ์‹œํ‚ค๊ณ , ํ˜„์žฌ๋Š” ํ•จ์ˆ˜ ์ปดํฌ๋„ŒํŠธ๋งŒ์œผ๋กœ๋„ ๋Œ€๋ถ€๋ถ„์˜ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๊ณ , ๊ทธ ๊ฒฐ๊ณผ ํ•จ์ˆ˜ ์ปดํฌ๋„ŒํŠธ์˜ ์‚ฌ์šฉ์ด ํฌ๊ฒŒ ๋Š˜์—ˆ์Šต๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ ๋ฆฌ์•กํŠธ ๊ณต์‹๋ฌธ์„œ์—์„œ๋„ ํด๋ž˜์Šค ์ปดํฌ๋„ŒํŠธ๋ณด๋‹ค ํ•จ์ˆ˜ ์ปดํฌ๋„ŒํŠธ๋กœ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํ•จ์ˆ˜ํ˜•(Functional)์ด ์•„๋‹ˆ๋ผ ํ•จ์ˆ˜(Function) ์ปดํฌ๋„ŒํŠธ๋ผ๊ณ  ๋ถ€๋ฅด..

article thumbnail
[JavaScript] ์ด๋ฒคํŠธ ๋ฒ„๋ธ”๋ง๊ณผ ์บก์ณ๋ง์ด ๋ฌด์—‡์ธ์ง€ ์•Œ์•„๋ด…์‹œ๋‹ค.

๐Ÿ“– ๋“ค์–ด๊ฐ€๋ฉฐ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ํ•ต์‹ฌ ๊ฐœ๋… ์ค‘ ํ•˜๋‚˜์ธ ์ด๋ฒคํŠธ ๋ฒ„๋ธ”๋ง๊ณผ ์บก์ณ๋ง์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋ฒ„๋ธ”๋ง(Bubbling) ์ด๋ฒคํŠธ ๋ฒ„๋ธ”๋ง์ด๋ž€ ๋ฌด์—‡์ผ๊นŒ์š”? ํ•œ ์š”์†Œ์— ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด, ํ•ด๋‹น ์š”์†Œ์— ํ• ๋‹น๋œ ํ•ธ๋“ค๋Ÿฌ๊ฐ€ ๋™์ž‘ํ•˜๊ณ , ์ด์–ด์„œ ๋ถ€๋ชจ ์š”์†Œ์˜ ํ•ธ๋“ค๋Ÿฌ๊ฐ€ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ€์žฅ ์ตœ์ƒ๋‹จ์˜ ์กฐ์ƒ ์š”์†Œ๋ฅผ ๋งŒ๋‚  ๋•Œ๊นŒ์ง€ ํ•ด๋‹น ๊ณผ์ •์ด ๋ฐ˜๋ณต์ด ๋ฉ๋‹ˆ๋‹ค. ๊ฐ„๋‹จํ•œ ์•„๋ž˜ ์ฝ”๋“œ ์˜ˆ์ œ๋ฅผ ๋ณด๋ฉด ๋ฐ”๋กœ ์ดํ•ด๊ฐ€ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ฐ€์žฅ ์•ˆ์ชฝ์— ์žˆ๋Š” pํƒœ๊ทธ๋ฅผ ํด๋ฆญํ–ˆ๋Š”๋ฐ 3๊ฐœ์˜ ํ•ธ๋“ค๋Ÿฌ๊ฐ€ ๋™์ž‘ํ•˜๋Š” ๊ฒŒ ๋ณด์ด์‹œ๋‚˜์š”? p์— ํ• ๋‹น๋œ onclick ํ•ธ๋“ค๋Ÿฌ ์‹คํ–‰ ๋ฐ”๊นฅ์˜ div์— ํ• ๋‹น๋œ ํ•ธ๋“ค๋Ÿฌ ์‹คํ–‰ ๊ทธ ๋ฐ”๊นฅ์˜ form์— ํ• ๋‹น๋œ ํ•ธ๋“ค๋Ÿฌ ์‹คํ–‰ documnet ๊ฐ์ฒด๋ฅผ ๋งŒ๋‚  ๋•Œ๊นŒ์ง€, ๊ฐ ์š”์†Œ์— ํ• ๋‹น๋œ onclick ํ•ธ๋“ค๋Ÿฌ๊ฐ€ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค. ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ div๋ฅผ ํด๋ฆญํ•˜๋ฉด div -..

article thumbnail
[JavaScript] ํ˜ธ์ด์ŠคํŒ…(hoisting)์ด ๋„๋Œ€์ฒด ๋ญ˜๊นŒ? ์‰ฝ๊ฒŒ ์ดํ•ดํ•˜๊ธฐ

๐Ÿ“– ๋“ค์–ด๊ฐ€๋ฉฐ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ์ฝ”๋“œ์˜ ์‹คํ–‰ ์ˆœ์„œ์™€ ์Šค์ฝ”ํ”„๋ฅผ ์ดํ•ดํ•˜๋Š” ๋ฐ ์ค‘์š”ํ•œ ์—ญํ• ์„ ํ•˜๋Š” ์ค‘์š”ํ•œ ๊ฐœ๋… ์ค‘ ํ•˜๋‚˜์ธ ํ˜ธ์ด์ŠคํŒ…(hoisting)์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ํ˜ธ์ด์ŠคํŒ…(hoisting)์ด๋ž€ โ“ ํ˜ธ์ด์ŠคํŒ…์€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์ด ์Šคํฌ๋ฆฝํŠธ๋ฅผ ํ•ด์„ํ•˜๊ณ  ์‹คํ–‰ํ•˜๋Š” ๊ณผ์ •์—์„œ, ๋ณ€์ˆ˜๋‚˜ ํ•จ์ˆ˜, ํด๋ž˜์Šค ์„ ์–ธ์„ ์ฝ”๋“œ์˜ ๋งจ ์œ„๋กœ '๋Œ์–ด์˜ฌ๋ฆฌ๋Š”' ๊ฒƒ๊ณผ ๊ฐ™์€ ํ˜„์ƒ์„ ๋งํ•ฉ๋‹ˆ๋‹ค. ๋ณดํ†ต ํ˜ธ์ด์ŠคํŒ…์— ๋Œ€ํ•œ ์„ค๋ช…์„ ๋ณด๋ฉด '๋Œ์–ด์˜ฌ๋ ค์ง„๋‹ค'๋ผ๊ณ  ๋Œ€๋ถ€๋ถ„ ์„ค๋ช…์ด ๋˜์–ด ์žˆ๋Š”๋ฐ ํ˜ธ์ด์ŠคํŒ…์ด ์‹ค์ œ๋กœ ์ฝ”๋“œ๋ฅผ ๋ฌผ๋ฆฌ์ ์œผ๋กœ ์ตœ์ƒ๋‹จ์œผ๋กœ ์˜ฎ๊ธฐ๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. ์ด๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์˜ ๋‚ด๋ถ€ ๋™์ž‘ ๋ฐฉ์‹์„ ์„ค๋ช…ํ•˜๋Š” ๊ฐœ๋…์ผ ๋ฟ์ž…๋‹ˆ๋‹ค. ํ˜ธ์ด์ŠคํŒ…์€ ์‹คํ–‰ ์ปจํ…์ŠคํŠธ์˜ ์ƒ์„ฑ ๋‹จ๊ณ„์—์„œ ์ผ์–ด๋‚ฉ๋‹ˆ๋‹ค. ์‹คํ–‰ ์ปจํ…์ŠคํŠธ๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋˜๋Š” ํ™˜๊ฒฝ์„ ๋งํ•ฉ๋‹ˆ๋‹ค. ์ƒ์„ฑ ๋‹จ๊ณ„์—์„œ๋Š” ๋ณ€์ˆ˜..

article thumbnail
[JavaScript] ์ด๋ฒคํŠธ ๋ฃจํ”„(Event Loop)์— ๋Œ€ํ•ด์„œ ํŒŒํ—ค์ณ ๋ด…์‹œ๋‹ค.

๐Ÿ“– ๋“ค์–ด๊ฐ€๋ฉฐ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ์ด๋ฒคํŠธ ๋ฃจํ”„(Event Loop)๋Š” ๋ฌด์—‡์ด๊ณ , ์™œ ์ค‘์š”ํ•œ ๊ฐœ๋…์ผ๊นŒ์š”? ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ(Single Thread)๋ž€? ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ ๊ธฐ๋ฐ˜์˜ ์–ธ์–ด์ž…๋‹ˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ๋ž€ ๋ฌด์—‡์ผ๊นŒ์š”? ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ๋ฅผ ์ดํ•ดํ•˜๊ธฐ ์ „์— ์Šค๋ ˆ๋“œ๋ผ๋Š” ๊ฐœ๋…์„ ๋จผ์ € ์•Œ์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์Šค๋ ˆ๋“œ๋Š” ํ”„๋กœ์„ธ์Šค์˜ ์‹คํ–‰ ๋‹จ์œ„์ž…๋‹ˆ๋‹ค. ์ฆ‰, ์ผ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์ž‘์€ ์š”์›๊ณผ ๊ฐ™์€ ์—ญํ• ์„ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ๋ผ๋Š” ๊ฒƒ์€ ๋ง ๊ทธ๋Œ€๋กœ ์Šค๋ ˆ๋“œ๊ฐ€ ํ•˜๋‚˜๋งŒ ์กด์žฌ, ์ผ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์ž‘์€ ์š”์›์ด ํ•œ ๋ช… ๋ฐ–์— ์—†๋Š” ์–˜๊ธฐ์ž…๋‹ˆ๋‹ค. ๋ธ”๋กœํ‚น(Blocking)๊ณผ ๋…ผ๋ธ”๋กœํ‚น(Non-blocking) ์šฐ๋ฆฌ์˜ ์ž‘์€ ์š”์›์€ ํ•œ ๋ช…์ด๋ผ์„œ ๋ชจ๋“  ์ผ์„ ํ•œ ๋ฒˆ์— ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋งŒ์•ฝ ์šฐ๋ฆฌ๊ฐ€ ์ปดํ“จํ„ฐ์—๊ฒŒ ๋งก๊ธด ์ผ ์ค‘ ํ•˜๋‚˜๊ฐ€ ๋„ˆ๋ฌด ์˜ค๋ž˜ ๊ฑธ๋ฆฐ๋‹ค๋ฉด ์–ด๋–ป..

article thumbnail
[React] ์„ฑ๋Šฅ ์ตœ์ ํ™” useCallback์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด๊ธฐ

๐Ÿ“– ๋“ค์–ด๊ฐ€๋ฉฐ ์ด์ „ ๊ธ€ React.memo ๊ธ€์—์„œ ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ์—์„œ ํ•จ์ˆ˜๋ฅผ props๋กœ ๋ฐ›์„ ๋•Œ ํ•ด๊ฒฐํ•  ์ˆ˜ ์—†๋Š” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” useCallback์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. useCallback์ด๋ž€ โ“ ๋จผ์ € React์—์„œ useCallback์€ ๋ฆฌ๋ Œ๋”๋ง ์‚ฌ์ด์— ํ•จ์ˆ˜ ์ •์˜๋ฅผ ์บ์‹œ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” React ํ›…์ž…๋‹ˆ๋‹ค. ์ฆ‰, useCallback ํ›…์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ปดํฌ๋„ŒํŠธ ์‹คํ–‰ ์ „๋ฐ˜์— ๊ฑธ์ณ ํ•จ์ˆ˜๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ํ›…์œผ๋กœ React์— ํ•จ์ˆ˜๋ฅผ ์บ์‹ฑํ•˜๊ณ  ๋งค ์‹คํ–‰๋งˆ๋‹ค ํ•ด๋‹น ํ•จ์ˆ˜๋ฅผ ์žฌ์ƒ์„ฑ๋˜๋Š” ์ƒํ™ฉ์„ ๋ง‰์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ ๋ฐฉ๋ฒ• ์บ์‹ฑํ•˜๋ ค๋Š” ํ•จ์ˆ˜๋ฅผ useCallback์œผ๋กœ ๋ž˜ํ•‘ ํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. // Button.js const Button = ({ onClick }) => { console.log('..

article thumbnail
[React] ์„ฑ๋Šฅ ์ตœ์ ํ™” React.memo์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด๊ธฐ

๐Ÿ“– ๋“ค์–ด๊ฐ€๋ฉฐ React์—์„œ ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” React.memo์— ๋Œ€ํ•ด ์†Œ๊ฐœํ•˜๊ณ , ๊ธฐ๋Šฅ์„ ์–ด๋–ค ์ƒํ™ฉ์—์„œ ์™œ ์‚ฌ์šฉํ•˜๊ณ  ๋™์ž‘์›๋ฆฌ์™€ ์‚ฌ์šฉ ์˜ˆ์‹œ ์ฝ”๋“œ๋„ ํ•จ๊ป˜ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. React.memo๋ž€ โ“ memo๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ•ด๋‹น ์ปดํฌ๋„ŒํŠธ์˜ props๊ฐ€ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ๋ฆฌ๋ Œ๋”๋ง์„ ๊ฑด๋„ˆ๋›ธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ๋ฉ”๋ชจํ™”๋œ ๋ฒ„์ „์˜ ์ปดํฌ๋„ŒํŠธ๋กœ ํ•ด๋‹น ์ปดํฌ๋„ŒํŠธ์˜ props๊ฐ€ ๋ณ€๊ฒฝ๋  ๋•Œ๋งŒ ๋ฆฌ๋ Œ๋”๋ง์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ปค๋‹ค๋ž€ ํ๋ชจ์˜ ์ปดํฌ๋„ŒํŠธ๋‚˜ ๋ณต์žกํ•œ ์ƒํ™ฉ์—์„œ ๋ถˆํ•„์š”ํ•œ ๋ฆฌ๋ Œ๋”๋ง์„ ๋ง‰์•„ ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋™์ž‘ ์›๋ฆฌ ๐Ÿ’ก React.memo๋Š” ์ธ์ž๋กœ ๋“ค์–ด๊ฐ„ ์ปดํฌ๋„ŒํŠธ์— ์–ด๋–ค props๊ฐ€ ์ž…๋ ฅ๋˜๋Š”์ง€ ํ™•์ธํ•˜๊ณ  ์ž…๋ ฅ๋˜๋Š” ๋ชจ๋“  props์˜ ์‹ ๊ทœ ๊ฐ’์„ ํ™•์ธํ•œ ๋’ค ์ด๋ฅผ ๊ธฐ์กด์˜ props์˜ ๊ฐ’๊ณผ ๋น„๊ตํ•˜๋„๋ก ๋ฆฌ์•กํŠธ์—๊ฒŒ ์ „..

article thumbnail
[React] ํ™”๋ฉด(DOM) ์บก์ณ ๋ฐ ์ €์žฅ ๊ธฐ๋Šฅ ๊ตฌํ˜„ํ•˜๊ธฐ (feat. html2canvas, file-saver)

๐Ÿ“– ๋“ค์–ด๊ฐ€๋ฉฐ React์—์„œ ํ™”๋ฉด (DOM)๋ฅผ ์บก์ฒ˜, ์ €์žฅํ•˜๋Š” ๊ธฐ๋Šฅ์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด๋ ค ํ•ฉ๋‹ˆ๋‹ค. ์ž‘์€ ํ† ์ด ํ”„๋กœ์ ํŠธ๋ฅผ ํ•˜๋ฉด์„œ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋ฌธ์ œ๋ฅผ ๋งž์ด ํ–ˆ์—ˆ๋Š”๋ฐ, ๊ฒฐ๊ณผ์ ์œผ๋กœ ์„ฑ๊ณตํ•œ ๋ฐฉ๋ฒ•๋“ค๋กœ ํฌ์ŠคํŒ…ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์บก์ณ(์Šคํฌ๋ฆฐ์ƒท)์„ ๋„์™€์ฃผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค ๋Œ€ํ‘œ์ ์œผ๋กœ html2canvas, dom-to-image, html-to-image ๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๋ฉด์„œ html2canvas์™€ dom-to-image๋ฅผ ๋ชจ๋‘ ์‚ฌ์šฉํ•ด ๋ดค์Šต๋‹ˆ๋‹ค. ์ œ๊ฐ€ ์‚ฌ์šฉํ•ด ๋ณธ ๋‘ ๊ฐ€์ง€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ๋Œ€ํ•ด์„œ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ๋‘ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ชจ๋‘ ์˜์—ญ์„ ์ •ํ™•ํ•˜๊ฒŒ ์บก์ฒ˜ํ•˜๊ณ  DOM ์š”์†Œ์— ์ ์šฉ๋œ CSS ์Šคํƒ€์ผ์„ ์บก์ฒ˜ํ•˜๋Š” ๋ฐ ํฐ ๋ฌธ์ œ๋Š” ์—†์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ dom-to-image๊ฐ€ html2canvas๋ณด๋‹ค ๋” ๋น ๋ฅด๊ณ  ์•ˆ์ •์ ์ด๋ผ๊ณ  ํ•˜๋Š” ์‚ฌ์šฉ์ž๋„ ์žˆ๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค..