Flux - ChoDragon9/posts GitHub Wiki


title: Flux sidebar: auto

์†Œ๊ฐœ

Flux๋Š” ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด๋“œ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์•„ํ‚คํ…์ณ์ด๋‹ค. Flux๋Š” ๋Œ€ํ˜• MVC ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๋‚˜ํƒ€๋‚˜๋Š” ๋ฐ์ดํ„ฐ ๊ฐ„์˜ ์˜์กด์„ฑ๊ณผ ์—ฐ์‡„์ ์ธ ๊ฐฑ์‹ ์—์„œ ๋ฐœ์ƒ๋˜๋Š” ์˜ˆ์ธกํ•˜๊ธฐ ํž˜๋“  ๋ฐ์ดํ„ฐ ํ๋ฆ„์„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋‹ค๋ฃจ๊ธฐ ์œ„ํ•ด ๋งŒ๋“ค์–ด ์กŒ๋‹ค.

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

Flux๋Š” MVC์™€๋Š” ๋‹ค๋ฅด๊ฒŒ ๋‹จ๋ฐฉํ–ฅ์œผ๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ํ๋ฅธ๋‹ค. Flux๋Š” Actions, Dispatcher, Stores, Views๋กœ ๊ตฌ์„ฑ๋˜๋ฉฐ ๊ฐ ๋ถ€๋ถ„๋“ค์€ ๋‹จ๋ฐฉํ–ฅ์œผ๋กœ๋งŒ ๋ฐ์ดํ„ฐ๊ฐ€ ํ๋ฅด๊ฒŒ ๋˜์–ด ์žˆ๋‹ค.

๊ฐ ๊ตฌ์„ฑ์˜ ์—ญํ• ์€ ์ด๋ ‡๋‹ค. Action์€ ์‚ฌ์šฉ์ž์˜ ์ƒํ˜ธ์ž‘์šฉ์™€ ์„œ๋ฒ„ ์ƒํ˜ธ์ž‘์šฉ ๋“ฑ์ด ๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ type ํ”„๋กœํผํ‹ฐ์— ์—ญํ• ์„ ์ง€์ •ํ•œ๋‹ค. Dispatcher๋Š” ๋ชจ๋“  Action์„ ๋ฐ›์œผ๋ฉฐ, Stores๊ฐ€ ์ฝœ๋ฐฑ๋“ค ๋“ฑ๋กํ•  ์ˆ˜ ์žˆ๋‹ค. Stores๋Š” ๋ฐ์ดํ„ฐ์™€ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๋‹ด๋‹นํ•˜๊ณ  Views๊ฐ€ ๋ณ€๊ฒฝ๊ฐ์‹œ๋ฅผ ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ œ๊ณตํ•œ๋‹ค. Views๋Š” Controller-Views-Views ํ˜•ํƒœ๋ฅผ ์ด๋ฃจ๊ณ , Store์—๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์™€ View๋ฅผ ๊ฐฑ์‹ ํ•œ๋‹ค.

๋ฐ์ดํ„ฐ๊ฐ€ ํ๋ฅด๊ฒŒ ๋˜๋ฉด ์ด๋ ‡๊ฒŒ ํ๋ฅด๊ฒŒ ๋œ๋‹ค. ์‚ฌ์šฉ์ž์˜ ์ƒํ˜ธ์ž‘์šฉ์ด ๋ฐœ์ƒ๋˜๋ฉด View๋Š” Action์—๊ฒŒ ์ „๋‹ฌํ•œ๋‹ค. Action์€ ์„œ๋ฒ„์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์š”์ฒญํ•˜๊ณ  ์‘๋‹ต์ด ์˜ค๋ฉด Dispatcher์—๊ฒŒ type๊ณผ ๋ฐ์ดํ„ฐ๋ฅผ ์ „ํŒŒํ•œ๋‹ค. Dispatcher๋Š” ๋ชจ๋“  Stores์—๊ฒŒ type๊ณผ ๋ฐ์ดํ„ฐ๋ฅผ ์ „ํŒŒํ•œ๋‹ค. Stores๋Š” ์ „๋‹ฌ๋œ type์ด ์ƒํƒœ์™€ ์˜์กด์ด ์žˆ์œผ๋ฉด Views ๋ณ€๊ฒฝ ์ด๋ฒคํŠธ๋ฅผ ์ „ํŒŒํ•œ๋‹ค. Views๋Š” ๋ณ€ํ™”๋ฅผ ๊ฐ์ง€ํ•˜๊ณ  Store์—๊ฒŒ ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜จ ๋’ค ๋ชจ๋“  Views์—๊ฒŒ ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

