๊ด€๋ฆฌ ๋ฉ”๋‰ด

Bin's Blog

Flux ํŒจํ„ด ๋ณธ๋ฌธ

React.js

Flux ํŒจํ„ด

hotIce 2023. 9. 1. 16:26
728x90

๐Ÿค” Flux ํŒจํ„ด์ด๋ž€? 

Flux ํŒจํ„ด์€ 2014๋…„ ํŽ˜์ด์Šค๋ถ F8 ์ปจํผ๋Ÿฐ์Šค์—์„œ ๋ฐœํ‘œ๋œ ์•„ํ‚คํ…์ฒ˜๋กœ, Client-Side ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ๋””์ž์ธ ํŒจํ„ด์ด๋‹ค. 

 

 

๋“ฑ์žฅ ๋ฐฐ๊ฒฝ

ํŽ˜์ด์Šค๋ถ(ํ˜„ ๋ฉ”ํƒ€)์€ ์™œ Flux ํŒจํ„ด์ด ํ•„์š”ํ–ˆ์„๊นŒ? ๋‹ต์€ ๋Œ€๊ทœ๋ชจ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๋ฐ์ดํ„ฐ ํ๋ฆ„์„ ์ผ๊ด€์„ฑ ์žˆ๊ฒŒ ๊ด€๋ฆฌํ•จ์œผ๋กœ์จ ํ”„๋กœ๊ทธ๋žจ์˜ ์˜ˆ์ธก ๊ฐ€๋Šฅ์„ฑ์„ ๋†’์ด๊ธฐ ์œ„ํ•จ์ด์—ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋˜ํ•œ MVC ํŒจํ„ด์˜ ๋‹จ์ ์„ ๋ณด์™„ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋‹ค.

 

๋จผ์ € MVC ํŒจํ„ด์„ ์•Œ์•„๋ณด์ž.

 

Flux ๊ณต์‹ ์ด๋ฏธ์ง€ - MVC ํŒจํ„ด

 

MVC๋Š” Model, View, Controller์˜ ์•ฝ์ž์ด๋‹ค. Model์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ ,

Controller๋ฅผ ์ด์šฉํ•˜์—ฌ Model ๋ฐ์ดํ„ฐ๋ฅผ ์ƒ์„ฑ / ์กฐํšŒ / ์ˆ˜์ • / ์‚ญ์ œ(CRUD)ํ•˜๊ณ , ๋ณ€๊ฒฝ๋œ ๋ฐ์ดํ„ฐ๋Š” View์— ์ถœ๋ ฅ๋˜๋ฉด์„œ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ „๋‹ฌ๋˜์–ด ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ณด์—ฌ์ง„๋‹ค.

๋˜ํ•œ ์ค‘์š”ํ•œ ์ ์€ ์‚ฌ์šฉ์ž๊ฐ€ View๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์ž…๋ ฅํ•˜๋ฉด View ์—ญ์‹œ Model์„ ์—…๋ฐ์ดํŠธ ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค. ์ฆ‰ ๋ฐ์ดํ„ฐ๊ฐ€ ์–‘๋ฐฉํ–ฅ์œผ๋กœ ํ๋ฅผ ์ˆ˜ ์žˆ๋‹ค

 

์ด ํŒจํ„ด์˜ ๋ฌธ์ œ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ทœ๋ชจ๊ฐ€ ์ปค์งˆ์ˆ˜๋ก ๋ฐ์ดํ„ฐ ํ๋ฆ„์˜ ๋ณต์žก๋„๊ฐ€ ๋ฌด์ง€๋ง‰์ง€ํ•˜๊ฒŒ ๋Š˜์–ด๋‚œ๋‹ค. 

์˜ˆ๋ฅผ ๋“ค์–ด, ์นผ๋Ÿผ ๊ฒŒ์‹œํŒ์„ ๋งŒ๋“ ๋‹ค๊ณ  ์น˜์ž, ์ด ๊ฒŒ์‹œํŒ์˜ UI์˜ ๊ฐ€์žฅ ํฐ ํŠน์ง•์€ ์ž์‹ ์˜ ์ตœ๊ทผ์— ๋‚จ๊ธด ๋Œ“๊ธ€์ด ์šฐ์ธก ์‚ฌ์ด๋“œ๋ฐ”์— ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋œฌ๋‹ค. 

 

