์ƒˆ์†Œ์‹

React

[React] 01. ๋ฆฌ์•กํŠธ ์‹œ์ž‘

  • -

๐Ÿ“Œ I. ์™œ ๋ฆฌ์•กํŠธ(React)์ธ๊ฐ€?

 

์ตœ๊ทผ ๋ช‡ ๋…„๊ฐ„ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ(JS, JavaScript)๋Š” ๊ฐœ๋ฐœ์ž๋“ค์˜ ๋œจ๊ฑฐ์šด ๊ด€์‹ฌ์„ ๋ฐ›๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. JS๋Š” ๋‹จ์ˆœํ•œ ์Šคํฌ๋ฆฝํŠธ ์–ธ์–ด๋ฅผ ๋„˜์–ด ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๊ฐ€์žฅ ํ•ต์‹ฌ์ ์ธ ์—ญํ• ๋กœ ๋ฐœ๋‹์›€ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ JS๋งŒ์œผ๋กœ๋Š” ํ”„๋ŸฐํŠธ ์—”๋“œ ์‚ฌ์ด๋“œ์ชฝ์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ตฌ์กฐ๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ์—๋Š” ๋ฌด๋ฆฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด React, Angular, Ember.js ๋“ฑ ์ˆ˜๋งŽ์€ ํ”„๋ ˆ์ž„์›Œํฌ๋“ค์ด ๊ฐœ๋ฐœ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ด๋ฒˆ ํฌ์ŠคํŠธ์—์„œ๋Š” ์—ฌ๋Ÿฌ ํ”„๋ ˆ์ž„์›Œํฌ ์ค‘ React๊ฐ€ ์ค‘์‹ฌ์ด ๋œ ์ด์œ ์™€ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ์„ค์ •์„ ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ๋ฆฌ์•กํŠธ์˜ ์ฃผ์š”ํŠน์ง•์ธ Virtual DOM์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

๐Ÿ“š 1.  ์™œ ๋ฆฌ์•กํŠธ์ธ๊ฐ€?

ํ”„๋ก ํŠธ ์—”๋“œ ๊ฐœ๋ฐœ์„ ํ•˜๋‹ค๋ณด๋ฉด MVC, MVVM, MVW ๋“ฑ๊ณผ ๊ฐ™์ด MV~๋กœ ์‹œ์ž‘๋˜๋Š” ์•„ํ‚คํ…์ฒ˜๋“ค์„ ๋“ค์–ด๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฝ”๋“œ ๊ฐœ๋ฐœ์‹œ ๊ทœ์น™์„ ๋งŒ๋“ค์–ด ๋ฐ˜๋ณต๋˜๋Š” ๊ฒƒ์„ ํŒจํ„ด์œผ๋กœ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ์ด ํŒจํ„ด์„ ๋ชจ๋‘๊ฐ€ ๋”ฐ๋ฅด๋„๋ก ํ•˜๋Š” ๊ตฌ์กฐ๋ฅผ ์•„ํ‚คํ…์ฒ˜๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. UI(User Interface)๊ฐ€ ๋งŒ๋“ค์–ด์ง„ ํ›„ ๊ฐœ๋ฐœ์ž๋Š” ์ฝ”๋“œ๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ๊ฐœ๋ฐœํ•˜๊ธฐ ์œ„ํ•ด ์˜์—ญ์„ ๋‚˜๋ˆ„์—ˆ์Šต๋‹ˆ๋‹ค.

 

(1) MVC(Model-View-Controller) ์•„ํ‚คํ…์ณ

  • ์ดˆ์ฐฝ๊ธฐ ์›น ๊ฐœ๋ฐœ์ž๋“ค์ด ์‚ฌ์šฉํ•˜๋˜ ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.
  • View : ์‚ฌ์šฉ์ž์˜ ํ™”๋ฉด์— ๊ด€ํ•œ ์˜์—ญ์ž…๋‹ˆ๋‹ค. HTML์ด๋‚˜ CSS๋กœ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • Model : ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ์ดํ„ฐ์— ๊ด€ํ•œ ์˜์—ญ์ž…๋‹ˆ๋‹ค. JS์˜ ๊ฐ์ฒด(Object)
  • Controller : Model๊ณผ View์˜ ์ค‘๊ฐ„๊ณ„์ธต์ž…๋‹ˆ๋‹ค. Model์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์‹ ํ•˜์—ฌ View์— ๋ฐ˜์˜ํ•˜๊ณ ,
                        View๋กœ๋ถ€ํ„ฐ ์‚ฌ์šฉ์ž์˜ ๋™์ž‘์„ ์ž…๋ ฅ ๋ฐ›์•„ Model์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

