๐Ÿ’ What is React?

#๏ธโƒฃReact๋ž€?

React๋Š” ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌ์ถ•ํ•˜๊ธฐ ์œ„ํ•œ ์„ ์–ธ์ ์ด๊ณ  ํšจ์œจ์ ์ด๋ฉฐ ์œ ์—ฐํ•œ JavaScript ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

๐Ÿ’ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ vs ํ”„๋ ˆ์ž„์›Œํฌ

  • ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ: ์–ด๋–ค ์•ฑ์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ๋Œ€๋ถ€๋ถ„์˜ ๊ฒƒ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฒƒ

  • ํ”„๋ ˆ์ž„์›Œํฌ: ์–ด๋–ค ํŠน์ • ๊ธฐ๋Šฅ์„ ๋ชจ๋“ˆํ™” ํ•ด ๋†“์€ ๊ฒƒ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ โŠ‚ ํ”„๋ ˆ์ž„์›Œํฌ ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํฌํ•จํ•˜๊ณ  ์ž‘์„ฑํ•œ ์ฝ”๋“œ๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ ์ฝ”๋“œ๋Š” ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.

Rreact๊ฐ€ ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ์•„๋‹Œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ธ ์ด์œ 

react๋Š” ์ „์ ์œผ๋กœ UI๋ฅผ ๋ Œ๋”๋ง ํ•˜๋Š”๋ฐ ๊ด€์—ฌํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. (view)

๊ทธ๋ž˜์„œ ํŽ˜์ด์ง€ ์ด๋™(๋ผ์šฐํŒ…), ์ƒํƒœ ๊ด€๋ฆฌ ๋“ฑ์„ ํ•˜๊ธฐ ์œ„ํ•ด react-router-dom, redux, recoil ๋“ฑ์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

