Curl Up Black Cat

์ด๋ฒˆ ํฌ์ŠคํŒ…์€ "๋ฆฌ์•กํŠธ๋ฅผ ๋‹ค๋ฃจ๋Š” ๊ธฐ์ˆ " ์„œ์ ์„ ํ•™์Šตํ•˜๋ฉฐ ๋‚ด์šฉ์„ ์ •๋ฆฌํ•˜์˜€์Šต๋‹ˆ๋‹ค.

์™œ ๋ฆฌ์•กํŠธ์ธ๊ฐ€?

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

์ด์— ํŽ˜์ด์Šค๋ถ ๊ฐœ๋ฐœํŒ€์€ ์•„์ด๋””์–ด๋ฅผ ๊ณ ์•ˆํ•ด ๋ƒˆ์Šต๋‹ˆ๋‹ค.

 

์–ด๋–ค ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€ํ•  ๋•Œ๋งˆ๋‹ค ์–ด๋–ค ๋ณ€ํ™”๋ฅผ ์ค„์ง€ ๊ณ ๋ฏผํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๊ทธ๋ƒฅ ๊ธฐ์กด ๋ทฐ๋ฅผ ๋‚ ๋ ค ๋ฒ„๋ฆฌ๊ณ  ์ฒ˜์Œ๋ถ€ํ„ฐ ์ƒˆ๋กœ ๋ Œ๋”๋ง ํ•œ๋‹ค.

 

์ด๋ ‡๊ฒŒ ํ•˜๊ฒŒ๋˜๋ฉด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ตฌ์กฐ๊ฐ€ ๋งค์šฐ ๊ฐ„๋‹จํ•ด์ง€๊ณ , ์ž‘์„ฑํ•ด์•ผ ํ•  ์ฝ”๋“œ์–‘์ด ๋งŽ์ด ์ค„์–ด ๋“ค๋ฉฐ, ๋” ์ด์ƒ ์–ด๋–ป๊ฒŒ ๋ณ€ํ™”๋ฅผ ์ค„์ง€ ์‹ ๊ฒฝ ์“ธ ํ•„์š”๊ฐ€ ์—†๊ณ , ๊ทธ์ € ๋ทฐ๊ฐ€ ์–ด๋–ป๊ฒŒ ์ƒ๊ธธ์ง€ ์„ ์–ธ๋งŒ ํ•˜๋ฉด ๋˜๋ฉฐ, ๋ฐ์ดํ„ฐ ๋ณ€ํ™”๊ฐ€ ์žˆ์œผ๋ฉด ๊ธฐ์กด์— ์žˆ๋˜ ๊ฒƒ์„ ๋ฒ„๋ฆฌ๊ณ  ์ƒˆ๋กœ ๋ Œ๋”๋ง ๋˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

 

ํŽ˜์ด์Šค๋ถ ๊ฐœ๋ฐœ ํŒ€์€ ์ด๋Ÿฐ ๋ฐฉ์‹์„ ์ฑ„ํƒํ•˜์—ฌ ์ตœ๋Œ€ํ•œ ์„ฑ๋Šฅ์„ ์•„๋ผ๊ณ  ํŽธ์•ˆํ•œ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜(user experience)์„ ์ œ๊ณตํ•˜๋ฉด์„œ ๊ตฌํ˜„ํ•˜๊ณ ์ž ๊ฐœ๋ฐœํ•œ ๊ฒƒ์ด ๋ฆฌ์•กํŠธ(React) ์ž…๋‹ˆ๋‹ค.

 

๋ฆฌ์•กํŠธ์˜ ์ดํ•ด

์ด๋ฏธ์ง€์ถœ์ฒ˜: reactjs

๋ฆฌ์•กํŠธ๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ์„œ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ด€๋ฆฌ ๊ตฌ์กฐ๊ฐ€ MVC, MVW ๋“ฑ์ธ ํ”„๋ ˆ์ž„์›Œํฌ์™€ ๋‹ฌ๋ฆฌ ์˜ค์ง V(View)๋งŒ ์‹ ๊ฒฝ ์“ฐ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ž…๋‹ˆ๋‹ค.

 

๋ฆฌ์•กํŠธ์—์„œ๋Š” ํŠน์ • ๋ถ€๋ถ„์ด ์–ด๋–ป๊ฒŒ ์ƒ๊ธธ์ง€ ์ •ํ•˜๋Š” ์„ ์–ธ์ฒด๊ฐ€ ์žˆ๋Š”๋ฐ ์ด๋ฅผ ์ปดํฌ๋„ŒํŠธ(component) ๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ปดํฌ๋„ŒํŠธ๋Š” ์žฌ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•œ API ๋กœ ์ˆ˜๋งŽ์€ ๊ธฐ๋Šฅ๋“ค์„ ๋‚ด์žฅํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ์ปดํฌ๋„ŒํŠธ ํ•˜๋‚˜์—์„œ ์ปดํฌ๋„ŒํŠธ์˜ ์ƒ๊น€์ƒˆ์™€ ์ž‘๋™ ๋ฐฉ์‹์„ ์ •์˜ํ•˜์—ฌ ์‚ฌ์šฉํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

 

