TIL

React๋ฅผ ์™œ ๋ฐฐ์šฐ๋Š”๊ฐ€

nana-log 2024. 2. 12. 16:44

๐Ÿ“Œ React๋Š” ์™œ ํ•„์š”ํ•œ๊ฑธ๊นŒ?

๋ฆฌ์•กํŠธ๋ฅผ ์™œ ๋ฐฐ์šฐ๋Š”๊ฐ€? ์–ด๋–ค ๊ธฐ์ˆ ๋„ ์ด์œ ์—†์ด ๋งŒ๋“ค์–ด์ง€์ง€ ์•Š๋Š”๋‹ค.

๋ชจ๋“  ๊ธฐ์ˆ ์€ ๋ถˆํŽธํ•จ์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋‚˜์™”๊ณ  ๋ฐœ์ „ํ•ด์™”๋‹ค.

๊ทธ๋ž˜์„œ ์–ด๋–ค ๊ธฐ์ˆ ์„ ๋ฐฐ์šด๋‹ค๋Š” ๊ฒƒ์€ ๋‹จ์ˆœํžˆ ์‚ฌ์šฉ๋ฒ•๋งŒ ๋ฐฐ์šด๋‹ค๋Š” ๊ฒƒ๋งŒ ์˜๋ฏธํ•˜์ง€ ์•Š๋Š”๋‹ค.

๋‹จ์ˆœํžˆ ์‚ฌ์šฉ๋ฒ•๋งŒ ์ตํžˆ๋Š” ์‹์œผ๋กœ ๋ฐฐ์šฐ๊ฒŒ ๋˜๋ฉด ๊ธฐ์ˆ ์— ๋Œ€ํ•œ ์‹œ์•ผ๊ฐ€ ์ข์•„์ง€๊ฒŒ ๋œ๋‹ค.

์‹œ์•ผ๊ฐ€ ์ข์•„์ง„๋‹ค๋Š” ๊ฑด ๋ฌธ์ œํ•ด๊ฒฐ๋Šฅ๋ ฅ์ด ๋ถ€์กฑํ•˜๋‹ค๊ณ ๋„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

์‹œ์•ผ๊ฐ€ ์ข์•„์ง€๋ฉด, ๋‚ด๊ฐ€ ๋ฐฐ์šด๋Œ€๋กœ๊ฐ€ ์•„๋‹ˆ๋ฉด ๋˜๋Š” ๋‚ด๊ฐ€ ๊ฒช์–ด๋ณธ๋Œ€๋กœ๊ฐ€ ์•„๋‹ˆ๋ฉด ํ•ด๊ฒฐํ•  ์ˆ˜๊ฐ€ ์—†๊ฒŒ ๋˜๊ณ ,

์‹ฌํ•˜๋ฉด ํ•ด๊ฒฐํ•  ์˜์ง€๊ฐ€ ์—†๊ฒŒ ๋˜๊ณ  ๋ฌธ์ œํ•ด๊ฒฐ๋Šฅ๋ ฅ์ด ์—†๋Š” ๊ฐœ๋ฐœ์ž๋ฅผ ์›ํ•˜๋Š” ๊ณณ์€ ์—†๋‹ค.

โœ”๏ธ ์ค‘๋ณต ์ฝ”๋“œ ์ž‘์„ฑ ๋ฌธ์ œ์— ๋Œ€ํ•œ ํ•ด๊ฒฐ์ 

  • header, nav, footer ๋“ฑ ๊ฐœ๋ณ„์ ์ธ ์š”์†Œ๊ฐ€ ์•„๋‹Œ ๊ณตํ†ต ์š”์†Œ์— ๋Œ€ํ•œ ์ค‘๋ณต ์ฝ”๋“œ ๊ด€๋ฆฌ ์œ ์ง€๋ณด์ˆ˜ ์ธก๋ฉด์—์„œ ์œ ์šฉ
  • ์žฌ์‚ฌ์šฉ๋˜๋Š” ์š”์†Œ๋ฅผ ์ปดํฌ๋„ŒํŠธํ™” (Component ๊ธฐ๋ฐ˜์˜ UI ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ)

