๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
  • ์žฅ์›์ต ๊ธฐ์ˆ ๋ธ”๋กœ๊ทธ
๐Ÿ“บ Front End/- React, Next.js

[๋ฆฌ์•กํŠธ ๋ถ„์„ํ•˜๊ธฐ] ๋ฆฌ์•กํŠธ์˜ ๊ฐ€์ƒ Dom์€ Native Dom๊ณผ ๋น„๊ตํ•ด์„œ ์™œ ๋น ๋ฅธ์ง€์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด์ž.

by Wonit 2020. 7. 30.

์‚ฌ์‹ค ์ด ๊ธ€์˜ ์ œ๋ชฉ์€ ๋ฆฌ์•กํŠธ์˜ ๊ฐ€์ƒ ๋”์ด ์•„๋‹ˆ๋ผ ๋ชจ๋“  ๊ฐ€์ƒ ๋”์€ ์™œ ๋น ๋ฅธ์ง€. ๋ผ๊ณ  ํ•ด์•ผ ๋งž๋Š” ํ‘œํ˜„์ด๋‹ค.

 

๊ฐ€์ƒ Dom(Virtural Dom) ์€ ๋ฆฌ์•กํŠธ๋งŒ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ๊ฐœ๋…์ด ์•„๋‹ˆ๋ผ ๋‹ค๋ฅธ ํ”„๋ ˆ์ž„์›Œํฌ๋„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ๊ฐœ๋…์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

์šฐ๋ฆฌ๊ฐ€ ๊ฐ€์ƒ dom์„ ์ด์šฉํ•ด์„œ ๋ฆฌ์•กํŠธ๋Š” ์ฒ˜๋ฆฌ๋ฅผ ํ•œ๋‹ค๊ณ  ์•Œ๊ณ  ์žˆ๋Š”๋ฐ, ๋„๋Œ€์ฒด ์™œ, ์–ด๋–ป๊ฒŒ, ๋ฌด์—‡์ด ๋‹ค๋ฅธ์ง€ ํ•œ ๋ฒˆ ์•Œ์•„๋ณด์ž.

Dom

์šฐ๋ฆฌ๊ฐ€ ๊ฐ€์ƒ ๋”์„ ์•Œ๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋จผ์ € Dom์— ๋Œ€ํ•ด ์•Œ์•„์•ผ ํ•œ๋‹ค.

 

MDN์—์„œ Dom์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ •์˜ํ•˜๊ณ  ์žˆ๋‹ค.

ํ•ต์‹ฌ์€ ์šฐ๋ฆฌ๊ฐ€ Javascript์—์„œ HTML์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ์—ญํ• ์ด๋ผ๋Š” ๊ฒƒ์ด๋‹ค.

๊ทธ๋Ÿผ DOM์˜ ์ƒ๊น€์ƒˆ๋Š”?

HTML์˜ ๊ตฌ์กฐ๋ฅผ ๋ฌธ์„œํ™” ํ•ด๋†“์€ ๊ฒƒ. ์ฏค์œผ๋กœ ์ƒ๊ฐํ•ด๋ณด๋ฉด ๋”์˜ ๋ชจ์–‘์€ ์•„๋งˆ ๋‹ค์Œ๊ณผ ๊ฐ™์„ ๊ฒƒ์ด๋‹ค.

๋”ฑ ๋ณด๋ฉด ๋ญ๊ฐ€ ๋– ์˜ค๋ฅด์ง€ ์•Š๋‚˜? ํด๋” ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ?

 

๋งž๋‹ค.

 

ํด๋” ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ์ฒ˜๋Ÿผ ์ƒ๊ฒผ๋Š”๋ฐ, ์ด ํด๋” ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ๋ผ๋Š” ๊ฒƒ์€ ์‹ค์€ ํŠธ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ๊ฐ–๊ณ  ์žˆ๋Š” ๊ฒƒ์ด๋‹ค.

 

ํ•˜๋‚˜์˜ ๋ฃจํŠธ ๋…ธ๋“œ๊ฐ€ ์žˆ์„ ๋•Œ, ์—ฌ๋Ÿฌ ์ž์‹ ๋…ธ๋“œ์™€ ๊ทธ ์ž์‹ ๋…ธ๋“œ๋กœ ์ด๋ฃจ์–ด์ง„ ๊ตฌ์กฐ.

 

