๐ 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