โœ”๏ธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹์˜ ์ฐจ์ด

  • ๋ช…๋ นํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ(์ ˆ์ฐจ๋ฅผ ํ•˜๋‚˜ํ•˜๋‚˜ ๋‹ค ๋‚˜์—ด ํ•ด์•ผํ•จ) : ๊ฑฐ๋Œ€ํ•œ ์›น์‚ฌ์ดํŠธ์˜ ๊ธฐ๋Šฅ์„ ๋ช…๋ นํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐํ•  ๊ฒฝ์šฐ ์ฝ”๋“œ๊ฐ€ ๋„ˆ๋ฌด ๊ธธ์–ด์ง€๊ณ  ๊ฐ€๋…ํ•˜๊ธฐ ํž˜๋“ค์–ด์ง (ex : jQuery)
  • ์„ ์–ธํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ(๊ทธ๋ƒฅ ๋ชฉ์ ์„ ๋ฐ”๋กœ ๋งํ•จ) (ex : React)

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

์˜ˆ๋ฅผ ๋“ค์–ด, ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๋ฉด ํŠน์ • ํ…์ŠคํŠธ๊ฐ€ ๋ณ€๊ฒฝ๋˜๋Š” ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ณด์ž. ๋ฐ”๋‹๋ผ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ(๋ช…๋ นํ˜•)์™€ React(์„ ์–ธํ˜•)๋กœ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

๋ฐ”๋‹๋ผ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ(๋ช…๋ นํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ)

const button = document.getElementById('myButton');
const text = document.getElementById('myText');

button.addEventListener('click', function() {
    text.textContent = 'Button was clicked!';
});

React(์„ ์–ธํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ)

import React, { useState } from 'react';

function MyComponent() {
    const [text, setText] = useState('');

    function handleClick() {
        setText('Button was clicked!');
    }

    return (
        <div>
            <button onClick={handleClick}>Click me</button>
            <p>{text}</p>
        </div>
    );
}

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

โœ”๏ธ Virtual DOM

  • DOM(Document Object Model) : ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์‹ค์ œ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฐ์ฒด
  • ๋ธŒ๋ผ์šฐ์ €์—์„œ ํ•„์š” ์ด์ƒ์˜ ์—ฐ์‚ฐ ์ˆ˜ํ–‰ ์‹œ ์„ฑ๋Šฅ์ €ํ•˜๋กœ ์ด์–ด์ง
  • ๊ฐ€์ƒ์˜ DOM์— ๋ฏธ๋ฆฌ ์—…๋ฐ์ดํŠธ๋ฅผ ์‹œ์ผœ๋ณธ ํ›„ (๋ Œ๋”๋ง ์—ฐ์‚ฐ์„) ํ•œ๋ฒˆ์— ๋ชจ์•„์„œ ์‹ค์ œ DOM์— ์—…๋ฐ์ดํŠธ ์‹œํ‚ด. ๊ณผ๋‹ค์—ฐ์‚ฐ ํ•ด๊ฒฐ => 5๋ฒˆ ์—…๋ฐ์ดํŠธํ•  ๊ฑฐ 1๋ฒˆ๋งŒ์— ํ†ต์งธ๋กœ ์—…๋ฐ์ดํŠธ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋จ.

๐Ÿ”Ž ์ฐธ๊ณ ์ž๋ฃŒ

๋ฆฌ์•กํŠธ๋ž€ ๊ธฐ์ˆ ์— ๋Œ€ํ•œ ์ ‘๊ทผ์œผ๋กœ ๋” ์ฐพ์•„๋ณธ ์ž๋ฃŒ๋“ค

โœ”๏ธ ๋ฆฌ์•กํŠธ๋Š” ์›น/์•ฑ์˜ View๋ฅผ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ค€๋‹ค?

React๋Š” View๋งŒ์„ ์œ„ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
์—ฌ๊ธฐ์„œ ๋งํ•˜๋Š” View๋ž€ MVC ํŒจํ„ด์˜ V(View)
MVC ํŒจํ„ด (Model : Data, View : UI, Controller : Logic)

