Hello Kitty Eyes Shut
๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ’ป๊ณต๋ถ€ ๊ธฐ๋ก/๐Ÿ“Œ Frontend

[Frontend] ๋ Œ๋”๋ง(Rendering)์ด๋ž€

๋ฐ˜์‘ํ˜•

 

 

 

 

๐Ÿ–ผ๏ธ ๋ Œ๋”๋ง์ด๋ž€

ํ”„๋ก ํŠธ์—”๋“œ๋ฅผ ์ฒ˜์Œ ๋ฐฐ์šฐ๋‹ค ๋ณด๋ฉด,

"React๋Š” ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ Œ๋”๋งํ•œ๋‹ค""ํ™”๋ฉด์ด ๋‹ค์‹œ ๋ Œ๋”๋ง๋œ๋‹ค" ๊ฐ™์ด ๋ Œ๋”๋ง์ด๋ผ๋Š” ๋‹จ์–ด๋ฅผ ์ž์ฃผ ๋“ฃ๊ฒŒ ๋œ๋‹ค.

 

์—ฌ๊ธฐ์—์„œ ๋งํ•˜๋Š” ๋ Œ๋”๋ง(Rendering)์ด๋ž€,

์ฝ”๋“œ(HTML,CSS, JS)๋ฅผ ์šฐ๋ฆฌ๊ฐ€ ๋ณด๋Š” ์‹ค์ œ ํ™”๋ฉด(UI)์œผ๋กœ ๋ฐ”๊ฟ” ๊ทธ๋ ค์ฃผ๋Š” ๊ณผ์ •์„ ์˜๋ฏธํ•œ๋‹ค.

 

 


๐Ÿงฑ ๋น„์œ 

๋ Œ๋”๋ง์„ ์‰ฝ๊ฒŒ ์ดํ•ดํ•˜๋ ค๋ฉด, ์ง‘ ์ง“๊ธฐ์— ๋น„์œ ํ•ด๋ณผ ์ˆ˜ ์žˆ๋‹ค.

 

์šฐ๋ฆฌ๊ฐ€ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋ฉด, ๊ทธ๊ฑด ์„ค๊ณ„๋„๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

๋‹ค์Œ์œผ๋กœ, ๋ธŒ๋ผ์šฐ์ €๋Š” ์ด ์„ค๊ณ„๋„๋ฅผ ๋ณด๊ณ  ์‹ค์ œ๋กœ ํ™”๋ฉด์„ ๋งŒ๋“ค์–ด ๋ณด์—ฌ์ฃผ๋Š” ๊ฑด์ถ•๊ฐ€์ด๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ, ๊ฑด์ถ•๊ฐ€๊ฐ€ ์„ค๊ณ„๋„๋ฅผ ๋ณด๊ณ  ๋ฒฝ๋Œ์„ ์Œ“์•„์„œ ์‹ค์ œ ์ง‘์„ ๋งŒ๋“œ๋Š” ๊ณผ์ •์„ ๋ฐ”๋กœ ๋ Œ๋”๋ง์ด๋ผ๊ณ  ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

 

 


๐Ÿ’ก ๋ Œ๋”๋ง ๊ณผ์ •

ํ”„๋ก ํŠธ์—”๋“œ์—์„œ์˜ ๋ Œ๋”๋ง์€ ์•„๋ž˜์™€ ๊ฐ™์€ ๊ณผ์ •์œผ๋กœ ์ผ์–ด๋‚œ๋‹ค.

 

1๏ธโƒฃ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ index.html์„ ์ฝ๋Š”๋‹ค.

2๏ธโƒฃ ์—ฌ๊ธฐ์— ์—ฐ๊ฒฐ๋œ CSS, JS ํŒŒ์ผ์„ ๋ถˆ๋Ÿฌ์˜จ๋‹ค.

3๏ธโƒฃ JS ์•ˆ์— ์žˆ๋Š” React ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋˜์–ด ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋งŒ๋“ ๋‹ค.

4๏ธโƒฃ ์ด ์ปดํฌ๋„ŒํŠธ๋“ค์„ ๋ธŒ๋ผ์šฐ์ €์˜ <div id="root"> ์•ˆ์— ๋„ฃ์–ด์„œ ํ™”๋ฉด์„ ๊ทธ๋ฆฐ๋‹ค.

5๏ธโƒฃ ์‚ฌ์šฉ์ž๊ฐ€ ๋ณด๋Š” ํ™”๋ฉด(UI)์ด ์ตœ์ข…์ ์œผ๋กœ ๊ทธ๋ ค์ง„๋‹ค.

 

์ด์™€ ๊ฐ™์€ ๊ณผ์ •์„ ๊ฑฐ์ณ์„œ ์šฐ๋ฆฌ๊ฐ€ ๋งŒ๋“  UI๊ฐ€ ์‹ค์ œ ํ™”๋ฉด์— ๋ Œ๋”๋ง๋˜๋Š” ๊ฒƒ์ด๋‹ค.

 

 


๐Ÿ”„ ๋ฆฌ๋ Œ๋”๋ง์ด๋ž€

์œ„์—์„œ ์‚ดํŽด ๋ดค๋“ฏ์ด ๋ Œ๋”๋ง์€ "์ฝ”๋“œ๋ฅผ ํ™”๋ฉด์œผ๋กœ ๋ฐ”๊พธ๋Š” ๊ณผ์ •"์ธ๋ฐ,

์ด๊ฒŒ ํ•œ ๋ฒˆ ์ผ์–ด๋‚˜๊ณ  ๋๋‚˜๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰ ์ค‘์— ์—ฌ๋Ÿฌ ๋ฒˆ ๋ฐ˜๋ณต๋  ์ˆ˜๋„ ์žˆ๋‹ค.

 