๋˜ํ•œ ์‚ฌ์šฉ์ž ํ™”๋ฉด์— ๋ทฐ๋ฅผ ๋ณด์—ฌ ์ฃผ๋Š” ๊ฒƒ์„ ๋ Œ๋”๋ง์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

๋ฆฌ์•กํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ๋ทฐ๋ฅผ ์–ด๋–ป๊ฒŒ ๋ Œ๋”๋งํ•˜๊ธธ๋ž˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€ํ•  ๋•Œ๋งˆ๋‹ค ์ƒˆ๋กญ๊ฒŒ ๋ฆฌ๋ Œ๋”๋ง ํ•˜๋ฉด์„œ ์„ฑ๋Šฅ์„ ์•„๋ผ๊ณ , ์ตœ์ ์˜ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ์ œ๊ณต ํ•  ์ˆ˜ ์žˆ์„๊นŒ์š”? ์ด๋ฅผ ์ดํ•ดํ•˜๋ ค๋ฉด '์ดˆ๊ธฐ๋ Œ๋”๋ง'๊ณผ '๋ฆฌ๋ Œ๋”๋ง' ๊ฐœ๋…์„ ์ดํ•ดํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

1) ์ดˆ๊ธฐ ๋ Œ๋”๋ง

์ปดํฌ๋„ŒํŠธ์˜ render ํ•จ์ˆ˜๋ฅผ ํ†ตํ•˜์—ฌ ๋ Œ๋”๋ง์ด ์ด๋ฃจ์–ด์ง€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๋ Œ๋”ํ•จ์ˆ˜๋Š” ๋ทฐ๊ฐ€ ์–ด๋–ป๊ฒŒ ์ƒ๊ฒผ๊ณ  ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์ง€๋‹Œ ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. render ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰ํ•˜๋ฉด ๋ Œ๋”๋ง์ด ์ด๋ฃจ์–ด์ง€๊ณ  HTML ๋งˆํฌ์—…(markup) ์„ ๋งŒ๋“ค๊ณ  ์ด๋ฅผ DOM ์š”์†Œ ์•ˆ์— ์ฃผ์ž…ํ•˜๋Š” ์ž‘์—…์ด ์ด๋ฃจ์–ด ์ง€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

 

2) ๋ฆฌ๋ Œ๋”๋ง(์กฐํ™” ๊ณผ์ •)

๋ทฐ๋ฅผ ์—…๋ฐ์ดํŠธ ํ• ์ ์— "์—…๋ฐ์ดํŠธ ๊ณผ์ •์„ ๊ฑฐ์นœ๋‹ค" ๋ผ๊ณ  ํ•˜๊ธฐ๋ณด๋‹ค "์กฐํ™” ๊ณผ์ •์„ ๊ฑฐ์นœ๋‹ค" ๋ผ๊ณ  ํ•˜๋Š” ๊ฒƒ์ด ๋” ์ •ํ™•ํ•œ ํ‘œํ˜„์ž…๋‹ˆ๋‹ค. ์ด์œ ๋Š” ์ƒˆ๋กœ์šด DOM ์š”์†Œ๋กœ ๊ฐˆ์•„ ๋ผ์šฐ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

๋ฆฌ์•กํŠธ๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฉด render ํ•จ์ˆ˜๊ฐ€ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒฐ๊ณผ๋ฅผ ๊ณง๋ฐ”๋กœ DOM ์— ๋ฐ˜์˜ํ•˜์ง€ ์•Š๊ณ , ์ด์ „์— render ํ•จ์ˆ˜๊ฐ€ ๋งŒ๋“ค์—ˆ๋˜ ์ปดํฌ๋„ŒํŠธ ์ •๋ณด์™€ ํ˜„์žฌ render ํ•จ์ˆ˜๊ฐ€ ๋งŒ๋“  ์ปดํฌ๋„ŒํŠธ ์ •๋ณด๋ฅผ ๋น„๊ตํ•œํ›„ DOM ํŠธ๋ฆฌ๋ฅผ ์—…๋ฐ์ดํŠธ ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

 

๋ฆฌ์•กํŠธ์˜ ํŠน์ง•

๋ฆฌ์•กํŠธ์˜ ์ฃผ์š” ํŠน์ง• ์ค‘ ํ•˜๋‚˜๋Š” Virtual DOM์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ

 

์šฐ์„  DOM ์ด ๋ฌด์—‡์ธ์ง€ ๋ถ€ํ„ฐ ์•Œ์•„๋ณด๋ฉด.. DOM ์ด๋ž€ ๋ฌธ์„œ๊ฐ์ฒด ๋ชจ๋ธ(Document Object Model)์˜ ์•ฝ์–ด์ž…๋‹ˆ๋‹ค. ์›น ๋ธŒ๋ผ์šฐ์ €๋Š” DOM ์„ ํ™œ์šฉํ•˜์—ฌ ๊ฐ์ฒด์— ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์™€ CSS ๋ฅผ ์ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. DOM ์€ ํŠธ๋ฆฌํ˜•ํƒœ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋Š”๋ฐ DOM ์„ ํ†ตํ•ด์„œ ํŠน์ • ๋…ธ๋“œ๋ฅผ ์ฐพ๊ฑฐ๋‚˜ ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜ ์ œ๊ฑฐํ•˜๊ฑฐ๋‚˜ ์›ํ•˜๋Š” ๊ณณ์— ์‚ฝ์ž…ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์ด๋ฏธ์ง€์ถœ์ฒ˜: ์œ„ํ‚ค๋ฐฑ๊ณผ

