๋ฆฌ์•กํŠธ(React)๋ž€? ๐Ÿง

rimmzยท2022๋…„ 7์›” 6์ผ
0

TIL | React

๋ชฉ๋ก ๋ณด๊ธฐ
2/3
post-thumbnail

๋ฆฌ์•กํŠธ(React)๋ž€?

Facebook์—์„œ ์ฃผ๋„ํ•˜์—ฌ ๊ฐœ๋ฐœํ•œ ์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ UI๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ๊ตฌ์ถ•ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” Javascript ๊ธฐ๋ฐ˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

  • SPA(Single Page Application) ์ธํ„ฐํŽ˜์ด์Šค(Interface)๋ฅผ ๊ตฌํ˜„ํ•˜๋Š”๋ฐ ์ง‘์ค‘๋˜์–ด์žˆ๋‹ค.
  • ํŽ˜์ด์ง€๋ฅผ ๋‹ค์‹œ ๋กœ๋“œํ•˜์ง€ ์•Š๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ฐ€์ƒ ๋”(Virtual DOM)์„ ์‚ฌ์šฉํ•˜์—ฌ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํผํฌ๋จผ์Šค๋ฅผ ์ตœ์ ํ™”ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋‹ค.

SPA(Single Page Application) ๐Ÿค”
์›น ์‚ฌ์ดํŠธ์˜ ์ „์ฒด ํŽ˜์ด์ง€๋ฅผ ํ•˜๋‚˜์˜ ํŽ˜์ด์ง€์— ๋‹ด์•„ ๋™์ ์œผ๋กœ ํ™”๋ฉด์„ ๋ฐ”๊ฟ”๊ฐ€๋ฉฐ ํ‘œํ˜„


๋ฆฌ์•กํŠธ(React) ํŠน์ง•?

1.1 ๊ฐ€์ƒ ๋” (Virtual DOM)

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

๋”(DOM) ๐Ÿค”
์›น ํŽ˜์ด์ง€๋‚˜ ์›น ์•ฑ์— ์žˆ๋Š” HTML ์š”์†Œ๋“ค์„ ๊ตฌ์กฐ์ ์œผ๋กœ ํ‘œํ˜„ํ•œ ๊ฒƒ

๐Ÿšจ ๋”(DOM)์˜ ๋ฌธ์ œ์ 
DOM์€ ํŠธ๋ฆฌ ๊ตฌ์กฐ๋กœ ๋˜์–ด ์žˆ์–ด์„œ ์ดํ•ดํ•˜๊ธฐ ์‰ฝ์ง€๋งŒ, ๋…ธ๋“œ์˜ ์ˆ˜๊ฐ€ ๋งŽ์•„์งˆ ์ˆ˜๋ก ์†๋„๊ฐ€ ๋Š๋ ค์ง€๊ณ , DOM ์—…๋ฐ์ดํŠธ์— ์žฆ์€ ์˜ค๋ฅ˜๋ฅผ ๋ฐœ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.

๊ฐ€์ƒ ๋”(Virtual DOM)
์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•  ๋•Œ๋งˆ๋‹ค ๊ฐ€์ƒ ๋”(Virtual DOM)์„ ๋งŒ๋“ค๊ณ , ๋‹ค์‹œ ๊ทธ๋ฆด ๋•Œ๋งˆ๋‹ค ์‹ค์ œ DOM๊ณผ ๋น„๊ตํ•˜๊ณ  ์ „ํ›„ ์ƒํƒœ๋ฅผ ๋น„๊ตํ•ด, ๋ณ€๊ฒฝ์ด ํ•„์š”ํ•œ ์ตœ์†Œํ•œ์˜ ๋ณ€๊ฒฝ์‚ฌํ•ญ๋งŒ ์‹ค์ œ DOM์— ๋ฐ˜์˜ํ•ด, ์•ฑ์˜ ํšจ์œจ์„ฑ๊ณผ ์†๋„๋ฅผ ๊ฐœ์„ 

1.2 ๋‹จ๋ฐฉํ–ฅ ๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ (One-Way Data Binding)

๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ ๐Ÿค”
๋‘ ๋ฐ์ดํ„ฐ ํ˜น์€ ์ •๋ณด์˜ ์†Œ์Šค๋ฅผ ๋ชจ๋‘ ์ผ์น˜์‹œํ‚ค๋Š” ๊ธฐ๋ฒ•์ด๋‹ค. ์ฆ‰, ํ™”๋ฉด์— ๋ณด์ด๋Š” ๋ฐ์ดํ„ฐ์™€ ๋ธŒ๋ผ์šฐ์ € ๋ฉ”๋ชจ๋ฆฌ์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ผ์น˜์‹œํ‚ค๋Š” ๊ฒƒ์„ ๋œป ํ•œ๋‹ค.

