redux-tutorial/00_introduction

๐Ÿ‘‰ https://github.com/happypoulp/redux-tutorial/wiki

Tutorial 0 - introduction

์ด ๊ธ€์„ ์“ฐ๋Š” ์ด์œ .

Redux๋ฅผ ๊ณต๋ถ€ํ•˜๋˜์ค‘์— ๋‚ด๊ฐ€ flux ๊ธ€์„ ์ž˜๋ชป ์ฝ๊ณ  ์žˆ์—ˆ์Œ์„ ๊นจ๋‹ฌ์•˜๋‹ค. ๊ทธ ๊ธ€์ด ์ž˜๋ชป๋๋‹ค๋Š”๊ฑด ์•„๋‹ˆ๊ณ  ๋‚ด๊ฐ€ ์ž˜๋ชป ์ดํ•ดํ•˜๊ณ  ์žˆ์—ˆ๋‹ค. ๋‚ด๊ฐ€ ๋‹ค๋ฅธ flux ํ”„๋ ˆ์ž„์›Œํฌ ๋ฌธ์„œ๋ฅผ ์ฝ์œผ๋ฉด์„œ ๊ฐœ๋…๋“ค์„ ์ดํ•ดํ•˜๋ คํ•˜๊ณ  ์žˆ์—ˆ๋˜๊ฒƒ์ด๋‹ค.

Redux๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์‹œ์ž‘ํ•˜๋ฉด์„œ flux ๊ฐ€ ์ƒ๊ฐ๋ณด๋‹ค ๋‹จ์ˆœํ•˜๋‹ค๋Š” ๊ฒƒ์„ ๊นจ๋‹ฌ์•˜๋‹ค. ์ด๊ฑด ์ „๋ถ€ Redux๊ฐ€ ๋˜๊ฒŒ ์ž˜ ์„ค๊ณ„๋˜์–ด์žˆ๊ณ  ๋‚ด๊ฐ€ ํ•ด๋ดค๋˜ ๋‹ค๋ฅธ ๋‹ค๋ฅธ ํ”„๋ ˆ์ž„์›Œํฌ์— ๋น„ํ•ด โ€œanti-boilerplate featuresโ€ ๋ฅผ ๋งŽ์ด ๊ฑท์–ด๋‚ด์–ด์ค€ ๋•๋ถ„์ด๋‹ค. ๋‹ค๋ฅธ ํ”„๋ ˆ์ž„์›Œํฌ์—๋น„ํ•ด Redux๋Š” flux์— ๋Œ€ํ•ด ์•Œ๊ธฐ ์‰ฝ๋‹ค. ๊ทธ๋ž˜์„œ Redux์— ์ดˆ์ ์„ ๋‘๊ณ  flux ๊ฐœ๋…์— ๋Œ€ํ•ด ๋‚ด๊ฐ€ ์ดํ•ดํ•˜๊ธฐ ์‹œ์ž‘ํ•œ ๋‚ด์šฉ๋“ค์„ ๊ณต์œ ํ•˜๋ ค๊ณ  ํ•œ๋‹ค.

์ด๊ฑด flux ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋‹จ๋ฐฉํ–ฅ ๋กœ์ง์„ ๋ณด์—ฌ์ฃผ๋Š” ๋‹ค์ด์–ด๊ทธ๋žจ

/*
                 _________               ____________               ___________
                |         |             |            |             |           |
                | Action  |------------โ–ถ| Dispatcher |------------โ–ถ| callbacks |
                |_________|             |____________|             |___________|
                     โ–ฒ                                                   |
                     |                                                   |
                     |                                                   |
 _________       ____|_____                                          ____โ–ผ____
|         |โ—€----|  Action  |                                        |         |
| Web API |     | Creators |                                        |  Store  |
|_________|----โ–ถ|__________|                                        |_________|
                     โ–ฒ                                                   |
                     |                                                   |
                 ____|________           ____________                ____โ–ผ____
                |   User       |         |   React   |              | Change  |
                | interactions |โ—€--------|   Views   |โ—€-------------| events  |
                |______________|         |___________|              |_________|

*/