(2) MVVM(Model-View-View Model) ์•„ํ‚คํ…์ณ

  • View๋ฅผ ๋‹ค๋ฃจ๋Š” Model๋งŒ ๋‹ค๋ฃน๋‹ˆ๋‹ค.
  • ํ…œํ”Œ๋ฆฟ ๋ฐ”์ธ๋”ฉ ๊ธฐ๋ฐ˜์˜ ์›น ๊ฐœ๋ฐœ์ž…๋‹ˆ๋‹ค.

(3) MVW(Model-View-Whatever) ์•„ํ‚คํ…์ณ

  • Angular์—์„œ๋Š” ์ž์‹ ๋“ค์„ MVW ๋˜๋Š” MV*์ด๋ผ๊ณ  ์ง€์นญํ–ˆ์Šต๋‹ˆ๋‹ค. Model๊ณผ View ์‚ฌ์ด์—์„œ ๋ฌด์–ธ๊ฐ€๋ฅผ ํ•œ๋‹ค๋Š” ๋œป์ž…๋‹ˆ๋‹ค.

<MVC ์•„ํ‚คํ…์ณ>

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

 

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

 

 

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


๐Ÿ“š 2. ๋ฆฌ์•กํŠธ ์ดํ•ด

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

(1) ์ปดํฌ๋„ŒํŠธ(Component)

  • ํŠน์ • ๋ถ€๋ถ„์ด ์–ด๋–ป๊ฒŒ ์ƒ๊ธธ์ง€ ์ •ํ•˜๋Š” ์„ ์–ธ์ฒด
  • ๋ฐ์ดํ„ฐ ์…‹์ด ์ฃผ์–ด์ง€๋ฉด HTML ํƒœ๊ทธ ํ˜•์‹์„ ๋ฌธ์ž์—ด๋กœ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ…œํ”Œ๋ฆฟ๋ณด๋‹ค ๋ณต์žกํ•œ ๊ฐœ๋…
  • ์žฌ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•œ API, ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์ด ๋‚ด์žฅ๋˜์–ด ์žˆ์œผ๋ฉฐ ์ปดํฌ๋„ŒํŠธ ํ•˜๋‚˜์— ์ƒ๊น€์ƒˆ์™€ ์ž‘๋™ ๋ฐฉ์‹์„ ์ •์˜

(2) ๋žœ๋”๋ง(Rendering)

  • ์‚ฌ์šฉ์ž์˜ ํ™”๋ฉด์— ๋ทฐ๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ๊ฒƒ

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

์ด ์›๋ฆฌ์˜ ํ‚ค์›Œ๋“œ๋Š” ๋ฆฌ์•กํŠธ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ตœ์ดˆ๋กœ ์‹คํ–‰ํ•œ '์ดˆ๊ธฐ ๋ Œ๋”๋ง'๊ณผ ์ปดํฌ๋„ŒํŠธ์˜ ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ์œผ๋กœ ๋‹ค์‹œ ์‹คํ–‰๋˜๋Š” '๋ฆฌ๋ Œ๋”๋ง' ์ž…๋‹ˆ๋‹ค.


๐Ÿ“š 3. ์ดˆ๊ธฐ ๋ Œ๋”๋ง

๋ฆฌ์•กํŠธ์—์„œ๋Š” ๋งจ ์ฒ˜์Œ ์–ด๋–ป๊ฒŒ ๋ณด์ผ์ง€๋ฅผ ์ •ํ•˜๋Š” ์ดˆ๊ธฐ ๋žœ๋”๋ง์„ render ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.

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

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


๐Ÿ“š 4. ์กฐํ™” ๊ณผ์ •