์ฐธ๊ณ ์ž๋ฃŒ

โœ”๏ธ ์ข‹์€ ๊ฑด ์•Œ๊ฒ ๋Š”๋ฐ ์™œ ์“ฐ๋Š”๊ฑธ๊นŒ? (๋” ์ด์œ ๋ฅผ ์ฐพ์•„๋ณด์ž)

์ปดํฌ๋„ŒํŠธ ์ถ”์ƒํ™”

๋ฆฌ์•กํŠธ๋กœ ๋งŒ๋“ค์–ด์ง„ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์—˜๋ฆฌ๋จผํŠธ(Element)๋ผ๋Š” ํ™”๋ฉด์— ๋ณด์—ฌ์งˆ ๊ฒƒ์„ ํ‘œํ˜„ํ•˜๋Š” ์š”์†Œ๋กœ ๊ตฌ์„ฑ๋œ๋‹ค. ์ด๊ฒƒ์€ ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด(Object-Oriented Language)๋กœ ๋งŒ๋“ค์–ด์ง„ ํ”„๋กœ๊ทธ๋žจ์ด ๊ฐ์ฒด๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋Š” ๊ฒƒ๊ณผ ๊ฐ™๋‹ค.

๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์—๋Š” ์ƒ์„ฑ์ž๊ฐ€ ์žˆ๋‹ค. ์ด ์ƒ์„ฑ์ž๋Š” ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ดˆ๊ธฐํ™”ํ•˜๋Š” ์—ญํ• ์„ ๋งก๋Š”๋‹ค. ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋ฆฌ์•กํŠธ์—๋Š” ๋ฆฌ์•กํŠธ ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ(Component)๊ฐ€ ์žˆ๋‹ค. ์ปดํฌ๋„ŒํŠธ๋Š” Props๋ผ๋Š” ์ž…๋ ฅ์„ ๋ฐ›๊ณ , ๋ฆฌ์•กํŠธ ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ๋งŒ๋“ค์–ด๋‚ธ๋‹ค.


์—ฌ๊ธฐ์„œ ์ปดํฌ๋„ŒํŠธ๋Š” ๋ณต์žกํ•œ UI๋‹จ์„ ์ถ”์ƒํ™”ํ•ด์ค€๋‹ค.

์™œ ์ถ”์ƒํ™” ํ•ด์ค€๋‹ค๋Š” ์ ์ด ์ค‘์š”ํ• ๊นŒ?


์šฐ๋ฆฌ๋Š” ์ปดํ“จํ„ฐ๋ฅผ ์ด์šฉํ•ด ๋ณต์žกํ•œ ๋ฌธ์ œ๋“ค์„ ํ•ด๊ฒฐํ•œ๋‹ค. ์•Œ๋‹ค์‹œํ”ผ ์ปดํ“จํ„ฐ๋กœ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•์„ ์ œ์‹œํ•˜๋Š” ๋ฐฉ๋ฒ•๋ก ์„ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํŒจ๋Ÿฌ๋‹ค์ž„์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค. ์ฆ‰, ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํŒจ๋Ÿฌ๋‹ค์ž„๋“ค์€ ์•ž์—์„œ ์ด์•ผ๊ธฐํ•œ ๋ณต์žกํ•œ ๋ฌธ์ œ๋“ค์„ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ œ์‹œํ•˜๊ณ  ์žˆ๋‹ค.