๐Ÿค”React๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ 

  • ์ƒ๋Œ€์ ์œผ๋กœ ๋ฐฐ์šฐ๊ธฐ ์‰ฌ์›€

  • ์—ฌ๋Ÿฌ ๊ธฐ๋Šฅ์„ ์œ„ํ•ด ์ด๋ฏธ ๋งŒ๋“ค์–ด์ ธ ์žˆ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ™˜๊ฒฝ

  • ๋งŽ์€ ๊ธฐ์—…๋“ค์˜ ์‚ฌ์šฉ์œผ๋กœ ๊ฒ€์ฆ ๋œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(ex. ํŽ˜์ด์Šค๋ถ)

  • JSX(Javascript syntax extension) ์‚ฌ์šฉ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ์—์„œ ๋ช…์‹œ์  HTML ๊ตฌ๋ฌธ์„ ์ง์ ‘ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์ฆ‰, ํ•˜๋‚˜์˜ ํŒŒ์ผ์— ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์™€ HTML์„ ๋™์‹œ์— ์ž‘์„ฑํ•˜์—ฌ ํŽธ๋ฆฌํ•˜๋‹ค. (๊ธฐ๋ณธ UI์— ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€ํ•˜๋Š” ๊ฒƒ์ด๋‚˜ ์ด๋ฒคํŠธ๋“ค์ด ์ฒ˜๋ฆฌ๋˜๋Š” ๋ถ€๋ถ„ ์‰ฝ๊ฒŒ ๊ตฌํ˜„ ๊ฐ€๋Šฅ) (In detail) createElement๋ฅผ ์‰ฝ๊ฒŒ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๋ชจ๋“  UI๋งˆ๋‹ค createElement๋ฅผ ์‚ฌ์šฉx (๋ฒˆ๊ฑฐ๋กœ์›€, ์–ด๋ ค์›€) โˆด jsx ์‚ฌ์šฉ ํ›„ ๋ฐ”๋ฒจ์ด ์ด๊ฒƒ์„ ์ž๋™์œผ๋กœ createElement(์š”์†Œ ์ด๋ฆ„, ๋‚ด์šฉ)๋ฅผ ๋งŒ๋“ค์–ด์คŒ

  • SPA(Single Page Application) ๊ตฌํ˜„ ๊ฐ€๋Šฅ html ํŒŒ์ผ์„ 1๊ฐœ๋งŒ ์“ฐ๊ณ  ๋‹ค๋ฅธ ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•  ๋•Œ html ๋ถ€๋ถ„๋งŒ ๋ฐ”๊พธ์–ด ๋ณด์—ฌ์ค€๋‹ค โ†’ ๋ถ€๋“œ๋Ÿฝ๊ฒŒ ๋™์ž‘ JS๋กœ๋งŒ ์ž‘์„ฑ ์‹œ ์ฝ”๋“œ๊ฐ€ ๋„ˆ๋ฌด ๊ธธ์–ด์ง„๋‹ค. ๊ทธ๋ž˜์„œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ธ ๋ฆฌ์•กํŠธ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

  • CSR(Client-Side Routing)

    React์—์„œ๋Š” React Router์™€ ๊ฐ™์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•ด CSR ๊ตฌํ˜„

    ์ด๋Š” ๋ธŒ๋ผ์šฐ์ €์˜ URL ๋ณ€ํ™”๋ฅผ ๊ฐ์ง€ํ•˜๊ณ , JS๋ฅผ ํ†ตํ•ด ํ•„์š”ํ•œ ๋ถ€๋ถ„๋งŒ ๋กœ๋“œํ•˜๊ณ  ๋ Œ๋”๋งํ•œ๋‹ค. โ†’ ํŽ˜์ด์ง€ ์ „ํ™˜์ด ๋น ๋ฅด๊ณ  ๋ถ€๋“œ๋Ÿฝ๋‹ค.

  • Virtual DOM ๋ Œ๋”๋ง ์‹œ ๋ณ€๊ฒฝ๋œ ๋ถ€๋ถ„๋งŒ ์‹ค์ œ DOM์— ์ ์šฉ์‹œ์ผœ ๋ถˆํ•„์š”ํ•œ ์ž‘์—…์„ ์ตœ์†Œํ™”ํ•˜๊ณ  ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ค๋Š” ๋ฐ ๋„์›€์„ ์ค€๋‹ค.

  • ์ฝ”๋“œ ์žฌ์‚ฌ์šฉ Html์„ ํ•จ์ˆ˜, array, object์— ๋ณด๊ด€ํ•˜์—ฌ ์žฌ์‚ฌ์šฉ ํ•  ์ˆ˜ ์žˆ๋‹ค. โ†’ ๋Œ€๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ์ผ์ˆ˜๋ก html ๊ด€๋ฆฌ๊ฐ€ ํŽธ๋ฆฌํ•ด์ง„๋‹ค.

  • React ๊ธฐ๋ฐ˜์˜ ๋‹ค๋ฅธ ํ”„๋กœ์ ํŠธ์™€ ํ˜ธํ™˜ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๊ณ ์œ ํ•œ ๊ฐ์ฒด, ์ฆ‰ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋งŒ๋“ค์–ด React ๊ธฐ๋ฐ˜์˜ ๋‹ค๋ฅธ ํ”„๋กœ์ ํŠธ์— ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. โ†’ ์—ฌ๋Ÿฌ ํ”„๋กœ์ ํŠธ ๊ฐ„์— ์ผ๊ด€์„ฑ ์žˆ๋Š” ์ฝ”๋“œ์™€ ๊ตฌ์กฐ๋ฅผ ์œ ์ง€ํ•˜๋ฉด์„œ ๊ฐœ๋ฐœ์„ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค. โ†’ ํ•„์š”์— ๋”ฐ๋ผ ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜ ํ™•์žฅํ•˜์—ฌ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์ฝ”๋“œ์˜ ์žฌ์‚ฌ์šฉ์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.

  • React Native ๊ฐ™์€ ๋ฆฌ์•กํŠธ ๋ฌธ๋ฒ•์œผ๋กœ ๋ชจ๋ฐ”์ผ ์•ฑ๊ฐœ๋ฐœ๋„ ๊ฐ€๋Šฅํ•˜๋‹ค. (Html, CSS๋ฌธ๋ฒ•๋งŒ ์•ฝ๊ฐ„ ๋‹ค๋ฆ„)