ํŠธ๋ฆฌ ๊ตฌ์กฐ์— ๋Œ€ํ•ด์„œ ์ž์„ธํžˆ ์•Œ๊ณ ์‹ถ๋‹ค๋ฉด, ํŠธ๋ฆฌ ์ž๋ฃŒ๊ตฌ์กฐ์— ๋ฐฉ๋ฌธํ•ด๋ณด์ž.

์–ด๋–ป๊ฒŒ ์ ‘๊ทผํ•˜๋Š”๋ฐ?

์œ„์—์„œ ์šฐ๋ฆฌ๋Š” DOM์€ HTML์— JS๊ฐ€ ์ ‘๊ทผํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋ผ๊ณ  ํ–ˆ๋Š”๋ฐ, ์‚ฌ์‹ค ์—ฌ๋Ÿฌ๋ถ„์€ ์ด๋ฏธ ์•Œ๊ณ  ์žˆ๊ฑฐ๋‚˜ ๋ชจ๋ฅด์ง€๋งŒ ๋งŽ์ด ์จ๋ดค๋˜ ์‚ฌ๋žŒ๋„ ์žˆ์„ ์ˆ˜๋„ ์žˆ๋‹ค.

 

DOM์ด๋ž€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒƒ๋“ค์ด๋‹ค.

์ด๋ ‡๊ฒŒ JS์—์„œ HTML์— ์ ‘๊ทผํ•˜๋ ค๋Š” ์—ฌ๋Ÿฌ API๋“ค์„ ์ผ์ปซ๋Š”๋‹ค.


Virtual DOM

๊ทธ๋Ÿผ ์ด์ œ ์‹ค์ œ DOM์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด์•˜์œผ๋‹ˆ React์˜ ๊ฐ€์ƒ DOM์ด ๋ฌด์—‡์ด๊ณ  ์™œ ๋น ๋ฅธ์ง€์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž.

 

๊ฐ€์ƒ ๋”์ด๋ž€?

๊ฐ€์ƒ ๋”์€ ์‹ค์ œ ๋”๊ณผ ์‚ฌ์šฉ์ž ์‚ฌ์ด์—์„œ ์กด์žฌํ•˜๋ฉฐ ์‚ฌ์šฉ์ž๊ฐ€ ์‹ค์ œ ๋”์„ ๋”์šฑ ์†์‰ฝ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค.

 

๊ทธ๋Ÿผ ์™œ ๊ฐ€์ƒ ๋”์ด ๋” ๋น ๋ฅผ๊นŒ?

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


์šฐ๋ฆฌ๊ฐ€ ๋งŒ์•ฝ ์‹ค์ œ DOM ๊ฐ์ฒด์— ์ ‘๊ทผํ•˜๋ ค๊ณ  ํ•œ๋‹ค๋ฉด ์œ„์—์„œ ๋ดค๋˜ ํŠธ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ๋ชจ๋‘ ์ˆœํšŒํ•ด์•ผ ํ•œ๋‹ค.


๊ฐ€์ƒ ๋”(Virtual DOM)์€ ๋ฆฌ์•กํŠธ์˜ ํ•ต์‹ฌ์— ์ •ํ™•ํžˆ ๋ถ€ํ•ฉํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

 

์šฐ๋ฆฌ๊ฐ€ DOM ์š”์†Œ์— ์ ‘๊ทผํ•˜๋ ค๋ฉด ๋ชจ๋“  ํŠธ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ์ˆœํšŒํ•ด์•ผํ•˜๊ณ  ์—ฌ๋Ÿฌ ๋ฒˆ์˜ ์ˆ˜์ •์ด ์žˆ์œผ๋ฉด ์—ฌ๋Ÿฌ ๋ฒˆ์˜ ํŠธ๋ฆฌ๋ฅผ ์ˆœํšŒํ•˜๋Š” ๊ทธ๋Ÿฐ ์ผ์ด ๋ฐœ์ƒํ•œ๋‹ค.

 