๋งŒ์ผ ์œ ์ € A๊ฐ€ ์ƒˆ ๊ธ€์„ ์“ฐ๊ณ  ์œ ์ € B๊ฐ€ ๋Œ“๊ธ€์„ ์ž‘์„ฑํ–ˆ๋Š”๋ฐ, ๋งˆ์Œ์ด ๋ฐ”๋€ A๊ฐ€ ๊ธ€์„ 5๋ถ„๋งŒ์— ์‚ญ์ œํ–ˆ๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ์š”? ๊ณต๊ต๋กญ๊ฒŒ๋„ B๊ฐ€ ์‚ฌ์ดํŠธ๋ฅผ ๋– ๋‚˜์ง€๋„ ์•Š๊ณ  ์ƒˆ๋กœ๊ณ ์นจ๋„ ํ•˜์ง€ ์•Š์€ ์ฑ„ ์ฐฝ์„ ๋‚ด๋ฒ„๋ ค๋’€๋‹ค๋ฉด, ์ด ๊ฒŒ์‹œํŒ์€ B์˜ ๋Œ“๊ธ€์ด ์ง€์›Œ์กŒ์Œ์„ ๋ฐ˜์˜ํ•  ์ˆ˜ ์žˆ์„๊นŒ? 

 

Flux ๊ณต์‹ ์ด๋ฏธ์ง€ - MVC ๋ณต์žกํ•œ ํŒจํ„ด

MVC ํŒจํ„ด์€ ๋ฐ์ดํ„ฐ์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์‹ ์†ํ•˜๊ฒŒ ์ „ํŒŒํ•˜๊ธฐ ์–ด๋ ต๋‹ค. ๋ชจ๋ธ์ด ๋Š˜์–ด๋‚ ์ˆ˜๋ก ์ „ํŒŒํ•ด์•ผ ํ•  ๋Œ€์ƒ๋„ ํ•จ๊ป˜ ๋Š˜์–ด๋‚˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

ํ•˜๋‚˜์˜ ํฌ์ŠคํŠธ๊ฐ€ ์‚ญ์ œ๋˜๋ฉด ํฌ์ŠคํŠธ์— ๋”ธ๋ ค ์žˆ๋˜ ๊ฐ ๋Œ“๊ธ€๋„ ํ•จ๊ป˜ ์‚ญ์ œ๋  ํ…๋ฐ, ์ด๋•Œ ๋Œ“๊ธ€์„ ์žƒ์–ด๋ฒ„๋ฆฐ ๊ฐ ์œ ์ €์˜ ๋Œ“๊ธ€ ์‚ฌ์ด๋“œ๋ฐ”์—๋„ ๋ณ€๊ฒฝ์‚ฌํ•ญ์ด ์ „ํŒŒ๋˜์–ด์•ผ ํ•œ๋‹ค. 

MVC ํŒจํ„ด์—์„œ๋Š” ์‚ฌ์ด๋“œ๋ฐ”์™€ ํ—ค๋”์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๋ชจ๋ธ๋“ค์ด ํฌ์ŠคํŠธ ๋ชจ๋ธ์„ ํ•ญ์ƒ ์ฃผ์‹œํ•˜๊ฒŒ ๋งŒ๋“ค๊ฒŒ ๋  ๊ฑฐ๊ณ  ์ฝ”๋“œ๋Š” ํ•จ๊ป˜ ๋ณต์žกํ•ด์งˆ ๊ฒƒ์ด๋‹ค. 

๋” ์ปค๋‹ค๋ž€ ๋ฌธ์ œ๋Š” ๊ฐ ๋ชจ๋ธ์—์„œ ๋ฐœ์ƒํ•œ ์ด๋ฒคํŠธ๊ฐ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ „์ฒด๋กœ ๋ฌด์ฐจ๋ณ„์ ์œผ๋กœ ๋ฒˆ์ ธ๋‚˜๊ฐˆ ๋•Œ ์–ด๋–ค ๋ณ€ํ™”๊ฐ€ ์ผ์–ด๋‚ ์ง€ ์˜ˆ์ธกํ•  ์ˆ˜ ์—†๋‹ค. 

 

ํŽ˜์ด์Šค๋ถ์€ ์ด ๋ฌธ์ œ์˜ ํ•ด๊ฒฐ ๋ฐฉ์•ˆ์œผ๋กœ ๋‹จ๋ฐฉํ–ฅ ๋ฐ์ดํ„ฐ ํ๋ฆ„์„ ๊ฐ€์ง€๋Š” Flux ํŒจํ„ด์„ ๊ณ ์•ˆํ•ด๋ƒˆ๋‹ค.

 

Flux ํŒจํ„ด์ด๋ž€

Flux๋Š” ์‚ฌ์šฉ์ž์˜ ์ž…๋ ฅ์„ ๊ธฐ๋ฐ˜์œผ๋กœ Action์„ ๋งŒ๋“ค๊ณ  Action์„ Dispatcher์— ์ „๋‹ฌํ•˜์—ฌ Store(Model)์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€๊ฒฝํ•œ ๋’ค View์— ๋ฐ˜์˜ํ•˜๋Š” ๋‹จ๋ฐฉํ–ฅ์˜ ํ๋ฆ„์œผ๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งŒ๋“œ๋Š” ์•„ํ‚คํ…์ฒ˜์ด๋‹ค. 

 

