๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Web

[React] React.js๋ž€? (๊ฐ„๋‹จ ์ •๋ฆฌ)

by JulesJ 2022. 8. 22.
728x90

์„œ๋ก ๐Ÿง

์˜ค๋Š˜์€ React๋ž€ ๋ฌด์—‡์ธ์ง€, ์ •์˜์™€ ํŠน์ง•์— ๋Œ€ํ•ด ๊ฐ„๋‹จํžˆ ์ •๋ฆฌํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.
์›น ํŽ˜์ด์ง€๋ฅผ ๊ฐœ๋ฐœํ•˜๋ฉด์„œ ์ด์šฉํ–ˆ์—ˆ๋Š”๋ฐ, ์ •ํ™•ํ•˜๊ฒŒ ๋ฌด์—‡์ธ์ง€, ํŠน์ง•๊ณผ ์žฅ์ ์ด ๋ฌด์—‡์ธ์ง€ ์ž˜ ๋ชจ๋ฅด๊ณ  ์‚ฌ์šฉํ•ด์™”๋˜ ๊ฒƒ ๊ฐ™์•„ ์ •๋ฆฌํ•ด๋ณด์•˜์Šต๋‹ˆ๋‹ค.

React๋ž€?

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

์ถœ์ฒ˜ : ์œ„ํ‚ค๋ฐฑ๊ณผ

 

  • React๋Š” facebook์—์„œ ์ œ๊ณตํ•ด์ฃผ๋Š” ํ”„๋ก ํŠธ์—”๋“œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์‹ฑ๊ธ€ ํŽ˜์ด์ง€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด๋‚˜ ๋ชจ๋ฐ”์ผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ฐœ๋ฐœ ์‹œ ํ† ๋Œ€๋กœ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฆ‰, ํ˜„์žฌ ๋งŽ์ด ํ™œ์šฉ๋˜๊ณ  ์žˆ๋Š”, ์›น/์•ฑ์˜ View๋ฅผ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ์ธ๊ธฐ์žˆ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

React์˜ ํ•„์š”์„ฑ?

react๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„๋„, html๊ณผ css, javascript๋ฅผ ์ด์šฉํ•ด์„œ ์›น ํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์ง€๋งŒ, react๋ฅผ ์ด์šฉํ•ด ์‚ฌ์šฉ์ž์™€ ์ƒํ˜ธ์ž‘์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋™์ ์ธ UI๋ฅผ ์‰ฝ๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋งŽ์ด ์ด์šฉ๋˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค..!

 

React์˜ ํŠน์ง•

React์˜ ํŠน์ง•์€ ํฌ๊ฒŒ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ตฌ๋ถ„ํ•ด๋ณด์•˜์Šต๋‹ˆ๋‹ค.

  1. Data Flow
  2. Component ๊ธฐ๋ฐ˜ ๊ตฌ์กฐ
  3. Virtual Dom
  4. Props and State
  5. JSX

1. Data Flow

React๋Š” ๋ฐ์ดํ„ฐ์˜ ํ๋ฆ„์ด ํ•œ ๋ฐฉํ–ฅ์œผ๋กœ๋งŒ ํ๋ฅด๋Š” ๋‹จ๋ฐฉํ–ฅ ๋ฐ์ดํ„ฐ ํ๋ฆ„์„ ๊ฐ€์ง‘๋‹ˆ๋‹ค.

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

 

2. Component ๊ธฐ๋ฐ˜ ๊ตฌ์กฐ

Component๋Š” ๋…๋ฆฝ์ ์ธ ๋‹จ์œ„์˜ ์†Œํ”„ํŠธ์›จ์–ด ๋ชจ๋“ˆ์„ ๋งํ•ฉ๋‹ˆ๋‹ค.
์ฆ‰, ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๋…๋ฆฝ์ ์ธ ํ•˜๋‚˜์˜ ๋ถ€ํ’ˆ์œผ๋กœ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์ด๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

React๋Š” UI(View)๋ฅผ ์—ฌ๋Ÿฌ ์ปดํฌ๋„ŒํŠธ(component)๋ฅผ ์ชผ๊ฐœ์„œ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
ํ•œ ํŽ˜์ด์ง€ ๋‚ด์—์„œ๋„ ์—ฌ๋Ÿฌ ๊ฐ ๋ถ€๋ถ„์„ ๋…๋ฆฝ๋œ ์ปดํฌ๋„ŒํŠธ๋กœ ๋งŒ๋“ค๊ณ , ์ด ์ปดํฌ๋„ŒํŠธ๋ฅผ ์กฐ๋ฆฝํ•ด ํ™”๋ฉด์„ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค.

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