๋ฆฌ์•กํŠธ์—์„œ ๋ทฐ๋ฅผ ์—…๋ฐ์ดํŠธํ•  ๋•Œ๋Š” ์—…๋ฐ์ดํŠธ ๊ณผ์ •์„ ๊ฑฐ์นœ๋‹ค๊ณ  ๋งํ•˜๊ธฐ ๋ณด๋‹ค๋Š” "์กฐํ™” ๊ณผ์ •(Reconciliation)์„ ๊ฑฐ์นœ๋‹ค"๊ณ  ํ•˜๋Š” ๊ฒƒ์ด ๋” ์ •ํ™•ํ•ฉ๋‹ˆ๋‹ค. ์ปดํฌ๋„ŒํŠธ์˜ ๋ฐ์ดํ„ฐ์— ๋ณ€ํ™”์— ์˜ํ•ด ๋ทฐ๊ฐ€ ๋ณ€ํ˜•๋˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ ์ƒˆ๋กœ์šด ์š”์†Œ๋กœ ๊ฐˆ์•„ ๋ผ์›Œ์ง€๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

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

DOM ํŠธ๋ฆฌ์˜ ๋น„๊ต ๋ฐ ์ฐจ์ด ํ™•์ธ


๐Ÿ“Œ II. ๋ฆฌ์•กํŠธ์˜ ํŠน์ง•

๐Ÿ“š 1. DOM์ด๋ž€?

  • DOM(Document Object Model)์€ ๊ฐ์ฒด๋กœ ๋ฌธ์„œ ๊ตฌ์กฐ๋ฅผ ํ‘œํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ XML์ด๋‚˜ HTML๋กœ ์ž‘์„ฑ
  • DOM API๋ฅผ ์ˆ˜๋งŽ์€ ํ”Œ๋žซํผ๊ณผ ์›น ๋ธŒ๋ผ์šฐ์ €์—์„œ ์‚ฌ์šฉ๋  ์ •๋„๋กœ ํ™œ์šฉ๋„๊ฐ€ ๋†’์ง€๋งŒ ๋™์  UI์—๋Š” ์ตœ์ ํ™”๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์น˜๋ช…์  ๋‹จ์ ์ด ์กด์žฌ
  • ๊ทœ๋ชจ๊ฐ€ ํฐ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ DOM์— ์ง์ ‘ ์ ‘๊ทผํ•˜์—ฌ ๋ณ€ํ™”๋ฅผ ์ฃผ๋ฉด ์„ฑ๋Šฅ ์ด์Šˆ๊ฐ€ ๋ฐœ์ƒํ•˜์—ฌ ๋Š๋ ค์ง
  • DOM ์ž์ฒด๋Š” ๋น ๋ฅด์ง€๋งŒ ์›น ๋ธŒ๋ผ์šฐ์ €์˜ ๋ณ€ํ™”์— ๋งž์ถ”์–ด ๋‹ค์‹œ ์—ฐ์‚ฐํ•˜๊ณ  ํŽ˜์ด์ง€๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๊ณผ์ •์ด ๋Š๋ฆฐ ๊ฒƒ
  • DOM์„ ์ตœ์†Œํ•œ์œผ๋กœ ์กฐ์ž‘ํ•˜์—ฌ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ํ•ด๊ฒฐ์ฑ…

๐Ÿ“š 2. Virtual DOM

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

Virtual DOM์„ ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ๋ฌด์กฐ๊ฑด ๋นจ๋ผ์ง€๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. ๋ฆฌ์•กํŠธ ๋ฉ”๋‰ด์–ผ์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

 

์šฐ๋ฆฌ๋Š” ๋‹ค์Œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค๊ณ  ๋ฆฌ์•กํŠธ๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.
์ง€์†์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€ํ™”ํ•˜๋Š” ๋Œ€๊ทœ๋ชจ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ตฌ์ถ•ํ•˜๊ธฐ

 

๋ฆฌ์•กํŠธ์™€ Virtual DOM์€ ์—…๋ฐ์ดํŠธ ์ฒ˜๋ฆฌ์˜ ๊ฐ„๊ฒฐ์„ฑ์ด ์ œ๊ณต๋˜์–ด์•ผํ•  ๋•Œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.