์ด๊ฑฐ๋ฅผ ๋ฐ”๋กœ ๋ฆฌ๋ Œ๋”๋ง(Re-rendering)์ด๋ผ๊ณ  ๋ถ€๋ฅด๋Š” ๊ฒƒ์ด๋‹ค.

์ฆ‰, ํ™”๋ฉด์„ ๋‹ค์‹œ ๊ทธ๋ฆฌ๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค๊ณ  ๋ณด๋ฉด ๋œ๋‹ค.

 

๊ทธ๋ฆฌ๊ณ  ์—ฌ๊ธฐ์—์„œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ฒƒ์€

๋ฆฌ๋ Œ๋”๋ง์ด ํ™”๋ฉด์„ ์ „๋ถ€ ๋‹ค ๋‹ค์‹œ ๊ทธ๋ฆฌ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ,

๋ณ€ํ™”๋œ ๋ถ€๋ถ„๋งŒ ๊ฐ์ง€ํ•ด์„œ ํ•„์š”ํ•œ ์˜์—ญ๋งŒ ๋‹ค์‹œ ๊ทธ๋ฆฐ๋‹ค๋Š” ์ ์ด๋‹ค.

 

 

์˜ˆ๋ฅผ ๋“ค์–ด ์•„๋ž˜์™€ ๊ฐ™์€ ์ฝ”๋“œ๊ฐ€ ์žˆ๋‹ค๊ณ  ํ•ด๋ณด์ž.

const [count, setCount] = useState(0);
<button onClick={() => setCount(count + 1)}>์ฆ๊ฐ€</button>

 

์ด ์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ๋ฆ„์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค.

 

 

1๏ธโƒฃ ์ƒํƒœ ์ดˆ๊ธฐํ™”

      usertate(0)์œผ๋กœ ์ธํ•ด ์ฒ˜์Œ์—” count = 0์ธ ์ƒํƒœ๋กœ ํ™”๋ฉด์ด ๋ Œ๋”๋ง ๋œ๋‹ค.

      ์ด๋•Œ ๋ฒ„ํŠผ์—๋Š” onClick ์ด๋ฒคํŠธ๊ฐ€ ๊ฑธ๋ ค ์žˆ๊ฒŒ ๋œ๋‹ค.

 

2๏ธโƒฃ ์‚ฌ์šฉ์ž ์ƒํ˜ธ์ž‘์šฉ

      ์‚ฌ์šฉ์ž๊ฐ€ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๋ฉด setCount(count + 1)์ด ์‹คํ–‰๋œ๋‹ค.

      ์ฆ‰, ์ƒํƒœ ๊ฐ’์ด 0์—์„œ 1๋กœ ๋ฐ”๋€Œ๊ฒŒ ๋œ๋‹ค.

 

3๏ธโƒฃ React๊ฐ€ ๋ณ€ํ™” ๊ฐ์ง€

     React๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ ์ƒํƒœ(State)๋ฅผ ๊ธฐ์–ตํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์—

     setCount ๊ฐ™์€ setter ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋˜๋ฉด, React๋Š” ์ปดํฌ๋„ŒํŠธ ์•ˆ์— ์žˆ๋Š” ์ƒํƒœ๊ฐ€ ๋ฐ”๋€Œ์—ˆ์Œ์„ ์ธ์ง€ํ•˜๊ฒŒ ๋œ๋‹ค.

 

4๏ธโƒฃ ๋ฆฌ๋ Œ๋”๋ง ์ค€๋น„

      React๋Š” ์ƒํƒœ ๋ณ€ํ™”๋ฅผ ๊ฐ์ง€ํ–ˆ๋‹ค๊ณ  ํ•ด์„œ ๊ณง๋ฐ”๋กœ ์ „์ฒด DOM์„ ๊ณ ์ณ๋ฒ„๋ฆฌ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ

      Virtual DOM์ด๋ผ๋Š” ๊ฐ€์ƒ ํŠธ๋ฆฌ๋ฅผ ์ƒˆ๋กœ ๋งŒ๋“ค๊ณ , ์ด์ „ ์ƒํƒœ์˜ Virtual DOM๊ณผ ๋น„๊ตํ•œ๋‹ค.

 

5๏ธโƒฃ ์ฐจ์ด ๊ณ„์‚ฐ

     count ๊ฐ’์ด 0์—์„œ 1๋กœ ๋‹ฌ๋ผ์กŒ์œผ๋‹ˆ ์ด ์ˆซ์ž๋ฅผ ํ‘œ์‹œํ•˜๋Š” ๋ถ€๋ถ„๋งŒ ๋ณ€๊ฒฝ์ด ํ•„์š”ํ• ํ…๋ฐ,

     React๊ฐ€ ์–ด๋–ค ๋ถ€๋ถ„๋งŒ ๊ณ ์น˜๋ฉด ๋˜๋Š”์ง€๋ฅผ ์•Œ์•„์„œ ๊ณ„์‚ฐํ•œ๋‹ค.

 

6๏ธโƒฃ ํ™”๋ฉด ์—…๋ฐ์ดํŠธ

     ์ด์ œ ์‹ค์ œ ๋ธŒ๋ผ์šฐ์ € DOM์—์„œ๋Š” ์ˆซ์ž 0์„ ์ง€์šฐ๊ณ  1์„ ๊ทธ๋ ค ๋„ฃ๊ฒŒ ๋œ๋‹ค.

     (๋ฌผ๋ก  ์ด๋•Œ ๋‚˜๋จธ์ง€ ๋ฒ„ํŠผ ๋ชจ์–‘์ด๋‚˜ ๋‹ค๋ฅธ UI๋Š” ๊ฑด๋“œ๋ฆฌ์ง€ ์•Š๋Š”๋‹ค.)

๋ฐ˜์‘ํ˜•