๋ชจ๋“  ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํŒจ๋Ÿฌ๋‹ค์ž„์˜ ํ•ด๋‹ต์„ ๋ณผ ์ˆ˜๋Š” ์—†์œผ๋‹ˆ ์ž˜ ์•Œ๋ ค์ง„ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํŒจ๋Ÿฌ๋‹ค์ž„์ธ ๊ฐ์ฒด์ง€ํ–ฅ(Object-Oriented), ๋ช…๋ น์ค‘์‹ฌ(ํ˜น์€ ์ ˆ์ฐจ์ง€ํ–ฅ, Procedural), ํ•จ์ˆ˜ํ˜•(Functional) ๋“ฑ์ด ์žˆ์Œ. ํฅ๋ฏธ๋กญ๊ฒŒ๋„ ๊ฐ™์€ ์–ธ์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ž‘์„ฑํ•œ๋‹ค๊ณ  ํ•˜๋”๋ผ๋„ ํ”„๋กœ๊ทธ๋žจ์˜ ๊ตฌ์กฐ๊ฐ€ ๊ทน๊ณผ ๊ทน์„ ๋‹ฌ๋ฆด ์ •๋„๋กœ ๋‹ค๋ฅด๊ฒŒ ๋˜๋Š” ์ด ์„ธ ํŒจ๋Ÿฌ๋‹ค์ž„์˜ ๋ณต์žกํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์˜ ๊ธฐ์ดˆ์ ์ธ ์•„์ด๋””์–ด๋Š” ์ „๋ถ€ ๊ฐ™๋‹ค.

๋ชจ๋‘ ๊ฐ์ž์˜ ๊ฐœ๋…์„ ํ†ตํ•ด ๋ฌธ์ œ๋ฅผ ์ž‘๊ฒŒ ์ชผ๊ฐœ๊ณ , ํ•ด๊ฒฐํ•œ ๋’ค, ๊ทธ ํ•ด๊ฒฐ๋ฒ•์„ ๋‹ค์‹œ ํ•ฉ์ณ ๋ณต์žกํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•œ๋‹ค.

 

๊ทธ๋Ÿผ ์™œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํŒจ๋Ÿฌ๋‹ค์ž„๋“ค์€ ๋ฌธ์ œ๋ฅผ ํ•œ ๋ฒˆ์— ํ’€์ง€ ์•Š๊ณ  ์ชผ๊ฐœ์„œ ํ’€๊นŒ?

์ปดํ“จํ„ฐ๋Š” ๋ณต์žกํ•œ ๋ฌธ์ œ๋ฅผ ํ•œ๋ฒˆ์— ํ•ด๊ฒฐํ•  ์ˆ˜ ์—†๋Š” ๊ฑธ๊นŒ?

"ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํŒจ๋Ÿฌ๋‹ค์ž„๋“ค์ด ๋ณต์žกํ•œ ๋ฌธ์ œ๋ฅผ ์ชผ๊ฐœ์„œ ํ‘ธ๋Š” ์•„์ด๋””์–ด์— ๊ธฐ๋ฐ˜ํ•œ ์ด์œ ๋Š” ์‚ฌ๋žŒ์˜ ๋‡Œ์˜ ํ•œ๊ณ„ ๋•Œ๋ฌธ์ด๋‹ค (by Bartosz Milewski)"

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

์•ž์„œ ์ด์•ผ๊ธฐํ–ˆ๋“ฏ์ด, ์‚ฌ๋žŒ์˜ ๋‡Œ์˜ ์ •๋ณด ์ €์žฅ ๋Šฅ๋ ฅ ๋ฐ ์ฒ˜๋ฆฌ ๋Šฅ๋ ฅ์€ ํ•œ๊ณ„๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์•„๋ฌด๋ฆฌ ๋ฌธ์ œ๋ฅผ ์ชผ๊ฐœ์—ˆ๋‹ค๊ณ  ํ•˜์—ฌ๋„, ์ชผ๊ฐœ์ง„ ๋ฌธ์ œ์˜ ํ•ด๊ฒฐ์ฑ…์„ ๋‹ค๋ฅธ ์ชผ๊ฐœ์ง„ ๋ฌธ์ œ๋“ค์˜ ํ•ด๊ฒฐ์ฑ…๊ณผ ํ•ฉ์น˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ํ•„ํžˆ ๋‡Œ์— ํ•ด๊ฒฐ์ฑ…์„ ์ €์žฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ์ €์žฅํ•˜๋‹ค ๋ณด๋ฉด ์‚ฌ๋žŒ์˜ ๋‡Œ๋Š” ํ•œ๊ณ„์— ๋„๋‹ฌํ•˜๊ฒŒ ๋˜์–ด ์žˆ์ง€์š”.