๐Ÿ“š 3. ๊ธฐํƒ€ ํŠน์ง•

๋ฆฌ์•กํŠธ๋Š” ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ์•„๋‹Œ ์˜ค์ง ๋ทฐ๋งŒ ๋‹ด๋‹นํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค. ๋ฆฌ์•กํŠธ๋Š” ๋ทฐ๋งŒ ์‹ ๊ฒฝ์“ฐ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋ฏ€๋กœ ๊ธฐํƒ€ ๊ธฐ๋Šฅ์€ ์ง์ ‘ ๊ตฌํ˜„ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

  • ๋ผ์šฐํŒ…์—๋Š” ๋ฆฌ์•กํŠธ ๋ผ์šฐํ„ฐ(react-router)
  • Ajax ์ฒ˜๋ฆฌ์—๋Š” axios๋‚˜ fetch
  • ์ƒํƒœ ๊ด€๋ฆฌ์—๋Š” ๋ฆฌ๋•์Šค(redux)๋‚˜ MobX๋ฅผ ์‚ฌ์šฉ
  • ๋ฆฌ์•กํŠธ๋Š” ๋‹ค๋ฅธ ์›น ํ”„๋ ˆ์ž„์›Œํฌ๋‚˜ ๋ผ์ด๋ฒ„๋ฆฌ๋ฅผ ํ˜ผ์šฉํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ

III. ์ž‘์—… ํ™˜๊ฒฝ ์„ค์ •

์ฒซ ๋ฆฌ์•กํŠธ ํ”„๋กœ์ ํŠธ ๋งŒ๋“ค๊ธฐ ๊ณผ์ •

๐Ÿ“š 1. Node.js์™€ npm

๋ฆฌ์•กํŠธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ Node.js์™€ ์ง์ ‘์ ์ธ ์—ฐ๊ด€์€ ์—†์ง€๋งŒ, ํ”„๋กœ์ ํŠธ ๊ฐœ๋ฐœ์‹œ ํ•„์š”ํ•œ ๋„๊ตฌ๋“ค์ด Node.js๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์„ค์น˜ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์ด๋•Œ ์‚ฌ์šฉ๋˜๋Š” ๊ฐœ๋ฐœ ๋„๊ตฌ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ๋ฐ”๋ฒจ(babel) : ECMAScript 6๋ฅผ ํ˜ธํ™˜์‹œ์ผœ ์คŒ
  • ์›นํŒฉ(webpack) : ๋ชจ๋“ˆํ™”๋œ ์ฝ”๋“œ๋ฅผ ํ•œ ํŒŒ์ผ๋กœ ํ•ฉ์น˜๊ณ (๋ฒˆ๋“ค๋ง), ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•  ๋•Œ ์›น ๋ธŒ๋ผ์šฐ์ €๋ฅผ ๋ฆฌ๋กœ๋”ฉํ•˜๋Š” ๊ธฐ๋Šฅ ๊ตฌํ˜„

Node.js๋ฅผ ์„ค์น˜ํ•˜๋ฉด ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ € ๋„๊ตฌ์ธ npm์ด ์„ค์น˜๋ฉ๋‹ˆ๋‹ค. npm์œผ๋กœ ์ˆ˜๋งŽ์€ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋งŒ๋“  ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•˜๊ณ  ๋ฒ„์ „์„ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


๐Ÿ“š 2. ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ์„ค์น˜

