1. external store

์‹ค์Šต๋ ˆํฌ

๊ด€์‹ฌ์‚ฌ์˜ ๋ถ„๋ฆฌ

ํ•˜๋‚˜์˜ ์‹œ์Šคํ…œ์€ ์ž‘์€ ๋ถ€ํ’ˆ์ด ๋ชจ์—ฌ์„œ ๋งŒ๋“ค์–ด์ง„๋‹ค.

์šฐ๋ฆฌ๋Š” ์ด๋ฏธ ์ž‘์€ ์ปดํฌ๋„ŒํŠธ๋ฅผ ํ•ฉ์ณ์„œ ๋” ํฐ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ฐœ๋ฐœํ•˜๊ณ  ์žˆ๋‹ค.

Layered Architecture ์—์„œ๋Š” ์‚ฌ์šฉ์ž์—๊ฒŒ ๊ฐ€๊นŒ์šด ๊ฒƒ๊ณผ ๋จผ ๊ฒƒ์œผ๋กœ ๊ตฌ๋ถ„ํ•œ๋‹ค.

๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๊ฑด UI๋ฅผ ๋‹ค๋ฃจ๋Š” ๋ถ€๋ถ„, ๊ทธ ๋‹ค์Œ์—” Business Logic์„ ๋‹ค๋ฃจ๋Š” ๋ถ€๋ถ„,

๊ทธ ๋„ˆ๋จธ์—๋Š” ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•˜๊ณ  ์ €์žฅํ•˜๋Š” ๋ถ€๋ถ„์œผ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

Input โ†’ Process โ†’ Output

๋„๋ฆฌ ์•Œ๋ ค์ง„ MVC๋กœ ๊ฑฐ์น ๊ฒŒ ํ‘œํ˜„ํ•˜์ž๋ฉด ์ด๋ ‡๋‹ค. ๊ฐ ๋ถ€๋ถ„์€ ํ•˜๋‚˜์˜ ๊ด€์‹ฌ์‚ฌ๋กœ ๊ฒฉ๋ฆฌ๋จ์œผ๋กœ์จ ๋ณต์žก๋„๋ฅผ ๋‚ฎ์ถ”๊ฒŒ ๋œ๋‹ค.

  • Model โ†’ Process

  • View โ†’ Output

  • Controller โ†’ Input

Flux Architecture

acebook(ํ˜„ Meta)์—์„œ MVC์˜ ๋Œ€์•ˆ์œผ๋กœ ๋‚ด์„ธ์šด ์•„ํ‚คํ…์ฒ˜.

2-way binding์„ ์ผ์„ ๋•Œ ์ƒ๊ธธ ์ˆ˜ ์žˆ๋Š” Model-View์˜ ๋ณต์žกํ•œ ๊ด€๊ณ„(์ „ํ†ต์ ์ธ MVC์—์„  ์ด๋Ÿฐ ์ƒํ™ฉ์„ ์ง€์–‘ํ•œ๋‹ค)๋ฅผ ๊ฒจ๋ƒฅํ•ด ๋ช…ํ™•ํžˆ โ€œunidirectional data flowโ€๋ฅผ ๊ฐ•์กฐํ•œ๋‹ค.

๋‹จ๋ฐฉํ–ฅ ๋ฐ์ดํ„ฐ ํ๋ฆ„.

  1. Action โ†’ ์ด๋ฒคํŠธ/๋ฉ”์‹œ์ง€ ๊ฐ™์€ ๊ฐ์ฒด.

  2. Dispatcher โ†’ (์—ฌ๋Ÿฌ) Store๋กœ Action์„ ์ „๋‹ฌ. ๋ฉ”์‹œ์ง€ ๋ธŒ๋กœ์ปค์™€ ์œ ์‚ฌํ•˜๋‹ค.

  3. Store (์—ฌ๋Ÿฌ ๊ฐœ) โ†’ ๋ฐ›์€ Action์— ๋”ฐ๋ผ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝ. ์ƒํƒœ ๋ณ€๊ฒฝ์„ ์•Œ๋ฆผ.

  4. View โ†’ Store์˜ ์ƒํƒœ๋ฅผ ๋ฐ˜์˜.