์–‘๋ฐฉํ–ฅ ๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ(Two-way binding) ๐Ÿค”
์‚ฌ์šฉ์ž UI์˜ ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ์„ ๊ฐ์‹œํ•˜๋Š” Watcher์™€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ฐ์ดํ„ฐ์˜ ๋ณ€๊ฒฝ์„ ๊ฐ์‹œํ•˜๋Š” Watcher๊ฐ€ UI์™€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ฐ์ดํ„ฐ๋ฅผ ์ž๋™์œผ๋กœ ๋™๊ธฐํ™” ์‹œ์ผœ์ฃผ๋Š” ๋ฐฉ์‹

์ด๋ฅผ ํ†ตํ•ด ํ”„๋กœ๊ทธ๋ž˜๋จธ๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋‚ด์— ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€๊ฒฝ๊ณผ ์‚ฌ์šฉ์ž UI์— ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ์— ๊ด€ํ•œ ๋™๊ธฐํ™”๋ฅผ ์‹ ๊ฒฝ์“ฐ์ง€ ์•Š๊ณ  ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

๐Ÿšจ ์–‘๋ฐฉํ–ฅ ๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ ๋‹จ์ 

  • ํ•˜๋‚˜์— ๋ฐ์ดํ„ฐ ๋™๊ธฐํ™”์— ๋‘ ๊ฐœ์˜ Watcher๊ฐ€ ์‚ฌ์šฉ๋˜๊ณ , ๋ฐ์ดํ„ฐ ๋งŽ์•„์ง€๊ฒŒ ๋˜๋ฉด ์ด ๋ฐ์ดํ„ฐ์˜ ๋™๊ธฐํ™”๋ฅผ ์œ„ํ•œ ์ˆ˜๋งŽ์€ Watcher๊ฐ€ ์ƒ์„ฑ๋˜๋ฏ€๋กœ, ๋ฐ˜๋Œ€๋กœ ์„ฑ๋Šฅ ์ €ํ•˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

์ด๋Ÿฌํ•œ ๋‹จ์ ์œผ๋กœ ์ธํ•ด, ๋ฆฌ์•กํŠธ ๋“ฑ ๋‹ค๋ฅธ ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ๋‹จ๋ฐฉํ–ฅ ๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ์„ ์‚ฌ์šฉํ•œ๋‹ค.

๋‹จ๋ฐฉํ–ฅ ๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ
๋‹จ ํ•˜๋‚˜์˜ Watcher๊ฐ€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๋ฐ์ดํ„ฐ ๊ฐฑ์‹ ์„ ๊ฐ์ง€ํ•˜์—ฌ ์‚ฌ์šฉ์ž์˜ UI ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐฑ์‹ ํ•œ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ UI๋ฅผ ํ†ตํ•ด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐฑ์‹ ํ•  ๋•Œ๋Š”, ์ด๋ฒคํŠธ๋ฅผ ํ†ตํ•ด ๊ฐฑ์‹ ํ•˜๊ฒŒ ๋œ๋‹ค.

๐Ÿšจ ๋‹จ๋ฐฉํ–ฅ ๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ ์žฅ์ 

  • ์–‘๋ฐฉํ˜• ๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ์ด ๊ฐ€์ง€๋Š” ์„ฑ๋Šฅ์ ์ธ ์ด์Šˆ ํ•ด๊ฒฐ
  • ๋ฐ์ดํ„ฐ๋ฅผ ํ™•์‹คํ•˜๊ฒŒ ์ถ”์ ํ•  ์ˆ˜ ์žˆ์Œ

1.3 JSX ๋ฌธ๋ฒ•

JavaScript์™€ HTML์„ ๋™์‹œ์— ์‚ฌ์šฉํ•˜๋ฉฐ, HTML์— ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๋ณ€์ˆ˜๋“ค์„ ๋ฐ”๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ผ์ข…์˜ ํ…œํ”Œ๋ฆฟ ์–ธ์–ด(Template Lanhuage)