class App extends Component {
  render() {
    return (
      <Layout>
        <Header />
        <Navigation />
        <Content>
          <Sidebar></Sidebar>
          <Router />
        </Content>
        <Footer></Footer>
      </Layout>
    );
  }
}

์œ„์™€ ๊ฐ™์ด Header, Footer๊ฐ™์€ ๊ตฌ์กฐ๋“ฑ์„ ์ปดํฌ๋„ŒํŠธ๋กœ ๋งŒ๋“ค๊ณ , ์ด๋ฅผ ์กฐํ•ฉํ•ด์„œ root component๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.

 

3. Virtual DOM

๋จผ์ €, DOM์€ Document Object Model์˜ ์•ฝ์ž์ž…๋‹ˆ๋‹ค.
DOM์€ html, xml, CSS ๋“ฑ์„ ํŠธ๋ฆฌ ๊ตฌ์กฐ๋กœ ์ธ์‹ํ•˜๊ณ , ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ์ฒด๋กœ ๊ฐ„์ฃผํ•˜๊ณ  ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

React๋Š” ์ด DOM Tree ๊ตฌ์กฐ์™€ ๊ฐ™์€ ๊ตฌ์กฐ์ฒด๋ฅผ Virtual DOM์œผ๋กœ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

Virtual DOM์€ ๊ฐ€์ƒ์˜ Document Object Model์„ ๋งํ•ฉ๋‹ˆ๋‹ค

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

 

4. Props and State

  • Props
    Props๋ž€ ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ์—์„œ ์ž์‹ ์ปดํฌ๋„ŒํŠธ๋กœ ์ „๋‹ฌํ•ด ์ฃผ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋งํ•ฉ๋‹ˆ๋‹ค.
    ์‰ฝ๊ฒŒ ์ฝ๊ธฐ ์ „์šฉ ๋ฐ์ดํ„ฐ๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค! ์ž์‹ ์ปดํฌ๋„ŒํŠธ์—์„œ ์ „๋‹ฌ๋ฐ›์€ props๋Š” ๋ณ€๊ฒฝ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๊ณ  props๋ฅผ ์ „๋‹ฌํ•ด์ค€ ์ตœ์ƒ์œ„ ๋ถ€๋ชจ ์ปดํฌ๋„ŒํŠธ๋งŒ props๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • State
    State๋Š” ์ปดํฌ๋„ŒํŠธ ๋‚ด๋ถ€์—์„œ ์„ ์–ธํ•˜๋ฉฐ ๋‚ด๋ถ€์—์„œ ๊ฐ’์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. state๋Š” ๋™์ ์ธ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃฐ ๋•Œ ์‚ฌ์šฉํ•˜๋ฉฐ, ์‚ฌ์šฉ์ž์™€์˜ ์ƒํ˜ธ์ž‘์šฉ์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ๋™์ ์œผ๋กœ ๋ณ€๊ฒฝํ•  ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ํด๋ž˜์Šคํ˜• ์ปดํฌ๋„ŒํŠธ์—์„œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ณ , ๊ฐ๊ฐ์˜ state๋Š” ๋…๋ฆฝ์ ์ž…๋‹ˆ๋‹ค.

 

5. JSX

React์—์„œ JSX ์‚ฌ์šฉ์ด ํ•„์ˆ˜๋Š” ์•„๋‹ˆ์ง€๋งŒ, React์—์„œ ์‚ฌ์šฉ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๊ณต์‹๋ฌธ์„œ์˜ ์„ค๋ช…์„ ์ฒจ๋ถ€ํ•ด ๊ฐ„๋‹จํžˆ ์ •๋ฆฌํ•ด ๋ณด์•˜์Šต๋‹ˆ๋‹ค!

const element = <h1>Hello, world!</h1>;

์œ„์™€ ๊ฐ™์€ ๋ณ€์ˆ˜ ์„ ์–ธ๋„ JSX๋ฌธ๋ฒ•์ž…๋‹ˆ๋‹ค!

 

JSX๋ž€ ?
Javascript๋ฅผ ํ™•์žฅํ•œ ๋ฌธ๋ฒ•์ž…๋‹ˆ๋‹ค.