์ด๋ฒˆ ํŠœํ† ๋ฆฌ์–ผ์—์„  ์œ„ ๋‹ค์ด์–ด๊ทธ๋žจ์˜ ๊ฐœ๋…์„ ์•Œ์•„๋ณด์ž. ์ผ๋‹จ ์ „์ฒด ํ๋ฆ„์„ ์•Œ๊ธฐ ์ „์— ๊ฐ ๋ถ€๋ถ„๋“ค์ด ์™œ ํ•„์š”ํ•˜๊ณ  ๋ฌด์Šจ ์—ญํ• ์„ ํ•˜๋Š”์ง€ ์•Œ๊ณ ๋‚˜๋ฉด ์ด ๋‹ค์ด์–ด๊ทธ๋žจ์„ ์™„๋ฒฝํ•˜๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์„๊ฒƒ์ด๋‹ค.

์‹œ์ž‘ํ•˜๊ธฐ ์•ž์„œ, ์™œ flux๊ฐ€ ํ•„์š”ํ•œ์ง€ ์‚ด์ง ์–˜๊ธฐํ•ด๋ณด์ž๋ฉดโ€ฆ ์šฐ๋ฆฌ๊ฐ€ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งŒ๋“ค๊ณ  ์žˆ๋‹ค๊ณ  ์น˜์ž. ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ๋ฌด์—‡์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋Š”๊ฐ€? 1) Models = ๋ทฐ์— ๋ฐ”์ธ๋”ฉ๋  ๋ฐ์ดํ„ฐ 2) View = ํ…œํ”Œ๋ฆฟ, html 3) Controller = ๋กœ์ง, ์‚ฌ์šฉ์ž ์ด๋ฒคํŠธ์— ๋”ฐ๋ฅธ ๋ฐ˜์‘, ๋ฐ์ดํ„ฐ ์ˆ˜์ • ๋“ฑ

์ด๊ฒŒ ์šฐ๋ฆฌ๊ฐ€ ์•Œ๊ณ ์žˆ๋Š” ๊ฐ€์žฅ ์ •ํ†ต์ ์ธ MVC ์ธ๋ฐ, flux๋„ ์ด์™€ ์‚ด์ง๋งŒ ๋‹ค๋ฅผ ๋ฟ ๋น„์Šทํ•˜๋‹ค. 1) Store ๋Š” Models 2) React Views ๋Š” View 3) Action Creators -> Action -> Dispatcher -> callbacks ๊ฐ€ ์‚ฌ์šฉ์ž ์ด๋ฒคํŠธ, ๋ฐ์ดํ„ฐ ์กฐ์ž‘, ๋“ฑ๋ก๋œ ์ด๋ฒคํŠธ๋“ค

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

MVC์™€ flux์˜ ์ฐจ์ด์ ์„ ๋” ๋ถ„๋ช…ํžˆ ํ•˜๊ธฐ์œ„ํ•ด์„œ MVC ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์˜ˆ์ œ๋กœ ์‚ดํŽด๋ณด์ž: MVC ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ๋Š”: 1) ์‚ฌ์šฉ์ž๊ฐ€ ๋ฒ„ํŠผ โ€œAโ€ ๋ฅผ ํด๋ฆญํ•œ๋‹ค 2) ๋ฒ„ํŠผ โ€œAโ€ ์— ๋“ฑ๋ก๋˜์–ด์žˆ๋Š” ํด๋ฆญ ์ด๋ฒคํŠธ๊ฐ€ ๋ชจ๋ธ โ€œAโ€ ๋ฅผ ๋ณ€๊ฒฝ์‹œํ‚จ๋‹ค 3) ๋ชจ๋ธ โ€œAโ€ ์— ๋“ฑ๋ก๋˜์–ด์žˆ๋Š” ์ฒด์ธ์ง€ ์ด๋ฒคํŠธ๊ฐ€ ๋ชจ๋ธ โ€œBโ€ ๋ฅผ ๋ณ€๊ฒฝ์‹œํ‚จ๋‹ค 4) ๋ชจ๋ธ โ€œBโ€ ์— ๋“ฑ๋ก๋˜์–ด์žˆ๋Š” ์ฒด์ธ์ง€ ์ด๋ฒคํŠธ๊ฐ€ ๋ทฐ โ€œBโ€๋ฅผ ๋‹ค์‹œ ๋ Œ๋”๋งํ•˜๊ฒŒํ•œ๋‹ค