ํ•˜์ง€๋งŒ, ๊ทธ ํ•ด๊ฒฐ์ฑ…์„ ์ˆจ๊ธด๋‹ค๋ฉด ์–ด๋–จ๊นŒ์š”? ํ”„๋กœ๊ทธ๋ž˜๋จธ๋Š” ๊ทธ์ € ์–ด๋–ค ์ƒ์ž ์•ˆ์— ํ•ด๊ฒฐ์ฑ…์ด ๋“ค์–ด ์žˆ๋‹ค๊ณ  ์ƒ์ƒํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋˜๋Š”๊ฒ๋‹ˆ๋‹ค. ์•ˆ์— ๋ฌธ์ œ๋ฅผ ๋„ฃ์œผ๋ฉด ๊ทธ ๋ฌธ์ œ์— ๋Œ€ํ•œ ๋‹ต์„ ๋‹ค์‹œ ๋˜์ ธ์ฃผ๋Š” ์ƒ์ž์š”! ์ด๋ ‡๊ฒŒ ๋ฌธ์ œ๋ฅผ ์ถ”์ƒํ™”์‹œํ‚ค๋ฉด ์ด๋ก ์ƒ ๋ชจ๋“  ๋ฌธ์ œ๋ฅผ ๋‡Œ์— ์ €์žฅํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ฆ‰, ํ•ด๊ฒฐ์ฑ…์„ ๋ฌดํ•œ๋Œ€๋กœ ํ•ฉ์ณ๋‚˜๊ฐˆ ์ˆ˜ ์žˆ๋‹ค๋Š” ์ด์•ผ๊ธฐ. ๋‹ค์‹œ ์ฒ˜์Œ์œผ๋กœ ๋Œ์•„๊ฐ€ ๊ฒฐ๋ก ์„ ๋‚ด๋ฆฌ์ž๋ฉด, ์ถ”์ƒํ™”๋Š” ์‚ฌ๋žŒ์˜ ๋‡Œ๋กœ๋Š” ์„ค๊ณ„ํ•  ์ˆ˜ ์—†๋Š” ๋ณต์žกํ•œ ๋ฌธ์ œ์— ๋Œ€ํ•œ ํ•ด๊ฒฐ์ฑ…์„ ์„ค๊ณ„ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด ์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

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

๋ณ€ํ™”ํ•˜๋Š” ์ƒํƒœ๊ฐ’ ๊ด€๋ฆฌ

UI๋Š” ์‚ฌ์šฉ์ž์™€ ๋Š์ž„์—†์ด ์ƒํ˜ธ์ž‘์šฉํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž์˜ ์ž…๋ ฅ์— ๋”ฐ๋ผ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ƒํƒœ๊ฐ€ ๋ณ€ํ™”ํ•˜๊ณ , ๋ณ€ํ™”๋œ ์ƒํƒœ์— ๋”ฐ๋ผ ํ™”๋ฉด์ด ๋ณ€ํ™”ํ•ฉ๋‹ˆ๋‹ค. ์ƒํƒœ์™€ ํ™”๋ฉด, ์ด ๋‘˜์€ ๋ณ€ํ™”ํ•˜๋Š” ๊ฐ’(Value over time)์ž…๋‹ˆ๋‹ค. ๋ณ€ํ™”ํ•˜๋Š” ๊ฐ’๋“ค์€ ๋‹ค๋ฃจ๊ธฐ ์–ด๋ ต์Šต๋‹ˆ๋‹ค. ๊ฐ’์˜ ๋ณ€ํ™”์— ๋งž์ถ”์— ๊ด€๋ จ๋œ ๋‹ค๋ฅธ ๊ฒƒ๋“ค๋„ ๋ณ€ํ™”์‹œํ‚ค๊ธฐ ์œ„ํ•ด ํ•ญ์ƒ ์˜ˆ์˜์ฃผ์‹œํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์‚ฌ๋žŒ๋“ค์€ ์—ฌ๊ธฐ์„œ ํฌ๊ธฐํ•˜์ง€ ์•Š๊ณ , “๊ฐ’์˜ ๋ณ€ํ™”๋ฅผ ์Šค์Šค๋กœ ์ „ํŒŒ์‹œํ‚ค๊ฒŒ ํ•˜๋ฉด ๋œ๋‹ค.” ๋ผ๋Š” ์•„์ด๋””์–ด์— ๊ธฐ๋ฐ˜ํ•ด ๋ฆฌ์•กํ‹ฐ๋ธŒ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด๋ผ๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํŒจ๋Ÿฌ๋‹ค์ž„์„ ๊ณ ์•ˆํ•ด ๋ƒˆ์Šต๋‹ˆ๋‹ค. ๋ฆฌ์•กํ‹ฐ๋ธŒ ํ”„๋กœ๊ทธ๋ž˜๋ฐ(Reactive Programming)์€ ์˜ต์ ธ๋ฒ„๋ธ”(Observable)๊ณผ ์—ฌ๋Ÿฌ ๊ฐœ๋…๋“ค์„ ์‚ฌ์šฉํ•ด ๋ณ€ํ™”ํ•˜๋Š” ๊ฐ’๋“ค์„ ํ›Œ๋ฅญํžˆ ๋‹ค๋ฃน๋‹ˆ๋‹ค.