๊ทธ๋Ÿผ ๊ฐœ๋ฐœ์ž์ž…์žฅ์—์„œ๋Š” ๊ทธ๋Ÿฐ ๋ถˆํ•„์š”ํ•œ ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ์ค„์ด๊ธฐ ์œ„ํ•œ ์ฝ”๋“œ๋ฅผ ์งœ์•ผํ•  ๊ฒƒ์ด๊ณ , ์ด๊ฒŒ ๋ฐ”๋กœ ์ˆœ์ˆ˜ JS๊ฐ€ ์–ด๋ ต๋‹ค๊ณ  ํ‰๊ฐ€๋ฐ›๋Š” ์ด์œ  ์ค‘ ํ•˜๋‚˜๊ฐ€ ์•„๋‹๊นŒ ์ƒ๊ฐํ•œ๋‹ค.

 

์ด๋Ÿฐ ๊ฒƒ๋“ค์„ ๊ฐ€์ƒ ๋”์ด ์ตœ์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ€์ƒ ๋”์ด ๋” ๋น ๋ฅด๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

 

 

 

ํ•˜์ง€๋งŒ ๋ช…์‹ฌํ•ด์•ผํ•  ๊ฒƒ์ด ์žˆ๋‹ค.

 

 

React in Action์˜ ์ €์„œ Mark Tirense Tomas๋Š” ์ด๋ ‡๊ฒŒ ๋งํ•œ๋‹ค.

์ด๋Ÿฌํ•œ ๊ฐ€์ƒ dom์˜ ์žฅ์ ์€ ๋‹จ์ง€ ๋น ๋ฅด๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•จ์ด์ง€ ๋ชจ๋“  ์„ฑ๋Šฅ ISSUE๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค๋Š” ๋งŒ๋ณ‘ ํ†ต์น˜์•ฝ์œผ๋กœ ๋ณด์•„์„  ์•ˆ๋œ๋‹ค.

 

 

'๐Ÿ“บ Front End > - React, Next.js' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Styled-Components] React์˜ Styled-Components๋ž€ ๋ฌด์—‡์ผ๊นŒ?  (0) 2020.10.06
[๋ฆฌ์•กํŠธ Hook ์‚ฌ์šฉํ•˜๊ธฐ] useState๋ฅผ ์ด์šฉํ•ด์„œ Functional Component์— state๋ฅผ ๊ด€๋ฆฌํ•˜์ž  (2) 2020.08.23
[๋ฆฌ์•กํŠธ ๋ถ„์„ํ•˜๊ธฐ] ๋ฆฌ์•กํŠธ๊ฐ€ ํŽ˜์ด์ง€๋ฅผ ๋ผ์šฐํŒ… ํ•˜๋Š” ๋ฐฉ๋ฒ• (3) ๋ถ€์ œ :: react-router-dom์„ ์ด์šฉํ•ด์„œ ํŽ˜์ด์ง€ ๋ผ์šฐํŒ… ํ•˜๊ธฐ  (0) 2020.07.20
[๋ฆฌ์•กํŠธ ๋ถ„์„ํ•˜๊ธฐ] ๋ฆฌ์•กํŠธ๊ฐ€ ํŽ˜์ด์ง€๋ฅผ ๋ผ์šฐํŒ… ํ•˜๋Š” ๋ฐฉ๋ฒ• (2) ๋ถ€์ œ :: Broswer History API๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํŽ˜์ด์ง€ ๋ผ์šฐํŒ… ํ•˜๊ธฐ  (0) 2020.07.20
[๋ฆฌ์•กํŠธ ๋ถ„์„ํ•˜๊ธฐ] ๋ฆฌ์•กํŠธ๊ฐ€ ํŽ˜์ด์ง€๋ฅผ ๋ผ์šฐํŒ… ํ•˜๋Š” ๋ฐฉ๋ฒ• (1) ๋ถ€์ œ :: Single Page Application์ด ๋ฌด์—‡์ด๊ณ  ์–ด๋–ป๊ฒŒ ๋ฆฌ์•กํŠธ์—์„œ ์‚ฌ์šฉํ• ๊นŒ?  (2) 2020.07.20

๋Œ“๊ธ€