์ด๋Ÿฐ ํ™˜๊ฒฝ์—์„œ ๋ฒ„๊ทธ๋ฅผ ์ฐพ๊ธด ์–ด๋ ต๋‹ค. ์™œ๋ƒ๋ฉด ๋ทฐ๋Š” ๋ชจ๋“  ๋ชจ๋ธ์„ ๋ฐ”๋ผ๋ณผ ์ˆ˜ ์žˆ๊ณ , ๋ชจ๋“  ๋ชจ๋ธ์€ ๋‹ค๋ฅธ ๋ชจ๋ธ์„ ๋ฐ”๋ผ๋ณผ ์ˆ˜ ์žˆ์–ด์„œ ๋ฐ์ดํ„ฐ๋Š” ์—ฌ๋Ÿฌ ๊ณณ์—์„œ ์œ ์ž…๋˜๊ณ  ๋งŽ์€ ๊ณณ(๋ชจ๋ธ์ด ๋ ์ˆ˜๋„ ๋ทฐ๊ฐ€ ๋  ์ˆ˜๋„ ์žˆ๋‹ค)์—์„œ ์˜ํ–ฅ์„ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.

flux์™€ flux์˜ ๋‹จ๋ฐฉํ–ฅ ๋ฐ์ดํ„ฐ ํ๋ฆ„์„ ์ด์šฉํ•˜๋ฉด ์œ„ ์˜ˆ์ œ๋Š” ์•„๋ž˜์™€ ๊ฐ™์•„์ง„๋‹ค: 1) ์‚ฌ์šฉ์ž๊ฐ€ ๋ฒ„ํŠผ โ€œAโ€ ๋ฅผ ํด๋ฆญํ•œ๋‹ค 2) ๋ฒ„ํŠผ โ€œAโ€ ์— ๋“ฑ๋ก๋˜์–ด์žˆ๋Š” ํด๋ฆญ ์ด๋ฒคํŠธ๋ฅผ ๋ฐ›์€ action์„ ํŠธ๋ฆฌ๊ฑฐํ•˜๊ณ  Store โ€œAโ€์— ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ๋ณด๋‚ธ๋‹ค 3) ๋‹ค๋ฅธ store๋“ค๋„ action์— ๋Œ€ํ•œ ์•Œ๋ฆผ์„ ๋ฐ›๊ธฐ๋•Œ๋ฌธ์—, Store โ€œBโ€๋„ ๊ฐ™์€ action์— ๋ฐ˜์‘ํ•  ์ˆ˜ ์žˆ๋‹ค 4) ๋ทฐ โ€œBโ€๋Š” Store โ€œAโ€์™€ โ€œBโ€์˜ ๋ณ€๊ฒฝ์‚ฌํ•ญ์— ๋Œ€ํ•ด ์•Œ๋ฆผ์„ ๋ฐ›๊ณ  ๋‹ค์‹œ ๋ Œ๋”๋งํ•œ๋‹ค

์–ด๋–ป๊ฒŒ Store A์—์„œ Store B๋กœ ์ง์ ‘ ์—ฐ๊ฒฐํ•˜์ง€ ์•Š์•˜๋Š”์ง€ ์•Œ ์ˆ˜ ์žˆ์—ˆ๋‹ค. ๊ฐ๊ฐ์˜ store๋Š” ์˜ค์ง action์— ์˜ํ•ด์„œ๋งŒ ์ˆ˜์ •๋  ์ˆ˜ ์žˆ๊ณ  ํ•œ๋ฒˆ action์— ์˜ํ•ด์„œ ๋ฐ˜์‘ํ•˜๊ธฐ๋งŒํ•˜๋ฉด, ๋ทฐ๋“ค์€ ์—…๋ฐ์ดํŠธ๋œ๋‹ค. ๊ฒฐ๊ตญ ๋ฐ์ดํ„ฐ๋Š” ๋‹จ๋ฐฉํ–ฅ์œผ๋กœ ํ๋ฅด๊ฒŒ ๋œ๋‹ค: action -> store -> view -> action -> store -> view -> action -> โ€ฆ

์œ„์—์„œ action์„ ์˜ˆ์ œ๋กœ ์‹œ์ž‘ํ•ด๋ณด์•˜๋˜ ๊ฒƒ์ฒ˜๋Ÿผ action creator ์— ๋Œ€ํ•ด์„œ๋„ ์•Œ์•„๋ณด์ž.

๋‹ค์Œ: 01_simple action creator