"์˜ต์ ธ๋ฒ„๋ธ”, ์ŠคํŠธ๋ฆผ(Stream). ์ด ๋‘ ์šฉ์–ด๋Š” ๋™์˜์–ด์ž…๋‹ˆ๋‹ค. ๋ฆฌ์•กํ‹ฐ๋ธŒ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ปค๋ฎค๋‹ˆํ‹ฐ๋Š” ์–ด๋–ค ๋‹จ์–ด๋ฅผ ์“ฐ๋“  ๊ฐ™์€ ์˜๋ฏธ"

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

๊ฐ€์ƒ ๋”์„ ํ†ตํ•œ ๋น ๋ฅธ ๋ Œ๋”๋ง

์™œ ๋ฆฌ์•กํŠธ๋Š” DOM ๋…ธ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ , ์ž์ฒด์ ์ธ ์—˜๋ฆฌ๋จผํŠธ๋“ค์„ ํ†ตํ•ด ํ™”๋ฉด์„ ๊ตฌ์„ฑํ• ๊นŒ์š”? ์‚ฌ์‹ค, ๋ฆฌ์•กํŠธ๋Š” DOM์„ ๋‚ด๋ถ€์ ์œผ๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์šฐ๋ฆฌ์—๊ฒŒ๋Š” ๋…ธ์ถœ์‹œ์ผœ์ฃผ์ง€ ์•Š๋Š” ๊ฒƒ์ผ ๋ฟ ์ž…๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด DOM์€ ๋ณ€๊ฒฝ์— ๋ฏผ๊ฐํ•˜๊ณ , ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์„ฑ๋Šฅ์— ํฐ ์˜ํ–ฅ์„ ์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ์ง์ ‘ ๋‹ค๋ฃจ๋Š” ์ผ์€ ์œ„ํ—˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด์ฃ . ๊ทธ๊ฑธ ์•Œ๊ณ  ์žˆ๋Š” ๋ฆฌ์•กํŠธ๋Š” ๋ฆฌ์•กํŠธ ์—˜๋ฆฌ๋จผํŠธ๋กœ ๋…ผ๋ฆฌ์ ์ธ, ๊ฐ€์ƒ์˜ DOM ํŠธ๋ฆฌ๋ฅผ ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ๋‹ค๋ฃจ๊ฒŒ ํ•˜๊ณ  ์ž์‹ ์€ ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ๋งŒ๋“ค์–ด๋‚ธ ๊ฐ€์ƒ์˜ DOM ํŠธ๋ฆฌ๋ฅผ ๋ถ„์„ํ•˜์—ฌ DOM ํŠธ๋ฆฌ๋ฅผ ์ •๊ตํ•˜๊ณ  ๋˜‘๋˜‘ํ•˜๊ฒŒ(ํ•„์š”ํ•œ ๋ถ€๋ถ„๋งŒ ์—…๋ฐ์ดํŠธ ํ•˜๊ฑฐ๋‚˜, ๋‹น์žฅ ํ•„์š”ํ•˜์ง€ ์•Š์€ ์—…๋ฐ์ดํŠธ๋Š” ๋ฏธ๋ฃจ๊ณ , ๋ณ€๊ฒฝ ์ž‘์—…์„ ์Šค์ผ€์ฅด๋ง ํ•˜๋Š” ๋“ฑ ์—ฌ๋Ÿฌ ์ตœ์ ํ™”๋ฅผ ํ•ฉ๋‹ˆ๋‹ค) ๋‹ค๋ฃจ์ง€์š”. ์ฆ‰, ๋ฆฌ์•กํŠธ๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ์‹ ๊ฒฝ์“ฐ๊ธฐ ํž˜๋“  ์‚ฌ์†Œํ•œ ๋ถ€๋ถ„๋“ค์„ ์ง์ ‘ ํ•ด๊ฒฐํ•ด์ฃผ์–ด ๊ฐœ๋ฐœ์ž๊ฐ€ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์— ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ž๋“ค์€ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃจ๊ณ  ํ™”๋ฉด์„ ๊ตฌ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ๊ณ ์šฉ๋˜์—ˆ์ง€, DOM ํŠธ๋ฆฌ๋ž‘ ์ตœ์ ํ™” ์‹ธ์›€ ํ•˜๋ผ๊ณ  ๊ณ ์šฉ๋œ ๊ฑด ์•„๋‹ˆ๋‹ˆ๊นŒ์š”(๊ณ ์šฉ์ฃผ ์ž…์žฅ์—์„œ์š”, ์ตœ์ ํ™”๋„ ๋ฌผ๋ก  ์ค‘์š”ํ•˜์ง€๋งŒ ํ”„๋กœ๋•ํŠธ๊ฐ€ ๋งŒ๋“ค์–ด์ง€๋Š” ๊ฒŒ ๋” ์ค‘์š”ํ•˜์ง€์š”.)