JSX ๋ฌธ๋ฒ•์˜ ํŠน์ง•

  • ๋‘๊ฐœ ์ด์ƒ์˜ ์—˜๋ฆฌ๋จผํŠธ๋Š” ๋ฌด์กฐ๊ฑด ํ•˜๋‚˜์˜ ์—˜๋ฆฌ๋จผํŠธ๋กœ ๊ฐ์‹ธ์ ธ ์žˆ์–ด์•ผํ•œ๋‹ค.
  • class ๋Œ€์‹  className์„ ์‚ฌ์šฉํ•œ๋‹ค.
  • ๋ชจ๋“  ํƒœ๊ทธ๋Š” ๋ฐ˜๋“œ์‹œ ๋‹ซํ˜€ ์žˆ์–ด์•ผ ํ•œ๋‹ค.
  • JSX ์•ˆ์—์„œ JavaScript ๊ฐ’์„ ์‚ฌ์šฉํ•  ๋•Œ์—” ์ค‘๊ด„ํ˜ธ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
  • JSX ์ฃผ์„์€ {/* ํ…์ŠคํŠธ ๋‚ด์šฉ */} ๋‚ด์šฉ์„ ๊ฐ์‹ผ๋‹ค.

1.4 ์ปดํฌ๋„ŒํŠธ ๊ธฐ๋ฐ˜(Component)

๋ฆฌ์•กํŠธ๋Š” ์›น ์„œ๋น„์Šค ๊ฐœ๋ฐœ ์‹œ ์ปดํฌ๋„ŒํŠธ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์–ด ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ณด์—ฌ์ง€๋Š” ์š”์†Œ๋ฅผ ์ปดํฌ๋„ŒํŠธ ๋‹จ์œ„๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ UI๋ฅผ ๊ตฌ์„ฑํ•˜๊ฒŒ ๋œ๋‹ค.

์ปดํฌ๋„ŒํŠธ(Component) ๐Ÿค”
์›นย ํŽ˜์ด์ง€์—์„œย ์ปดํฌ๋„ŒํŠธ๋Š”ย ํ™”๋ฉด์„ย ์ด๋ฃจ๋Š”ย ์ž‘์€ย ์š”์†Œ๋“ค์ด๋‹ค.

  • ๊ธฐ๋Šฅ๊ณผ ์—ญํ• ์— ๋”ฐ๋ฅธ ๋…๋ฆฝ์ ์ธ ๊ด€๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ์ฝ”๋“œ์˜ ์žฌ์‚ฌ์šฉ์„ฑ์ด ์ข‹์•„ ๊ฐœ๋ฐœ ์ƒ์‚ฐ์„ฑ์ด ํ–ฅ์ƒ๋œ๋‹ค.
  • ํ…Œ์ŠคํŠธ ๋ฐ ์ฝ”๋“œ ์œ ์ง€๋ณด์ˆ˜์— ์šฉ์ดํ•˜๋‹ค.

1.5 Props and State

โœ” Props
Props(Properties)๋Š” ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ์—์„œ ์ž์‹ ์ปดํฌ๋„ŒํŠธ๋กœ ์ „๋‹ฌ๋˜๋Š” ๋ฐ์ดํ„ฐ (์ปดํฌ๋„ŒํŠธ์—์„œ ์ปดํฌ๋„ŒํŠธ๋กœ ์ „๋‹ฌํ•˜๋Š” ๋ฐ์ดํ„ฐ)

  • ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ๋กœ๋ถ€ํ„ฐ ๋ฐ›๋Š” ๋ฐ์ดํ„ฐ์ด๋ฏ€๋กœ ์ž์‹ ์ปดํฌ๋„ŒํŠธ์—์„œ๋Š” ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†์œผ๋ฉฐ ํ•œ ์ปดํฌ๋„ŒํŠธ์˜ ์†์„ฑ(Properties)๊ณผ ๊ฐ™์Œ์„ ์˜๋ฏธํ•œ๋‹ค.

โœ” State
State๋Š” ํ•˜๋‚˜์˜ ์ปดํฌ๋„ŒํŠธ ์•ˆ์—์„œ ์œ ๋™์ ์ธ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃฐ ๋•Œ ์‚ฌ์šฉ (์ปดํฌ๋„ŒํŠธ ๋‚ด๋ถ€์˜ ๋™์  ๋ฐ์ดํ„ฐ)

  • ์ปดํฌ๋„ŒํŠธ ์•ˆ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํ•œ ์ปดํฌ๋„ŒํŠธ์˜ ์ƒํƒœ(State)๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

๐Ÿ”— ์ฐธ๊ณ 

https://sungjk.github.io/2015/11/22/AngularJS(2).html
https://dev-yakuza.posstree.com/ko/react/create-react-app/react/
https://doqtqu.tistory.com/316

profile
#์˜์š•๋„˜์น˜๋Š”#๐Ÿ’ป#โœจ#FE#๐Ÿ’ช๐Ÿป

0๊ฐœ์˜ ๋Œ“๊ธ€