DOM ์€ ๊ณผ์—ฐ ๋Š๋ฆด๊นŒ?

DOM ์—๋Š” ์น˜๋ช…์ ์ธ ํ•œ ๊ฐ€์ง€ ๋ฌธ์ œ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ”๋กœ ๋™์  UI์— ์ตœ์ ํ™”๋˜์–ด ์žˆ์ง€ ์•Š๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

"์š”์ฆˆ์Œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์€ ๋งค์šฐ ๋น ๋ฅธ ๋ฐ˜๋ฉด, DOM ์€ ๋Š๋ฆฌ๋‹ค?" ๋ผ๊ณ  ํ•˜๋Š”๋ฐ ์ด๋Š” ์ •ํ™•ํ•œ ๋ง์ด ์•„๋‹™๋‹ˆ๋‹ค.

DOM ์ž์ฒด๋Š” ๋น ๋ฆ…๋‹ˆ๋‹ค. ๋‹จ ์›น ๋ธŒ๋ผ์šฐ์ € ๋‹จ์—์„œ DOM ์— ๋ณ€ํ™”๊ฐ€ ์ผ์–ด๋‚˜๋ฉด ์›น๋ธŒ๋ผ์šฐ์ €๊ฐ€ CSS๋ฅผ ๋‹ค์‹œ ์—ฐ์‚ฐํ•˜๊ณ , ๋ ˆ์ด์•„์›ƒ์„ ๊ตฌ์„ฑํ•˜๊ณ , ํŽ˜์ด์ง€๋ฅผ ๋ฆฌํŽ˜์ธํŠธํ•˜๊ฒŒ๋˜๋Š”๋ฐ ์ด ๊ณผ์ •์—์„œ ์‹œ๊ฐ„์ด ํ—ˆ๋น„๋˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด์— ๋Œ€ํ•œ ํ•ด๊ฒฐ๋ฒ•์œผ๋กœ DOM์„ ์ตœ์†Œํ•œ์œผ๋กœ ์กฐ์ž‘ํ•˜์—ฌ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

Virtual DOM

์ด๋ฏธ์ง€์ถœ์ฒ˜: speakerdeck

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

 

๋ฆฌ์•กํŠธ์—์„œ ์‹ค์ œ DOM์„ ์—…๋ฐ์ดํŠธ ํ•  ๋•Œ ์„ธ๊ฐ€์ง€ ์ ˆ์ฐจ๋ฅผ ๋ฐŸ๊ฒŒ ๋˜๋Š”๋ฐ ์‚ดํŽด๋ณด๋ฉด..

1. ๋ฐ์ดํ„ฐ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋ฉด ์ „์ฒด UI๋ฅผ Virtual DOM์— ๋ฆฌ๋ Œ๋”๋ง ํ•œ๋‹ค.

2. ์ด์ „ Virtual DOM์— ์žˆ๋˜ ๋‚ด์šฉ๊ณผ ํ˜„์žฌ ๋‚ด์šฉ์„ ๋น„๊ตํ•œ๋‹ค.

3. ๋ฐ”๋€ ๋ถ€๋ถ„๋งŒ ์‹ค์ œ DOM์— ์ ์šฉํ•œ๋‹ค.

 

์ด์ฒ˜๋Ÿผ  ๋ฆฌ์•กํŠธ๋Š” Virtual DOM ์„ ํ†ตํ•ด์„œ ๋™์  UI ์ตœ์ ํ™” ๋ฌธ์ œ๋ฅผ๊ฐ€์ง€๊ณ  ์žˆ๋Š” DOM ์—…๋ฐ์ดํŠธ ๋ฐฉ์‹์„ ๋ณด์•ˆํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํšจ์œจ์ ์œผ๋กœ ์ž‘์—…์„ ์ง„ํ–‰ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

๋˜ํ•œ ์ผ๋ถ€ ์›น ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ MVC, MVW ๋“ฑ์˜ ๊ตฌ์กฐ๋ฅผ ์ง€ํ–ฅํ•˜๋Š” ๊ฒƒ๊ณผ ๋‹ฌ๋ฆฌ ๋ฆฌ์• ํŠธ๋Š” ์˜ค์ง ๋ทฐ๋งŒ ๋‹ด๋‹นํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋กœ์„œ ์ทจํ–ฅ๋Œ€๋กœ ์Šคํƒ์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ ์„ ๊ฐ€์ง€๊ณ  ์žˆ์ง€๋งŒ ์—ฌ๋Ÿฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ ‘ํ•ด์•ผ ํ•œ๋‹ค๋Š” ๋‹จ์ ์„ ๊ฐ€์ง€๊ณ  ์žˆ๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค.

+ Recent posts