Redux๋Š” ๋‹จ์ผ Store๋ฅผ ์‚ฌ์šฉํ•จ์œผ๋กœ์จ ์ข€ ๋” ๋‹จ์ˆœํ•œ ๊ทธ๋ฆผ์„ ์ œ์•ˆํ•œ๋‹ค.

  1. Action

  2. Store โ†’ dispatch๋ฅผ ํ†ตํ•ด Action์„ ๋ฐ›๊ณ , ์‚ฌ์šฉ์ž๊ฐ€ ์ •์˜ํ•œ reducer๋ฅผ ํ†ตํ•ด State๋ฅผ ๋ณ€๊ฒฝํ•œ๋‹ค.

  3. View โ†’ State๋ฅผ ๋ฐ˜์˜.

์ƒํƒœ๋ฅผ UI์— ๋ฐ˜์˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋ชจ๋‘ ๋™์ผํ•˜๋‹ค.

3๋‹จ๊ณ„ ํ”„๋กœ์„ธ์Šค๋กœ ๊ฑฐ์น ๊ฒŒ ๋งคํ•‘ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  • Input โ†’ Action + dispatch

  • Process โ†’ reducer

  • Output โ†’ View(React)

External Store

store๊ฐ€ ๋ฆฌ์•กํŠธ ์•ˆ์— ์žˆ์ง€ ์•Š๋‹ค. ์•„ํ‚คํ…์ฒ˜์ ์ธ ๊ด€์ ์ด ์•„๋‹Œ ๋ฆฌ์•กํŠธ ๊ด€์ ์—์„œ.

const [count, setCount] = useState(1) ์ด๋Ÿฐ์‹์œผ๋กœ ์ง์ ‘๊ด€๋ฆฌ ์•ˆํ•œ๋‹ค๋Š” ๊ฒƒ.

class ์ปดํฌ๋„ŒํŠธ ์‹œ์ ˆ์—๋Š” forceUpdate๋ฅผ ์‚ฌ์šฉํ•ด state์•„๋‹Œ ๊ฐ’์˜ ๋ณ€ํ™”์—

๋ฆฌ๋ Œ๋”๋ฅผ ๊ฐ•์ œ๋กœ ํ•ด์คฌ์—ˆ๋‹ค.

์ด์ œ๋Š” useReducer๋ฅผ ์“ธ ์ˆ˜ ์žˆ๊ณ , setState๊ฐ€ ๋‚ด๋ถ€์ ์œผ๋กœ useReducer๋ฅผ ์‚ฌ์šฉํ•ด ๋ฆฌ๋ Œ๋” ํ•˜๋Š” ๊ฒƒ.

const [, setState] = useState({});
const forceUpdate = () => setState({});

์ปค์Šคํ…€ hook์œผ๋กœ ๋งŒ๋“ ๋‹ค.

function useForceUpdate() {
  const [, setState] = useState({});
  return useCallback(() => setState({}), []);
}

์ด๋Ÿฐ ์ ‘๊ทผ์„ ์ž˜ ํ•˜๋ฉด, React๊ฐ€ UI๋ฅผ ๋‹ด๋‹นํ•˜๊ณ , ์ˆœ์ˆ˜ํ•œ TypeScript(๋˜๋Š” JavaScript)๊ฐ€ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๋‹ด๋‹นํ•˜๋Š”, ๊ด€์‹ฌ์‚ฌ์˜ ๋ถ„๋ฆฌ(Separation of Concerns)๋ฅผ ๋ช…ํ™•ํžˆ ํ•  ์ˆ˜ ์žˆ๋‹ค.

์ž์ฃผ ๋ฐ”๋€Œ๋Š” UI ์š”์†Œ์— ๋Œ€ํ•œ ํ…Œ์ŠคํŠธ ๋Œ€์‹ , ์˜ค๋ž˜ ์œ ์ง€๋˜๋Š”(๋ฐ”๋€Œ๋ฉด ์น˜๋ช…์ ์ธ) ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์— ๋Œ€ํ•œ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด ์œ ์ง€๋ณด์ˆ˜์— ๋„์›€์ด ๋˜๋Š” ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์น˜๋ฐ€ํ•˜๊ฒŒ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

Last updated