Flux ๊ณต์‹ ์ด๋ฏธ์ง€ - Flux ํŒจํ„ด

Flux ํŒจํ„ด์˜  ๊ฐ ์š”์†Œ๋“ค์„ ํ•˜๋‚˜์”ฉ ์ˆœ์„œ๋Œ€๋กœ ์‚ดํŽด๋ณด์ž

 

Action / Action Creator

Action์€ ๋ฐ์ดํ„ฐ์˜ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋Š” ๋ช…๋ น์–ด ์นด๋“œ์™€ ๊ฐ™๋‹ค. Action Creator๋ฉ”์„œ๋“œ๋Š” ์ƒˆ๋กœ ๋ฐœ์ƒํ•œ Action์˜ ํƒ€์ž…(type)๊ณผ ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ(payload)๋ฅผ ๋ฌถ์–ด Dispatcher์—๊ฒŒ ์ „๋‹ฌํ•œ๋‹ค.  

 

{
  type: 'SET_DATA',
  data: {
    'name': 'Hobin',
    'age': 27
  }
}

 

 

Dispatcher

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

 

Store (Model)

Store๋Š” ์ƒํƒœ ์ €์žฅ๋กœ์„œ ์ƒํƒœ์™€ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ์–ด๋–ค ํƒ€์ž…์˜ ์•ก์…˜์ด ๋ฐœ์ƒํ–ˆ๋Š”์ง€์— ๋”ฐ๋ผ ๊ทธ์— ๋งž๋Š” ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ Dispatcher์— ๋“ฑ๋กํ•œ๋‹ค. Dispatcher์—์„œ ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ์ƒํƒœ๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฉด View์—๊ฒŒ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€๊ฒฝ๋˜์—ˆ์Œ์„ ์•Œ๋ฆฐ๋‹ค. 

 

View

View๋Š” ๋ฆฌ์•กํŠธ ์ปดํฌ๋„ŒํŠธ๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค. Store์—์„œ View์—๊ฒŒ ์ƒํƒœ๊ฐ€ ๋ณ€๊ฒฝ๋˜์—ˆ์Œ ์•Œ๋ ค์ฃผ๋ฉด ์ตœ์ƒ์œ„ View(Controller View)๋Š” Store์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์™€ ์ž์‹ View์—๊ฒŒ ๋‚ด๋ ค๋ณด๋‚ธ๋‹ค. ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์€ View๋Š” ํ™”๋ฉด์„ ๋ฆฌ๋ Œ๋”๋งํ•œ๋‹ค. ๋˜ํ•œ ์‚ฌ์šฉ์ž๊ฐ€ View์— ์–ด๋– ํ•œ ์กฐ์ž‘์„ ํ•˜๋ฉด ๊ทธ์— ํ•ด๋‹นํ•˜๋Š” Action์„ ์ƒ์„ฑํ•œ๋‹ค.  

 

Flux ๊ณต์‹ ์ด๋ฏธ์ง€ - ์‚ฌ์šฉ์ž View ์กฐ์ž‘์‹œ ํ๋ฆ„

๊ฐ ์š”์†Œ๋Š” ๋‹จ๋ฐฉํ–ฅ ํ๋ฆ„์— ๋”ฐ๋ผ ์ˆœ์„œ๋Œ€๋กœ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜๊ณ , View๋กœ๋ถ€ํ„ฐ ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ์ด ์ƒ๊ธฐ๋ฉด ์ฒ˜์Œ๋ถ€ํ„ฐ ๋‹ค์‹œ ์ด ์ˆœ์„œ๋Œ€๋กœ ์‹คํ–‰ํ•œ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•จ์œผ๋กœ์จ ์˜ˆ์™ธ ์—†์ด ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•œ๋‹ค. 

 

๐Ÿ”— ์ฐธ๊ณ ํ•˜๋ฉด ์ข‹์€ ์ž๋ฃŒ

https://code-cartoons.com/articles/a-cartoon-guide-to-flux/

728x90

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

React-Query๋ž€?(2ํŽธ)  (0) 2023.09.15
React-Query๋ž€?(1ํŽธ)  (0) 2023.09.11
[React.js] ์˜ค๋Š˜์˜ ๋””๋ฒ„๊น…  (0) 2023.08.01
์˜ค๋Š˜์˜ React  (0) 2023.07.14
์˜ค๋Š˜์˜ React  (0) 2023.05.21