React์—์„œ๋Š” ์ด๋ฒคํŠธ๊ฐ€ ์ฒ˜๋ฆฌ๋˜๋Š” ๋ฐฉ์‹, ์‹œ๊ฐ„์— ๋”ฐ๋ผ state๊ฐ€ ๋ณ€ํ•˜๋Š” ๋ฐฉ์‹, ํ™”๋ฉด์— ํ‘œ์‹œํ•˜๊ธฐ ์œ„ํ•ด ๋ฐ์ดํ„ฐ๊ฐ€ ์ค€๋น„๋˜๋Š” ๋ฐฉ์‹ ๋“ฑ ๋ Œ๋”๋ง ๋กœ์ง์ด ๋ณธ์งˆ์ ์œผ๋กœ ๋‹ค๋ฅธ UI ๋กœ์ง๊ณผ ์—ฐ๊ฒฐ๋œ๋‹ค๋Š” ์‚ฌ์‹ค์„ ๋ฐ›์•„๋“ค์ž…๋‹ˆ๋‹ค.

React๋Š” ๋ณ„๋„์˜ ํŒŒ์ผ์— ๋งˆํฌ์—…๊ณผ ๋กœ์ง์„ ๋„ฃ์–ด ๊ธฐ์ˆ ์„ ์ธ์œ„์ ์œผ๋กœ ๋ถ„๋ฆฌํ•˜๋Š” ๋Œ€์‹ , ๋‘˜ ๋‹ค ํฌํ•จํ•˜๋Š” “์ปดํฌ๋„ŒํŠธ”๋ผ๊ณ  ๋ถ€๋ฅด๋Š” ๋Š์Šจํ•˜๊ฒŒ ์—ฐ๊ฒฐ๋œ ์œ ๋‹›์œผ๋กœ ๊ด€์‹ฌ์‚ฌ๋ฅผ ๋ถ„๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์ดํ›„ ์„น์…˜์—์„œ ๋‹ค์‹œ ์ปดํฌ๋„ŒํŠธ๋กœ ๋Œ์•„์˜ค๊ฒ ์ง€๋งŒ, JS์— ๋งˆํฌ์—…์„ ๋„ฃ๋Š” ๊ฒŒ ์ต์ˆ™ํ•ด์ง€์ง€ ์•Š๋Š”๋‹ค๋ฉด ์ด ์ด์•ผ๊ธฐ๊ฐ€ ํ™•์‹ ์„ ์ค„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

React๋Š” JSX ์‚ฌ์šฉ์ด ํ•„์ˆ˜๊ฐ€ ์•„๋‹ˆ์ง€๋งŒ, ๋Œ€๋ถ€๋ถ„์˜ ์‚ฌ๋žŒ์€ JavaScript ์ฝ”๋“œ ์•ˆ์—์„œ UI ๊ด€๋ จ ์ž‘์—…์„ ํ•  ๋•Œ ์‹œ๊ฐ์ ์œผ๋กœ ๋” ๋„์›€์ด ๋œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ React๊ฐ€ ๋”์šฑ ๋„์›€์ด ๋˜๋Š” ์—๋Ÿฌ ๋ฐ ๊ฒฝ๊ณ  ๋ฉ”์‹œ์ง€๋ฅผ ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค.
React ๊ณต์‹๋ฌธ์„œ

 


 

๋งˆ์น˜๋ฉฐ๐Ÿง

 

์‚ฌ์‹ค ์ €๋„ ๊ทธ๋™์•ˆ react๋ฅผ ์ด์šฉํ•ด ์›น ๊ฐœ๋ฐœ์„ ์กฐ๊ธˆ์€ ํ•ด๋ณด์•˜๋Š”๋ฐ, ์ด๋Ÿฌํ•œ ํŠน์ง•๋“ค์„ ์ž˜ ์•Œ๊ณ  ์ด์šฉํ•˜์ง€๋Š” ๋ชปํ–ˆ๋˜ ๊ฒƒ ๊ฐ™๋‹ค๋Š” ์ƒ๊ฐ์„ ํ–ˆ์Šต๋‹ˆ๋‹ค.. ์ด๋ฒˆ ๊ธฐํšŒ์— ์ •๋ฆฌํ•ด๋ณด๊ณ  ๊ณต๋ถ€ํ•˜๋Š” ์‹œ๊ฐ„์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์—ˆ๊ณ , ์•ž์œผ๋กœ๋Š” ์ข€ ๋” ๊ฐœ๋…์„ ์ด์šฉํ•˜๊ณ , ์‚ฌ์šฉํ•˜๊ฒŒ ๋  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

 

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค๐Ÿ˜‰

'Web' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[CSS] footer ํ•˜๋‹จ ๊ณ ์ •  (0) 2022.08.07

๋Œ“๊ธ€