์ด ํฌ์ŠคํŠธ์—์„œ๋Š” window ํ™˜๊ฒฝ์—์„œ ์„ค์น˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

  1. Node.js ๊ณต์‹ ๋‚ด๋ ค๋ฐ›๊ธฐ ํŽ˜์ด์ง€ (https://nodejs.org/ko/download/) ์—์„œ Node.js๋ฅผ ๋‹ค์šด๋ฐ›์Šต๋‹ˆ๋‹ค.

  2. Node.js๋ฅผ ์„ค์น˜ํ•  ๋•Œ ํŒจํ‚ค์ง€๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” npm์ด ์„ค์น˜๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์•ž์œผ๋กœ์˜ ํฌ์ŠคํŠธ์—์„œ๋Š” npm๋ณด๋‹ค ๋น ๋ฅด๊ณ  ํšจ์œจ์ ์ธ ์บ์‹œ ์‹œ์Šคํ…œ ๋ฐ ๋ถ€๊ฐ€ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” yarn์ด๋ผ๋Š” ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.
    yarn์€ npm์˜ ๊ธ€๋กœ๋ฒŒ ์„ค์น˜ ๊ธฐ๋Šฅ์„ ํ†ตํ•ด ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ ์ฝ”๋“œ๋ฅผ Node.js command prompt์— ์ž‘์„ฑํ•˜์„ธ์š”

    $ npm install --global yarn

  3. VS code ๊ณต์‹ ๋‚ด๋ ค๋ฐ›๊ธฐ ํŽ˜์ด์ง€ (https://code.visualstudio.com/Download)์—์„œ VS code๋ฅผ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.
    ํ™•์žฅ ๋งˆ์ผ“ํ”Œ๋ ˆ์ด์Šค์—์„œ Korean Language Pack for Visual Studio Code๋ฅผ ์„ค์น˜ํ•˜์—ฌ ํ•œ๊ตญ์–ด๋กœ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  4. git ๊ณต์‹ ๋‚ด๋ ค๋ฐ›๊ธฐ ํŽ˜์ด์ง€ (https://git-scm.com/download/)์—์„œ git์„ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.
    macOS, ๋ฆฌ๋ˆ…์Šค์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ช…๋ น์–ด์™€ ํ†ต์ผํ•˜๊ธฐ ์œ„ํ•˜์—ฌ bash ์—๋ฎฌ๋ ˆ์ดํ„ฐ๋„ ํ•จ๊ป˜ ์„ค์น˜ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

๐Ÿ“š 3. ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ

create-react-app์€ ๋ฆฌ์•กํŠธ ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ํ•„์š”ํ•œ ์›นํŒฉ, ๋ฐ”๋ฒจ์˜ ์„ค์น˜ ๊ณผ์ •์„ ์ƒ๋žตํ•˜๊ณ  ๊ฐ„ํŽธํ•˜๊ฒŒ ํ”„๋กœ์ ํŠธ ์ž‘์—…ํ™˜๊ฒฝ์„ ๊ตฌ์ถ•ํ•ด์ค๋‹ˆ๋‹ค. ํ„ฐ๋ฏธ๋„์„ ์—ด๊ณ  ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“ค๊ณ  ์‹ถ์€ ๋””๋ ‰ํ„ฐ๋ฆฌ์—์„œ yarn create react-app <ํ”„๋กœ์ ํŠธ ์ด๋ฆ„> ๋ช…๋ น์–ด๋ฅผ ์ž‘์„ฑํ•˜์—ฌ ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

$ yarn create react-app hello-react

ํ”„๋กœ์ ํŠธ๊ฐ€ ์ƒ์„ฑ์ด ์™„๋ฃŒ๋˜์—ˆ๋‹ค๋ฉด, ๋‹ค์Œ์˜ ๋ช…๋ น์–ด๋กœ ๋ฆฌ์•กํŠธ ๊ฐœ๋ฐœ ์ „์šฉ ์„œ๋ฒ„๋ฅผ ๊ตฌ๋™ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

$ cd hello-react
$ yarn start #๋˜๋Š” npm start

์ด ๊ณผ์ •์„ ํ†ตํ•ด ๋ฆฌ์•กํŠธ ๋กœ๊ณ ๊ฐ€ ๋ณด์ด๋Š” ๊ฒ€์ •์ƒ‰ ํŽ˜์ด์ง€๋ฅผ ๋„์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


๐ŸŽˆ Quiz

  1. ์›น ์„œ๋น„์Šค ์ดˆ์ฐฝ๊ธฐ ์‹œ์ ˆ ๊ฐœ๋ฐœ์ž๋“ค์€ ์‚ฌ์šฉ์ž ํ™”๋ฉด์— ๋Œ€ํ•œ View ์˜์—ญ, ์†Œํ”„ํŠธ์›จ์–ด๊ฐ€ ์ฃผ์š”ํ•˜๊ฒŒ ๋‹ค๋ค„์•ผํ•  ๋ฐ์ดํ„ฐ ์˜์—ญ์ธ Model ์˜์—ญ, ๊ทธ ์ค‘๊ฐ„ ๊ณ„์ธต์ธ Controller ๊ฐœ๋ฐœ ์˜์—ญ์œผ๋กœ ๋‚˜๋ˆ„์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฐฉ์‹์„ (____________) ๋ฐฉ์‹ ์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.
  2.  (____________)๋Š” ํŠน์ • ๋ถ€๋ถ„์ด ์–ด๋–ป๊ฒŒ ์ƒ๊ธธ์ง€ ์ •ํ•˜๋Š” ์„ ์–ธ์ฒด๋กœ ์žฌ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•œ API์ž…๋‹ˆ๋‹ค.

  3.  (____________)์ด๋ž€ ์‚ฌ์šฉ์ž์˜ ํ™”๋ฉด์— ๋ทฐ๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ๊ฒƒ์„ ๋งํ•ฉ๋‹ˆ๋‹ค.

  4. ๋งจ ์ฒ˜์Œ ํ™”๋ฉด์— ๋ณด์ด๋Š” ๋ฐฉ์‹์ด๋‚˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ •ํ•˜๋Š” ๊ฒƒ์€  (____________) ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.

  5. ๊ฐ์ฒด๋กœ ๋ฌธ์„œ๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ์‹์ธ DOM์€ ๋™์  UI์—๋Š” ์ตœ์ ํ™”๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋•Œ๋ฌธ์— ๋ฆฌ์•กํŠธ๋Š”  (____________)์„ ์‚ฌ์šฉํ•˜์—ฌ DOM ์ฒ˜๋ฆฌ ํšŸ์ˆ˜๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ์ค„์˜€์Šต๋‹ˆ๋‹ค.

  6. ๋ฆฌ์•กํŠธ๋Š” ์˜ค์ง ๋ทฐ๋งŒ ๋‹ด๋‹นํ•˜๋Š”  (____________)์ž…๋‹ˆ๋‹ค. ๋•Œ๋ฌธ์— ๋ผ์šฐํŒ…, ์ƒํƒœ ๊ด€๋ฆฌ, Ajax ์ฒ˜๋ฆฌ ๋“ฑ์€ ์ง์ ‘ ๊ตฌํ˜„ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

  7. ๋ฆฌ์•กํŠธ๋Š” Node.js์˜ ๋„๊ตฌ๋“ค์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. (____________)์€ ๋ชจ๋“ˆํ™”๋œ ์ฝ”๋“œ๋ฅผ ํ•˜๋‚˜์˜ ํŒŒ์ผ๋กœ ํ•ฉ์น˜๊ณ , ์ฝ”๋“œ ์ˆ˜์ •์‹œ ์›น ๋ธŒ๋ผ์šฐ์ €๋ฅผ ๋ฆฌ๋กœ๋”ฉํ•ฉ๋‹ˆ๋‹ค.

  8. yarn์„ ์ด์šฉํ•˜์—ฌ <hello-corner> ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“œ๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜์‹œ์˜ค.

  9. ๋ฆฌ์•กํŠธ ๊ฐœ๋ฐœ ์ „์šฉ ์„œ๋ฒ„๋ฅผ ๊ตฌ๋™ํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜์‹œ์˜ค.

<์ •๋‹ต>

  1. MVC ์•„ํ‚คํ…์ณ
  2. ์ปดํฌ๋„ŒํŠธ
  3. ๋žœ๋”๋ง
  4. render
  5. Virtual DOM
  6. ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
  7. ์›นํŒฉ
  8. $ yarn create react-app hello-corner
  9. $ cd hello-corner
    $ yarn start
Contents

ํฌ์ŠคํŒ… ์ฃผ์†Œ๋ฅผ ๋ณต์‚ฌํ–ˆ์Šต๋‹ˆ๋‹ค

์ด ๊ธ€์ด ๋„์›€์ด ๋˜์—ˆ๋‹ค๋ฉด ๊ณต๊ฐ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.