Dispatcher

Dispatcher๋Š” Flux ์•„ํ‚คํ…์ณ์—์„œ ๋‹จ์ผ๋กœ ๊ตฌ์„ฑ๋˜๋ฉฐ ์ค‘์•™ ํ—ˆ๋ธŒ๋กœ ๋ชจ๋“  ๋ฐ์ดํ„ฐ ํ๋ฆ„์„ ๊ด€๋ฆฌํ•œ๋‹ค. Store์˜ ์ฝœ๋ฐฑ์„ ๋“ฑ๋ก๋ฐ›๊ณ  Action์„ Store์—๊ฒŒ ๋ฐฐ๋ถ„ํ•ด์ฃผ๋Š” ๋™์ž‘์„ ํ•œ๋‹ค. ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ทœ๋ชจ๊ฐ€ ์ปค์ง€๋ฉด Dispatcher์˜ ์—ญํ• ์€ ๋”์šฑ ํ•„์ˆ˜์ ์ด๋‹ค. Store ๊ฐ„์˜ ์˜์กด์„ฑ์„ ํŠน์ • ์ˆœ์„œ๋กœ ์ฝœ๋ฐฑ์„ ์‹คํ–‰ํ•˜๋Š” ๊ณผ์ •์„ ๊ด€๋ฆฌํ•œ๋‹ค.

Stores

Store๋Š” ์ƒํƒœ์™€ ๋กœ์ง์„ ๋‹ด๋‹นํ•œ๋‹ค. Store๋Š” ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋‚ด์˜ ๊ฐœ๋ณ„์ ์ธ ๋„๋ฉ”์ธ์—์„œ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•œ๋‹ค. ํ•˜๋‚˜์˜ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์ด๋ผ๋„ ๊ฐ ๊ธฐ๋Šฅ๋ณ„๋กœ Store๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค. Store๋Š” Dispatcher์— ์ฝœ๋ฐฑ์„ ๋“ฑ๋กํ•œ๋‹ค. ์ฝœ๋ฐฑ์€ Action์˜ type์„ ์ธ์ž๋กœ ์ „๋‹ฌ ๋ฐ›๊ณ  ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•œ๋‹ค. ์ƒํƒœ๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฉด Views์—๊ฒŒ ๋ณ€๊ฒฝ ์ด๋ฒคํŠธ๋ฅผ ์ „ํŒŒํ•œ๋‹ค. Store๋Š”View์— ์ƒํƒœ๋ฅผ ์š”์ฒญํ•  ์ˆ˜ ์žˆ๋„๋ก getter๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

Views

Flux์˜ View๋Š” Controller-View๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค. Store๋ฅผ ํ†ตํ•ด ๋ณ€๊ฒฝ ์ด๋ฒคํŠธ๋ฅผ ์ „ํŒŒ๋ฐ›์œผ๋ฉด Store์—๊ฒŒ ์ƒํƒœ๋ฅผ ์š”์ฒญํ•œ๋‹ค. View๋Š” ๋ถ€๋ชจ-์ž์‹ ๊ด€๊ณ„๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์œผ๋ฉฐ ๋ถ€๋ชจ๊ฐ€ ์ž์‹ View์—๊ฒŒ ์ƒํƒœ๋ฅผ ์ „๋‹ฌํ•œ๋‹ค. ๊ทธ๋ž˜์„œ Flux์˜ Views๋Š” Controller-Views-Views๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค.

Actions

Action์€ ์‚ฌ์šฉ์ž ์ƒํ˜ธ์ž‘์šฉ์™€ ์„œ๋ฒ„ ์ƒํ˜ธ์ž‘์šฉ์„ ๋‹ด๋‹นํ•œ๋‹ค. ์‚ฌ์šฉ์ž ์ƒํ˜ธ์ž‘์šฉ์€ View๋ฅผ ํ†ตํ•ด ์‹คํ–‰๋œ๋‹ค. ์„œ๋ฒ„ ์ƒํ˜ธ์ž‘์šฉ์€ ์›น์‚ฌ์ดํŠธ ์ดˆ๊ธฐํ™” ์‹œ ์„œ๋ฒ„์—์„œ ์ œ๊ณตํ•˜๋Š” ์ดˆ๊ธฐ ์ƒํƒœ๋ฅผ ์ „๋‹ฌํ•  ๋•Œ ์‹คํ–‰๋œ๋‹ค.

์ฐธ๊ณ 

https://haruair.github.io/flux/docs/overview.html