โœ”๏ธ ๋ฆฌ์•กํŠธ๋ฅผ ์ž˜ ๋‹ค๋ฃจ๋ ค๋ฉด?

1) ์ปดํฌ๋„ŒํŠธ์— ๋Œ€ํ•œ ๋›ฐ์–ด๋‚œ ์˜์‚ฌ ๊ฒฐ์ •

์ปดํฌ๋„ŒํŠธ๋ฅผ ์–ผ๋งˆ๋‚˜ ์ž‘์€ ๋‹จ์œ„๋กœ ์ชผ๊ฐค ๊ฒƒ์ธ์ง€, ์–ด๋–ป๊ฒŒ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋งŒ๋“ค ๊ฒƒ์ธ์ง€ ์•„๋Š” ๊ฐœ๋ฐœ์ž.

2) state๊ฐ€ ์กด์žฌํ•˜๋Š” ์œ„์น˜์— ๋Œ€ํ•œ ์˜์‚ฌ ๊ฒฐ์ •

state๋Š” ๊ฐ€์ƒ DOM ๋‚ด์— ์—ฌ๋Ÿฌ ๊ณณ์— ์กด์žฌํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ด๋ฅผ ์–ด๋””์— ์œ„์น˜์‹œํ‚ฌ์ง€ ์•„๋Š” ๊ฐœ๋ฐœ์ž.

3) state๊ฐ€ ๋ณ€๊ฒฝ๋  ๋•Œ, ์ปดํฌ๋„ŒํŠธ์— ์–ด๋–ค ๋ณ€ํ™”๋ฅผ ์ค„ ๊ฒƒ์ธ์ง€์— ๋Œ€ํ•œ ์˜์‚ฌ ๊ฒฐ์ •

state๊ฐ€ ๋ณ€๊ฒฝ๋˜์—ˆ์„ ๋•Œ, ์–ด๋–ค ๋ถ€๋ถ„์ด re-rendering ๋˜์–ด์•ผ ํ•˜๋Š”์ง€ ์•„๋Š” ๊ฐœ๋ฐœ์ž.

 

 

 

์ฐธ๊ณ 

https://velog.io/@productuidev/Udemy-React๊ฐ€-ํ•„์š”ํ•œ-์ด์œ -์ž…๋ฌธ