๐Ÿค๐Ÿฉถ์šฉ์–ด ์ •๋ฆฌ๐Ÿฉถ๐Ÿค

๐ŸฉถJSX: Javascript๋ฅผ ํ™•์žฅํ•œ ๋ฌธ๋ฒ• ๐ŸคcreateElement: HTML ๋ฌธ์„œ์— ์ƒˆ๋กœ์šด ์š”์†Œ๋ฅผ ๋™์ ์œผ๋กœ ์ƒ์„ฑํ•˜๋Š” JavaScript์˜ ๋ฉ”์„œ๋“œ

#๏ธโƒฃ์ปดํฌ๋„ŒํŠธ๋ž€?

๋ฆฌ์•กํŠธ๋กœ ๋งŒ๋“ค์–ด์ง„ ์•ฑ์„ ์ด๋ฃจ๋Š” ์ตœ์†Œํ•œ์˜ ๋‹จ์œ„

  • ์žฅ์  - ์žฌ์‚ฌ์šฉ์ด ์šฉ์ดํ•จ(์—ฌ๋Ÿฌ ๊ณณ์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅ) - ์—ฌ๋Ÿฌ ๋ช…์ด ๋งก์€ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋™์‹œ์— ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์Œ

  • ์ข…๋ฅ˜ ํด๋ž˜์Šคํ˜• / ํ•จ์ˆ˜ํ˜• ํด๋ž˜์Šค ์ฒ˜์Œ์—๋Š”ํด๋ž˜์Šคํ˜• ์‚ฌ์šฉํ•˜๋‹ค hooks๊ฐ€ ๋ฐœํ‘œ๋˜๋ฉด์„œ ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ ์‚ฌ์šฉ

#๏ธโƒฃSPA(single page application)

์›น์‚ฌ์ดํŠธ์˜ ์ „์ฒด ํŽ˜์ด์ง€๋ฅผ ํ•˜๋‚˜์˜ ํŽ˜์ด์ง€์— ๋‹ด์•„ ๋™์ ์œผ๋กœ ํ™”๋ฉด์„ ๋ฐ”๊ฟ”๊ฐ€๋ฉฐ ํ‘œํ˜„ํ•˜๋Š” ๊ฒƒ

(์ด์ „์—๋Š” ํ•œ ํŽ˜์ด์ง€๋‹น ํ•˜๋‚˜์˜ html ํŒŒ์ผ) index.html

jsํŒŒ์ผ์—์„œ root๋ฅผ ์žก์•„ ์‚ฌ์šฉ

  • ์žฅ์  ๋น ๋ฅธ ์†๋„, ํ–ฅ์ƒ๋œ ์œ ์ € ๊ฒฝํ—˜, ํšจ์œจ์ ์ธ ์บ์‹ฑ, ๋” ์ ์€ ์„œ๋ฒ„ ๋ฆฌ์†Œ์Šค(์ž์›)์‚ฌ์šฉ, ๊ฐ„์†Œํ™”๋œ ๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค

  • ๋‹จ์  ๋‚ฎ์€ SEO, ์ตœ์ดˆ ๋กœ๋”ฉ ์‹œ๊ฐ„, ๋ธŒ๋ผ์šฐ์ € ๊ธฐ๋ก ์ €์žฅ, ๋„ˆ๋ฌด ์ปค์ง€๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ์˜ ์‚ฌ์ด์ฆˆ

๐Ÿค”SPA์—์„œ ํ™”๋ฉด ๋ณ€๊ฒฝ ๋ฐฉ๋ฒ•

HTML5์˜ History API ์‚ฌ์šฉ โ†’ React-Router-Dom์ด History API๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ


์ฐธ๊ณ  ์‚ฌ์ดํŠธ

SPA๊ฐ€ ๋ฌด์—‡์ด๊ณ  ์–ด๋–ค ์žฅ์ ๊ณผ ๋‹จ์ ์ด ์žˆ์„๊นŒ?

Last updated