Redux: ๋น„๋™๊ธฐ ์ž‘์—…์— ๋Œ€ํ•œ ๋Œ€์ฒด ์ ‘๊ทผ ๋ฐฉ์‹

์— ๋งŒ๋“  2015๋…„ 12์›” 27์ผ  ยท  44์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: reduxjs/redux

์ €๋Š” redux์—์„œ ๋น„๋™๊ธฐ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ๋Œ€์•ˆ์„ ๋ชจ์ƒ‰ํ•ด ์™”์œผ๋ฉฐ, ์ œ๊ฐ€ ํ•œ ์ผ์— ๋Œ€ํ•ด ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์ด ์˜๊ฒฌ์„ ์ œ์‹œํ•ด ์ฃผ์‹œ๋ฉด ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๋‚ด ์ ‘๊ทผ ๋ฐฉ์‹์„ ์„ค๋ช…ํ•˜๊ธฐ ์œ„ํ•ด redux ๋ณต์ œ๋ณธ์—์„œ ๋น„๋™๊ธฐ ์˜ˆ์ œ๋ฅผ ๋ณ€๊ฒฝํ–ˆ์Šต๋‹ˆ๋‹ค. https://github.com/winstonewert/redux/tree/master/examples/async

์ผ๋ฐ˜์ ์œผ๋กœ ์™ธ๋ถ€ ์ž‘์—…์€ ์ž‘์—… ์ž‘์„ฑ์ž๋ฅผ ๋น„๋™๊ธฐ์‹์œผ๋กœ ๋งŒ๋“ค์–ด ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค. ๋น„๋™๊ธฐ ์˜ˆ์ œ์˜ ๊ฒฝ์šฐ fetchPosts ์ž‘์—… ์ƒ์„ฑ์ž๋Š” ์š”์ฒญ ์‹œ์ž‘์„ ๋‚˜ํƒ€๋‚ด๊ธฐ ์œ„ํ•ด REQUEST_POSTS ์ž‘์—…์„ ๋””์ŠคํŒจ์น˜ํ•˜๊ณ , ๊ฒŒ์‹œ๋ฌผ์ด API์—์„œ ๋Œ์•„์˜ค๋ฉด RECEIVE_POSTS๊ฐ€ ๋’ค๋”ฐ๋ฆ…๋‹ˆ๋‹ค.

๋‚ด ์˜ˆ์—์„œ ๋ชจ๋“  ์ž‘์—… ์ƒ์„ฑ์ž๋Š” ๋™๊ธฐ์‹์ž…๋‹ˆ๋‹ค. ๋Œ€์‹  ์ƒํƒœ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ˜„์žฌ ๋ฐœ์ƒํ•ด์•ผ ํ•˜๋Š” ๋น„๋™๊ธฐ ์ž‘์—… ๋ชฉ๋ก์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—์„œ ๋‚ด ์˜ˆ๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค. https://github.com/rackt/redux/compare/master...winstonewert :master#diff-8a94dc7aa7bdc6e5390c9216a69761f8R12

doReactions ํ•จ์ˆ˜๋Š” ์ €์žฅ์†Œ๋ฅผ ๊ตฌ๋…ํ•˜๊ณ  ํ˜„์žฌ ์š”์ฒญ์˜ ์‹ค์ œ ์ƒํƒœ๊ฐ€ ์š”์ฒญ์„ ์‹œ์ž‘ํ•˜๊ฑฐ๋‚˜ ์ทจ์†Œํ•˜์—ฌ doReactions ์ƒํƒœ์—์„œ ๋ฐ˜ํ™˜๋œ ์ƒํƒœ์™€ ์ผ์น˜ํ•˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

์ฐจ์ด์ ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

1) ๋ฐ˜์‘ ํ•จ์ˆ˜๋Š” ์ƒํƒœ์˜ ์ˆœ์ˆ˜ ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์‰ฝ๊ฒŒ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
2) ์š”์ฒญ์„ ํ•˜๋Š” ์‹ค์ œ ๋กœ์ง์ด ๋” ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค. ์ด์ „์— ์ปจํ…Œ์ด๋„ˆ ๋ฐ ์ž‘์—… ์ž‘์„ฑ์ž๋ฅผ ํ†ตํ•ด ํ™•์‚ฐ๋œ ๋‹ค์–‘ํ•œ ๋…ผ๋ฆฌ ์กฐ๊ฐ๊ณผ ๋น„๊ตํ•˜์—ฌ ๋‚ด ์˜ˆ์˜ ๋ช‡ ์ค„ ํ•จ์ˆ˜๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.
3) ์š”์ฒญ์„ ์‰ฝ๊ฒŒ ์ทจ์†Œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒฌ์žˆ๋Š” ์‚ฌ๋žŒ?

discussion feedback wanted

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

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

์•ก์…˜ ํฌ๋ฆฌ์—์ดํ„ฐ์˜ ๋ถ€์ž‘์šฉ ๋ฌธ์ œ

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

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

์‚ฌ๋žŒ๋“ค์€ ์—ฌ์ „ํžˆ โ€‹โ€‹redux๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฉ‹์ง„ ๊ฒƒ์„ ๋งŒ๋“ค๊ณ  ์žˆ์œผ๋ฉฐ ํฐ ์ง„์ „์„ ์ด๋ฃจ๊ณ  ๋Œ€๋ถ€๋ถ„์˜ ๋Œ€์•ˆ๋ณด๋‹ค ํ›จ์”ฌ ๊ฐ„๋‹จํ•˜๊ณ  ์‹ค์šฉ์ ์ด์ง€๋งŒ, ์•ก์…˜ ์ œ์ž‘์ž ๋‚ด๋ถ€์—์„œ ๋ถ€์ž‘์šฉ์ด ๋ฐœ์ƒํ•˜๋Š” ๋ฐ ๋ช‡ ๊ฐ€์ง€ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์•”์‹œ์  ์ƒํƒœ๊ฐ€ ์ˆจ๊ฒจ์ง
  • ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์˜ ๋ณต์ œ
  • ์ปจํ…์ŠคํŠธ ๊ฐ€์ • ๋ฐ/๋˜๋Š” ์ข…์†์„ฑ์€ ์žฌ์‚ฌ์šฉ์„ฑ์„ ๊ฐ์†Œ์‹œํ‚ต๋‹ˆ๋‹ค.
  • ๋ถ€์ž‘์šฉ์ด ์žˆ๋Š” ์•ก์…˜ ์ œ์ž‘์ž๋Š” ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์–ด๋ ต์Šต๋‹ˆ๋‹ค.
  • ์ตœ์ ํ™”ํ•˜๊ฑฐ๋‚˜ ์ผ๊ด„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์—†์Œ

์•”์‹œ์  ์ƒํƒœ๊ฐ€ ์ˆจ๊ฒจ์ง

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

๋•Œ๋•Œ๋กœ ์šฐ์•„ํ•˜๊ธด ํ•˜์ง€๋งŒ ์•”์‹œ์  ์ƒํƒœ๊ฐ€ ์ˆจ๊ฒจ์ ธ ์žˆ๊ณ  ์‰ฝ๊ฒŒ ์ง๋ ฌํ™”ํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ƒ์„ฑ๊ธฐ๋ฅผ ์ž‘์—… ์ƒ์„ฑ์ž์˜ ์กฐ์ •์ž ๋กœ ์‚ฌ์šฉํ•˜๋Š”

redux-thunk ๋˜๋Š” ์ด์™€ ์œ ์‚ฌํ•œ ๊ฒƒ์„ ์‚ฌ์šฉํ•˜๋ฉด ์ฆ๊ฐ€ ์ž‘์—…์ด ์‹œ์ž‘๋˜๊ณ  ์™„๋ฃŒ๋  ๋•Œ ์ด๋ฅผ ์•Œ๋ฆฌ๋Š” ์—ฌ๋Ÿฌ ๋ฉ”์‹œ์ง€๋ฅผ ๊ฐ์†๊ธฐ์— ๋ณด๋‚ผ ์ˆ˜ ์žˆ์ง€๋งŒ ์ด๋Š” ๋‹ค๋ฅธ ๋ฌธ์ œ ์„ธํŠธ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

ํšจ๊ณผ๊ฐ€ ์™„๋ฃŒ๋œ ํ›„ ์ฆ๊ฐ€ ์ž‘์—…์ด ์ง„ํ–‰ ์ค‘์ธ ๊ฒƒ์œผ๋กœ ํ‘œ์‹œ๋˜๋Š” ์ง€์ ์œผ๋กœ ์ƒํƒœ๋ฅผ ๋˜๊ฐ๋Š” ๊ฒƒ์€ ์‹ค์ œ๋กœ ๋ถ€์ž‘์šฉ์„ ์žฌ์ƒ์„ฑํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ๋ฌด๊ธฐํ•œ ์ง„ํ–‰ ์ƒํƒœ๋กœ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค.

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

๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์˜ ๋ณต์ œ

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ํŠน์ • ์ƒํƒœ์ผ ๋•Œ๋งŒ ์•ก์…˜์ด ๋ถ€์ž‘์šฉ์„ ์ผ์œผํ‚ค๋Š” ๊ฒƒ์€ ๋‹น์—ฐํ•˜๋‹ค. redux์—์„œ ์•ก์…˜ ์ƒ์„ฑ์ž๊ฐ€ ์ƒํƒœ๋ฅผ ์š”๊ตฌํ•œ๋‹ค๋ฉด ๊ทธ๊ฒƒ์€ ๋‹จ์ˆœํ•˜๊ณ  ์ˆœ์ˆ˜ํ•œ ํ•จ์ˆ˜์ด๊ฑฐ๋‚˜ ๋ช…์‹œ์ ์œผ๋กœ ์ƒํƒœ์™€ ํ•จ๊ป˜ ์ œ๊ณต๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ฐ„๋‹จํ•œ ์˜ˆ๋กœ, ์˜ˆ์ œ ์นด์šดํ„ฐ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ ์‹œ์ž‘ํ•˜์—ฌ ์นด์šดํ„ฐ๊ฐ€ 5์˜ ๋ฐฐ์ˆ˜์ผ ๋•Œ๋งˆ๋‹ค ์นด์šดํ„ฐ๋ฅผ ์ž„์˜์˜ ๊ธ€๊ผด ์ƒ‰์ƒ์œผ๋กœ ๋ณ€๊ฒฝํ•˜๋ ค๊ณ  ํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

๋‚œ์ˆ˜ ์ƒ์„ฑ์€ ์ˆœ์ˆ˜ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์ด ๋™์ž‘์„ ๋‘๋Š” ์ œ์•ˆ๋œ ์œ„์น˜๋Š” ์ž‘์—… ์ƒ์„ฑ์ž์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์นด์šดํ„ฐ, ์ฆ๋ถ„, ๊ฐ์†Œ, incrementAsync, incrementIfOdd(์ด ๊ฒฝ์šฐ ์ˆ˜์ •ํ•  ํ•„์š”๊ฐ€ ์—†์Œ) ๊ฐ’์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋Š” ๋ช‡ ๊ฐ€์ง€ ๋‹ค๋ฅธ ์ž‘์—…์ด ์žˆ์Šต๋‹ˆ๋‹ค.

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

ํ˜„์žฌ ์ƒํƒœ๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ์ œ๊ณตํ•˜๋Š” ํ•œ ๊ฐ€์ง€ ๊ฐ€๋Šฅํ•œ ๋Œ€์•ˆ์€ redux-thunk๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ํ˜„์žฌ ์ƒํƒœ์— ์•ก์„ธ์Šคํ•˜๊ธฐ ์œ„ํ•ด ์ฝœ๋ฐฑ์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ํ˜„์žฌ ๊ฐ’์„ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•ด ์ƒ์„ฑ๋œ ๋ชจ๋“  ์žฅ์†Œ ์ž‘์—…์„ ์ˆ˜์ •ํ•˜๋Š” ๊ฒƒ์„ ํ”ผํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ด์ œ ์ž‘์—… ์ž‘์„ฑ์ž๋Š” ์ „์—ญ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ์ƒํƒœ์—์„œ ๊ฐ’์ด ์ €์žฅ๋œ ์œ„์น˜๋ฅผ ์•Œ์•„์•ผ ํ•˜๋ฉฐ ์ด๋Š” ๋™์ผํ•œ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ๋˜๋Š” ์ƒํƒœ๊ฐ€ ๋‹ค๋ฅด๊ฒŒ ๊ตฌ์„ฑ๋  ์ˆ˜ ์žˆ๋Š” ๋‹ค๋ฅธ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์—์„œ.

์ปจํ…์ŠคํŠธ ๊ฐ€์ • ๋ฐ/๋˜๋Š” ์ข…์†์„ฑ์€ ์žฌ์‚ฌ์šฉ์„ฑ์„ ๊ฐ์†Œ์‹œํ‚ต๋‹ˆ๋‹ค.

์นด์šดํ„ฐ ์˜ˆ์ œ๋ฅผ ๋‹ค์‹œ ๋ฐฉ๋ฌธํ•˜๋ฉด ์นด์šดํ„ฐ ์ธ์Šคํ„ด์Šค๊ฐ€ ํ•˜๋‚˜๋งŒ ์žˆ์Œ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋™์ผํ•œ ์ƒํƒœ๋ฅผ ๋ณด๊ฑฐ๋‚˜ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๋งŽ์€ ์นด์šดํ„ฐ๊ฐ€ ํŽ˜์ด์ง€์— ์žˆ๋Š” ๊ฒƒ์€ ์‰ฝ์ง€๋งŒ ๊ฐ ์นด์šดํ„ฐ๊ฐ€ ๋‹ค๋ฅธ ์ƒํƒœ๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ํ•˜๋ ค๋ฉด ์นด์šดํ„ฐ๋ฅผ ์ถ”๊ฐ€๋กœ ์ˆ˜์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ๊ฐ์†๊ธฐ ๋ฐ ๊ตฌ์„ฑ ์š”์†Œ ํ–ฅ์ƒ๊ธฐ๋กœ ์ผ๋ฐ˜ ๋ชฉ๋ก์„ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ• ์ด์ „์— ๋…ผ์˜๋˜์—ˆ์Šต๋‹ˆ๋‹ค

์นด์šดํ„ฐ๊ฐ€ ๋‹จ์ˆœ ์ž‘์—… ์œ ํ˜•๋งŒ ์‚ฌ์šฉํ–ˆ๋‹ค๋ฉด ๋Š๋ฆ…๋‚˜๋ฌด ์•„ํ‚คํ…์ฒ˜ ๋ฅผ ์ ์šฉํ•˜๋Š” ๊ฒƒ์€ ๋น„๊ต์  ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค.

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

React Elmish ์˜ˆ์ œ ๊ฐ€ ์ธ์ƒ์ ์œผ๋กœ

incrementIfOdd๋Š” ํ˜„์žฌ ์ƒํƒœ๋ฅผ ๊ฒฐ์ •ํ•˜๊ธฐ ์œ„ํ•ด ๋ฏธ๋“ค์›จ์–ด์— ์˜์กดํ•˜๋ฏ€๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ƒํƒœ ๋‚ด์—์„œ์˜ ์œ„์น˜๋ฅผ โ€‹โ€‹์•Œ์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.

incrementAsync๋Š” ๊ฒฐ๊ตญ ๋ถ€๋ชจ ๊ตฌ์„ฑ ์š”์†Œ์— ๋…ธ์ถœ๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์ถ”๊ฐ€ ์ปจํ…์ŠคํŠธ๋กœ ๋ž˜ํ•‘ํ•  ์ˆ˜ ์—†๋Š” ์ฆ๋ถ„ ์ž‘์—…์„ ์ง์ ‘ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.

๊ท€ํ•˜์˜ ์ œ์•ˆ์ด ์ด ๋ฌธ์ œ๋ฅผ ์ง์ ‘ ํ•ด๊ฒฐํ•˜์ง€๋Š” ์•Š์ง€๋งŒ incrementAsync๊ฐ€ ์ƒํƒœ๋ฅผ {counter: 0, incrementAfterDelay: 1000} ๋กœ ๋ณ€๊ฒฝํ•˜์—ฌ ์Šคํ† ์–ด ๋ฆฌ์Šค๋„ˆ์—์„œ ๋ถ€์ž‘์šฉ์„ ์œ ๋ฐœํ•˜๋Š” ๊ฐ„๋‹จํ•œ ์ž‘์—…์œผ๋กœ ๊ตฌํ˜„๋œ ๊ฒฝ์šฐ incrementAsync๋Š” ๊ฐ„๋‹จํ•œ ๋ฉ”์‹œ์ง€๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. incrementIfOdd๋Š” ์ˆœ์ˆ˜ํ•˜๋ฏ€๋กœ ๊ฐ์†๊ธฐ์—์„œ ๊ตฌํ˜„ํ•˜๊ฑฐ๋‚˜ ๋ช…์‹œ์ ์œผ๋กœ ์ƒํƒœ๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.... ๋”ฐ๋ผ์„œ ์›ํ•˜๋Š” ๊ฒฝ์šฐ elm ์•„ํ‚คํ…์ฒ˜๋ฅผ ๋‹ค์‹œ ์ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ถ€์ž‘์šฉ์ด ์žˆ๋Š” ์•ก์…˜ ์ œ์ž‘์ž๋Š” ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์–ด๋ ต์Šต๋‹ˆ๋‹ค.

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

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

์ตœ์ ํ™”ํ•˜๊ฑฐ๋‚˜ ์ผ๊ด„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์—†์Œ

John A De Goes์˜ ์ตœ๊ทผ ๋ธ”๋กœ๊ทธ ๊ฒŒ์‹œ๋ฌผ์€ ํšจ๊ณผ๋ฅผ ํ‘œํ˜„ํ•˜๊ธฐ ์œ„ํ•œ IO ๋˜๋Š” ํƒœ์Šคํฌ์™€ ๊ฐ™์€ ๋ถˆํˆฌ๋ช…ํ•œ ๋ฐ์ดํ„ฐ ์œ ํ˜•์˜ ๋ฌธ์ œ์— ๋Œ€ํ•ด ๋…ผ์˜ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ถˆํˆฌ๋ช…ํ•œ ์œ ํ˜•๋ณด๋‹ค ๋ถ€์ž‘์šฉ์— ๋Œ€ํ•œ ์„ ์–ธ์  ์„ค๋ช…์„ ์‚ฌ์šฉํ•˜๋ฉด ๋‚˜์ค‘์— ํšจ๊ณผ๋ฅผ ์ตœ์ ํ™”ํ•˜๊ฑฐ๋‚˜ ๊ฒฐํ•ฉํ•  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

FP๋ฅผ ์œ„ํ•œ ํ˜„๋Œ€ ์•„ํ‚คํ…์ฒ˜

์ฝํฌ, ์•ฝ์† ๋ฐ ์ƒ์„ฑ๊ธฐ๋Š” ๋ถˆํˆฌ๋ช…ํ•˜๋ฏ€๋กœ ์ผ๊ด„ ์ฒ˜๋ฆฌ ๋ฐ/๋˜๋Š” ์ค‘๋ณต API ํ˜ธ์ถœ ์–ต์ œ์™€ ๊ฐ™์€ ์ตœ์ ํ™”๋Š” fetchPostsIfNeeded ์™€ ์œ ์‚ฌํ•œ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ช…์‹œ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ท€ํ•˜์˜ ์ œ์•ˆ์€ fetchPostsIfNeeded ์ œ๊ฑฐ reactions ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์ด ์™„์ „ํžˆ ์‹คํ˜„ ๊ฐ€๋Šฅํ•œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋‚ด ๊ตฌํ˜„

๋‚˜๋Š” ์ตœ๊ทผ์— ์ƒˆ๋กœ์šด ์ƒํƒœ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฆฌ๋“€์„œ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” redux ์˜

๊ธฐ์กด ๋ฆฌ๋“€์„œ ์ฝ”๋“œ์™€์˜ ํ˜ธํ™˜์„ฑ์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๊ธฐ์กด ๋ฆฌ๋“€์„œ์— ๋Œ€ํ•œ ํšจ๊ณผ๋ฅผ ๋†’์ด๊ธฐ ์œ„ํ•ด compose ๋ฐ CombineReducers๋ฅผ ์ˆ˜์ •ํ•ด์•ผ ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— redux๋ฅผ ๋ถ„๊ธฐํ•˜์ง€ ์•Š๊ณ  ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ํ™•์‹ ํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ๊ท€ํ•˜์˜ ์ œ์•ˆ์€ redux๋ฅผ ์ˆ˜์ •ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค๋Š” ์ ์—์„œ ๊ฝค ์ข‹์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ๊ท€ํ•˜์˜ ์†”๋ฃจ์…˜์ด ์•”์‹œ์  ์€๋‹‰ ์ƒํƒœ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐ ๋” ๋‚˜์€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ๊ฒฐ๊ณผ ๋ฐ˜์‘์„ ๊ฒฐํ•ฉํ•˜๊ฑฐ๋‚˜ ์ตœ์ ํ™”ํ•˜๊ธฐ๊ฐ€ ๋” ์‰ฌ์šธ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์š”์•ฝ

React๊ฐ€ "๋‹จ์ง€ UI"์ด๊ณ  ์‹ค์ œ๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ƒํƒœ๋ฅผ ์ €์žฅํ•˜๊ฑฐ๋‚˜ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ๊ทธ๋‹ค์ง€ ๊ทœ๋ฒ”์ ์ด์ง€ ์•Š์€ ๊ฒƒ์ฒ˜๋Ÿผ Redux๋Š” ๋Œ€๋ถ€๋ถ„ "๊ทธ๋ƒฅ ์ƒ์ "์ด๋ฉฐ ๋ถ€์ž‘์šฉ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ๊ทธ๋‹ค์ง€ ๊ทœ๋ฒ”์ ์ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

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

Redux๋Š” ๊ต‰์žฅํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ๋“ค์€ Redux ์ž์ฒด์˜ ํ•„์ˆ˜ ๋ฌธ์ œ๋Š” ์•„๋‹ˆ์ง€๋งŒ ํ˜„์žฌ ์•„ํ‚คํ…์ฒ˜ ํŒจํ„ด์— ๋Œ€ํ•œ ๊ฑด์„ค์ ์ธ ๋น„ํŒ๊ณผ ์ƒํƒœ ์ˆ˜์ • ์ด์ „์ด ์•„๋‹Œ ์ดํ›„์— ํšจ๊ณผ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋™๊ธฐ ๋ฐ ์ž ์žฌ์ ์ธ ์ด์ ์ด ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

๋ชจ๋“  44 ๋Œ“๊ธ€

ํฅ๋ฏธ๋กœ์šด ์ ‘๊ทผ! XHR์„ ์‹คํ–‰ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ๋ฐฉ๋ฒ•์ด๋‚˜ ์›น ์š”์ฒญ์ด ์• ์ดˆ์— ๋น„๋™๊ธฐ์˜ ์†Œ์Šค์ธ ๊ฒƒ์ฒ˜๋Ÿผ ๋น„๋™๊ธฐ์˜ ํŠน์„ฑ์—์„œ ์ด์ƒ์ ์œผ๋กœ ๋ถ„๋ฆฌ๋˜์–ด์•ผ ํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

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

์•ก์…˜ ํฌ๋ฆฌ์—์ดํ„ฐ์˜ ๋ถ€์ž‘์šฉ ๋ฌธ์ œ

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

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

์‚ฌ๋žŒ๋“ค์€ ์—ฌ์ „ํžˆ โ€‹โ€‹redux๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฉ‹์ง„ ๊ฒƒ์„ ๋งŒ๋“ค๊ณ  ์žˆ์œผ๋ฉฐ ํฐ ์ง„์ „์„ ์ด๋ฃจ๊ณ  ๋Œ€๋ถ€๋ถ„์˜ ๋Œ€์•ˆ๋ณด๋‹ค ํ›จ์”ฌ ๊ฐ„๋‹จํ•˜๊ณ  ์‹ค์šฉ์ ์ด์ง€๋งŒ, ์•ก์…˜ ์ œ์ž‘์ž ๋‚ด๋ถ€์—์„œ ๋ถ€์ž‘์šฉ์ด ๋ฐœ์ƒํ•˜๋Š” ๋ฐ ๋ช‡ ๊ฐ€์ง€ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์•”์‹œ์  ์ƒํƒœ๊ฐ€ ์ˆจ๊ฒจ์ง
  • ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์˜ ๋ณต์ œ
  • ์ปจํ…์ŠคํŠธ ๊ฐ€์ • ๋ฐ/๋˜๋Š” ์ข…์†์„ฑ์€ ์žฌ์‚ฌ์šฉ์„ฑ์„ ๊ฐ์†Œ์‹œํ‚ต๋‹ˆ๋‹ค.
  • ๋ถ€์ž‘์šฉ์ด ์žˆ๋Š” ์•ก์…˜ ์ œ์ž‘์ž๋Š” ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์–ด๋ ต์Šต๋‹ˆ๋‹ค.
  • ์ตœ์ ํ™”ํ•˜๊ฑฐ๋‚˜ ์ผ๊ด„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์—†์Œ

์•”์‹œ์  ์ƒํƒœ๊ฐ€ ์ˆจ๊ฒจ์ง

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

๋•Œ๋•Œ๋กœ ์šฐ์•„ํ•˜๊ธด ํ•˜์ง€๋งŒ ์•”์‹œ์  ์ƒํƒœ๊ฐ€ ์ˆจ๊ฒจ์ ธ ์žˆ๊ณ  ์‰ฝ๊ฒŒ ์ง๋ ฌํ™”ํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ƒ์„ฑ๊ธฐ๋ฅผ ์ž‘์—… ์ƒ์„ฑ์ž์˜ ์กฐ์ •์ž ๋กœ ์‚ฌ์šฉํ•˜๋Š”

redux-thunk ๋˜๋Š” ์ด์™€ ์œ ์‚ฌํ•œ ๊ฒƒ์„ ์‚ฌ์šฉํ•˜๋ฉด ์ฆ๊ฐ€ ์ž‘์—…์ด ์‹œ์ž‘๋˜๊ณ  ์™„๋ฃŒ๋  ๋•Œ ์ด๋ฅผ ์•Œ๋ฆฌ๋Š” ์—ฌ๋Ÿฌ ๋ฉ”์‹œ์ง€๋ฅผ ๊ฐ์†๊ธฐ์— ๋ณด๋‚ผ ์ˆ˜ ์žˆ์ง€๋งŒ ์ด๋Š” ๋‹ค๋ฅธ ๋ฌธ์ œ ์„ธํŠธ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

ํšจ๊ณผ๊ฐ€ ์™„๋ฃŒ๋œ ํ›„ ์ฆ๊ฐ€ ์ž‘์—…์ด ์ง„ํ–‰ ์ค‘์ธ ๊ฒƒ์œผ๋กœ ํ‘œ์‹œ๋˜๋Š” ์ง€์ ์œผ๋กœ ์ƒํƒœ๋ฅผ ๋˜๊ฐ๋Š” ๊ฒƒ์€ ์‹ค์ œ๋กœ ๋ถ€์ž‘์šฉ์„ ์žฌ์ƒ์„ฑํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ๋ฌด๊ธฐํ•œ ์ง„ํ–‰ ์ƒํƒœ๋กœ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค.

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

๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์˜ ๋ณต์ œ

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ํŠน์ • ์ƒํƒœ์ผ ๋•Œ๋งŒ ์•ก์…˜์ด ๋ถ€์ž‘์šฉ์„ ์ผ์œผํ‚ค๋Š” ๊ฒƒ์€ ๋‹น์—ฐํ•˜๋‹ค. redux์—์„œ ์•ก์…˜ ์ƒ์„ฑ์ž๊ฐ€ ์ƒํƒœ๋ฅผ ์š”๊ตฌํ•œ๋‹ค๋ฉด ๊ทธ๊ฒƒ์€ ๋‹จ์ˆœํ•˜๊ณ  ์ˆœ์ˆ˜ํ•œ ํ•จ์ˆ˜์ด๊ฑฐ๋‚˜ ๋ช…์‹œ์ ์œผ๋กœ ์ƒํƒœ์™€ ํ•จ๊ป˜ ์ œ๊ณต๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ฐ„๋‹จํ•œ ์˜ˆ๋กœ, ์˜ˆ์ œ ์นด์šดํ„ฐ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ ์‹œ์ž‘ํ•˜์—ฌ ์นด์šดํ„ฐ๊ฐ€ 5์˜ ๋ฐฐ์ˆ˜์ผ ๋•Œ๋งˆ๋‹ค ์นด์šดํ„ฐ๋ฅผ ์ž„์˜์˜ ๊ธ€๊ผด ์ƒ‰์ƒ์œผ๋กœ ๋ณ€๊ฒฝํ•˜๋ ค๊ณ  ํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

๋‚œ์ˆ˜ ์ƒ์„ฑ์€ ์ˆœ์ˆ˜ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์ด ๋™์ž‘์„ ๋‘๋Š” ์ œ์•ˆ๋œ ์œ„์น˜๋Š” ์ž‘์—… ์ƒ์„ฑ์ž์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์นด์šดํ„ฐ, ์ฆ๋ถ„, ๊ฐ์†Œ, incrementAsync, incrementIfOdd(์ด ๊ฒฝ์šฐ ์ˆ˜์ •ํ•  ํ•„์š”๊ฐ€ ์—†์Œ) ๊ฐ’์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋Š” ๋ช‡ ๊ฐ€์ง€ ๋‹ค๋ฅธ ์ž‘์—…์ด ์žˆ์Šต๋‹ˆ๋‹ค.

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

ํ˜„์žฌ ์ƒํƒœ๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ์ œ๊ณตํ•˜๋Š” ํ•œ ๊ฐ€์ง€ ๊ฐ€๋Šฅํ•œ ๋Œ€์•ˆ์€ redux-thunk๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ํ˜„์žฌ ์ƒํƒœ์— ์•ก์„ธ์Šคํ•˜๊ธฐ ์œ„ํ•ด ์ฝœ๋ฐฑ์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ํ˜„์žฌ ๊ฐ’์„ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•ด ์ƒ์„ฑ๋œ ๋ชจ๋“  ์žฅ์†Œ ์ž‘์—…์„ ์ˆ˜์ •ํ•˜๋Š” ๊ฒƒ์„ ํ”ผํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ด์ œ ์ž‘์—… ์ž‘์„ฑ์ž๋Š” ์ „์—ญ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ์ƒํƒœ์—์„œ ๊ฐ’์ด ์ €์žฅ๋œ ์œ„์น˜๋ฅผ ์•Œ์•„์•ผ ํ•˜๋ฉฐ ์ด๋Š” ๋™์ผํ•œ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ๋˜๋Š” ์ƒํƒœ๊ฐ€ ๋‹ค๋ฅด๊ฒŒ ๊ตฌ์„ฑ๋  ์ˆ˜ ์žˆ๋Š” ๋‹ค๋ฅธ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์—์„œ.

์ปจํ…์ŠคํŠธ ๊ฐ€์ • ๋ฐ/๋˜๋Š” ์ข…์†์„ฑ์€ ์žฌ์‚ฌ์šฉ์„ฑ์„ ๊ฐ์†Œ์‹œํ‚ต๋‹ˆ๋‹ค.

์นด์šดํ„ฐ ์˜ˆ์ œ๋ฅผ ๋‹ค์‹œ ๋ฐฉ๋ฌธํ•˜๋ฉด ์นด์šดํ„ฐ ์ธ์Šคํ„ด์Šค๊ฐ€ ํ•˜๋‚˜๋งŒ ์žˆ์Œ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋™์ผํ•œ ์ƒํƒœ๋ฅผ ๋ณด๊ฑฐ๋‚˜ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๋งŽ์€ ์นด์šดํ„ฐ๊ฐ€ ํŽ˜์ด์ง€์— ์žˆ๋Š” ๊ฒƒ์€ ์‰ฝ์ง€๋งŒ ๊ฐ ์นด์šดํ„ฐ๊ฐ€ ๋‹ค๋ฅธ ์ƒํƒœ๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ํ•˜๋ ค๋ฉด ์นด์šดํ„ฐ๋ฅผ ์ถ”๊ฐ€๋กœ ์ˆ˜์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ๊ฐ์†๊ธฐ ๋ฐ ๊ตฌ์„ฑ ์š”์†Œ ํ–ฅ์ƒ๊ธฐ๋กœ ์ผ๋ฐ˜ ๋ชฉ๋ก์„ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ• ์ด์ „์— ๋…ผ์˜๋˜์—ˆ์Šต๋‹ˆ๋‹ค

์นด์šดํ„ฐ๊ฐ€ ๋‹จ์ˆœ ์ž‘์—… ์œ ํ˜•๋งŒ ์‚ฌ์šฉํ–ˆ๋‹ค๋ฉด ๋Š๋ฆ…๋‚˜๋ฌด ์•„ํ‚คํ…์ฒ˜ ๋ฅผ ์ ์šฉํ•˜๋Š” ๊ฒƒ์€ ๋น„๊ต์  ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค.

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

React Elmish ์˜ˆ์ œ ๊ฐ€ ์ธ์ƒ์ ์œผ๋กœ

incrementIfOdd๋Š” ํ˜„์žฌ ์ƒํƒœ๋ฅผ ๊ฒฐ์ •ํ•˜๊ธฐ ์œ„ํ•ด ๋ฏธ๋“ค์›จ์–ด์— ์˜์กดํ•˜๋ฏ€๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ƒํƒœ ๋‚ด์—์„œ์˜ ์œ„์น˜๋ฅผ โ€‹โ€‹์•Œ์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.

incrementAsync๋Š” ๊ฒฐ๊ตญ ๋ถ€๋ชจ ๊ตฌ์„ฑ ์š”์†Œ์— ๋…ธ์ถœ๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์ถ”๊ฐ€ ์ปจํ…์ŠคํŠธ๋กœ ๋ž˜ํ•‘ํ•  ์ˆ˜ ์—†๋Š” ์ฆ๋ถ„ ์ž‘์—…์„ ์ง์ ‘ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.

๊ท€ํ•˜์˜ ์ œ์•ˆ์ด ์ด ๋ฌธ์ œ๋ฅผ ์ง์ ‘ ํ•ด๊ฒฐํ•˜์ง€๋Š” ์•Š์ง€๋งŒ incrementAsync๊ฐ€ ์ƒํƒœ๋ฅผ {counter: 0, incrementAfterDelay: 1000} ๋กœ ๋ณ€๊ฒฝํ•˜์—ฌ ์Šคํ† ์–ด ๋ฆฌ์Šค๋„ˆ์—์„œ ๋ถ€์ž‘์šฉ์„ ์œ ๋ฐœํ•˜๋Š” ๊ฐ„๋‹จํ•œ ์ž‘์—…์œผ๋กœ ๊ตฌํ˜„๋œ ๊ฒฝ์šฐ incrementAsync๋Š” ๊ฐ„๋‹จํ•œ ๋ฉ”์‹œ์ง€๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. incrementIfOdd๋Š” ์ˆœ์ˆ˜ํ•˜๋ฏ€๋กœ ๊ฐ์†๊ธฐ์—์„œ ๊ตฌํ˜„ํ•˜๊ฑฐ๋‚˜ ๋ช…์‹œ์ ์œผ๋กœ ์ƒํƒœ๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.... ๋”ฐ๋ผ์„œ ์›ํ•˜๋Š” ๊ฒฝ์šฐ elm ์•„ํ‚คํ…์ฒ˜๋ฅผ ๋‹ค์‹œ ์ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ถ€์ž‘์šฉ์ด ์žˆ๋Š” ์•ก์…˜ ์ œ์ž‘์ž๋Š” ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์–ด๋ ต์Šต๋‹ˆ๋‹ค.

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

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

์ตœ์ ํ™”ํ•˜๊ฑฐ๋‚˜ ์ผ๊ด„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์—†์Œ

John A De Goes์˜ ์ตœ๊ทผ ๋ธ”๋กœ๊ทธ ๊ฒŒ์‹œ๋ฌผ์€ ํšจ๊ณผ๋ฅผ ํ‘œํ˜„ํ•˜๊ธฐ ์œ„ํ•œ IO ๋˜๋Š” ํƒœ์Šคํฌ์™€ ๊ฐ™์€ ๋ถˆํˆฌ๋ช…ํ•œ ๋ฐ์ดํ„ฐ ์œ ํ˜•์˜ ๋ฌธ์ œ์— ๋Œ€ํ•ด ๋…ผ์˜ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ถˆํˆฌ๋ช…ํ•œ ์œ ํ˜•๋ณด๋‹ค ๋ถ€์ž‘์šฉ์— ๋Œ€ํ•œ ์„ ์–ธ์  ์„ค๋ช…์„ ์‚ฌ์šฉํ•˜๋ฉด ๋‚˜์ค‘์— ํšจ๊ณผ๋ฅผ ์ตœ์ ํ™”ํ•˜๊ฑฐ๋‚˜ ๊ฒฐํ•ฉํ•  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

FP๋ฅผ ์œ„ํ•œ ํ˜„๋Œ€ ์•„ํ‚คํ…์ฒ˜

์ฝํฌ, ์•ฝ์† ๋ฐ ์ƒ์„ฑ๊ธฐ๋Š” ๋ถˆํˆฌ๋ช…ํ•˜๋ฏ€๋กœ ์ผ๊ด„ ์ฒ˜๋ฆฌ ๋ฐ/๋˜๋Š” ์ค‘๋ณต API ํ˜ธ์ถœ ์–ต์ œ์™€ ๊ฐ™์€ ์ตœ์ ํ™”๋Š” fetchPostsIfNeeded ์™€ ์œ ์‚ฌํ•œ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ช…์‹œ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ท€ํ•˜์˜ ์ œ์•ˆ์€ fetchPostsIfNeeded ์ œ๊ฑฐ reactions ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์ด ์™„์ „ํžˆ ์‹คํ˜„ ๊ฐ€๋Šฅํ•œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋‚ด ๊ตฌํ˜„

๋‚˜๋Š” ์ตœ๊ทผ์— ์ƒˆ๋กœ์šด ์ƒํƒœ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฆฌ๋“€์„œ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” redux ์˜

๊ธฐ์กด ๋ฆฌ๋“€์„œ ์ฝ”๋“œ์™€์˜ ํ˜ธํ™˜์„ฑ์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๊ธฐ์กด ๋ฆฌ๋“€์„œ์— ๋Œ€ํ•œ ํšจ๊ณผ๋ฅผ ๋†’์ด๊ธฐ ์œ„ํ•ด compose ๋ฐ CombineReducers๋ฅผ ์ˆ˜์ •ํ•ด์•ผ ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— redux๋ฅผ ๋ถ„๊ธฐํ•˜์ง€ ์•Š๊ณ  ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ํ™•์‹ ํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ๊ท€ํ•˜์˜ ์ œ์•ˆ์€ redux๋ฅผ ์ˆ˜์ •ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค๋Š” ์ ์—์„œ ๊ฝค ์ข‹์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ๊ท€ํ•˜์˜ ์†”๋ฃจ์…˜์ด ์•”์‹œ์  ์€๋‹‰ ์ƒํƒœ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐ ๋” ๋‚˜์€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ๊ฒฐ๊ณผ ๋ฐ˜์‘์„ ๊ฒฐํ•ฉํ•˜๊ฑฐ๋‚˜ ์ตœ์ ํ™”ํ•˜๊ธฐ๊ฐ€ ๋” ์‰ฌ์šธ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์š”์•ฝ

React๊ฐ€ "๋‹จ์ง€ UI"์ด๊ณ  ์‹ค์ œ๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ƒํƒœ๋ฅผ ์ €์žฅํ•˜๊ฑฐ๋‚˜ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ๊ทธ๋‹ค์ง€ ๊ทœ๋ฒ”์ ์ด์ง€ ์•Š์€ ๊ฒƒ์ฒ˜๋Ÿผ Redux๋Š” ๋Œ€๋ถ€๋ถ„ "๊ทธ๋ƒฅ ์ƒ์ "์ด๋ฉฐ ๋ถ€์ž‘์šฉ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ๊ทธ๋‹ค์ง€ ๊ทœ๋ฒ”์ ์ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

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

Redux๋Š” ๊ต‰์žฅํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ๋“ค์€ Redux ์ž์ฒด์˜ ํ•„์ˆ˜ ๋ฌธ์ œ๋Š” ์•„๋‹ˆ์ง€๋งŒ ํ˜„์žฌ ์•„ํ‚คํ…์ฒ˜ ํŒจํ„ด์— ๋Œ€ํ•œ ๊ฑด์„ค์ ์ธ ๋น„ํŒ๊ณผ ์ƒํƒœ ์ˆ˜์ • ์ด์ „์ด ์•„๋‹Œ ์ดํ›„์— ํšจ๊ณผ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋™๊ธฐ ๋ฐ ์ž ์žฌ์ ์ธ ์ด์ ์ด ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

์ด ์ ‘๊ทผ ๋ฐฉ์‹๊ณผ redux-saga์˜ ์ฐจ์ด์ ์„ ์ดํ•ดํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ์•”์‹œ์ ์œผ๋กœ ์ƒ์„ฑ๊ธฐ์˜ ์ƒํƒœ๋ฅผ ์ˆจ๊ธด๋‹ค๋Š” ์ฃผ์žฅ์— ๊ด€์‹ฌ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ฒ˜์Œ์—๋Š” ๊ฐ™์€ ์ผ์„ ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ io.take ๊ฐ€ ๊ตฌํ˜„๋˜๋Š” ๋ฐฉ์‹์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ๊ฐ€๊ฐ€ ํ˜„์žฌ ํ•ด๋‹น yield ์—์„œ ์ฐจ๋‹จ๋œ ๊ฒฝ์šฐ์—๋งŒ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•œ๋‹ค๋ฉด ๋ฌด์Šจ ๋ง์ธ์ง€ ํ™•์‹คํžˆ ์•Œ๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ redux-saga๊ฐ€ io.take ๊ฐ€ ๊ณผ๊ฑฐ ์ž‘์—…์„ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ์ž‘์—…์„ ๋Œ€๊ธฐ์—ด์— ๋„ฃ์œผ๋ฉด ๋™์ผํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค. ์–ด๋Š ์ชฝ์ด๋“ , ์•ก์…˜ ์ŠคํŠธ๋ฆผ์„ ์ˆ˜์‹ ํ•˜์—ฌ ํŠธ๋ฆฌ๊ฑฐ๋˜๋Š” ๋น„๋™๊ธฐ์‹์œผ๋กœ dispatch ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๋ช‡ ๊ฐ€์ง€ ๋…ผ๋ฆฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜๋„ ํฅ๋ฏธ๋กœ์šด ๊ฐœ๋…์ž…๋‹ˆ๋‹ค. Redux๋ฅผ ์ƒํƒœ ์ „ํ™˜ ๋ฐ ํšจ๊ณผ๊ฐ€ ํŠธ๋ฆฌ๊ฑฐ๋˜๋Š” ์ž‘์—… ์ŠคํŠธ๋ฆผ์œผ๋กœ ๊ฐœ๋…ํ™”ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ๋‚˜์—๊ฒŒ ์ƒํƒœ ํ”„๋กœ์„ธ์„œ๋งŒ์„ ๊ณ ๋ คํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ๋Œ€์•ˆ์ ์ธ ๊ด€์ ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

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

๋‚˜ ์—ญ์‹œ "์Šค๋งˆํŠธ ์•ก์…˜ ์ œ์ž‘์ž"์˜ ํ˜„์žฌ ์ƒํƒœ์— ์•ฝ๊ฐ„ ๋งŒ์กฑํ•˜์ง€ ์•Š์ง€๋งŒ Redux๊ฐ€ ๋” ๋งŽ์€ ์ด๋ฒคํŠธ ์ €์žฅ์†Œ์ธ ๋‹ค๋ฅธ ๋ฐฉ์‹์œผ๋กœ ์ ‘๊ทผํ–ˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ์•ก์…˜์€ ๊ฐ€๋Šฅํ•œ ๋งŽ์€ ํšจ๊ณผ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค. ์ผ๋ถ€ ์™ธ๋ถ€ "์ปจํŠธ๋กค๋Ÿฌ" ๊ณ„์ธต์— ์˜ํ•ด ํŠธ๋ฆฌ๊ฑฐ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์ ‘๊ทผ ๋ฐฉ์‹์„ ๋”ฐ๋ฅด๋Š” ์ฝ”๋“œ๋ฅผ react-redux-controller ๋กœ ์ธ์ˆ˜ํ™”ํ–ˆ์ง€๋งŒ, ์ด๋ฅผ ๋‹ฌ์„ฑํ•˜๊ธฐ ์œ„ํ•œ ์ž ์žฌ์ ์œผ๋กœ ๋” ๊ฐ€๋ฒผ์šด ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ๋ฐ˜์ฏค ๊ตฌ์šด ์•„์ด๋””์–ด๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํ˜„์žฌ ๊ฐ€์ง€๊ณ  ์žˆ์ง€ ์•Š์€ ํ›„ํฌ๋ฅผ ๊ฐ€์ง€๋ ค๋ฉด react-redux๊ฐ€ ํ•„์š”ํ•˜๊ณ  ์ผ๋ถ€ ์ƒ์ ์—์„œ๋Š” ์•„์ง ํ•ด๊ฒฐํ•˜์ง€ ๋ชปํ•œ hijinks๋ฅผ ํฌ์žฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์Šคํ† ์–ด hijinks ์„ค๋ช… https://github.com/rackt/redux/issues/1200

์ด ์ ‘๊ทผ ๋ฐฉ์‹๊ณผ redux-saga์˜ ์ฐจ์ด์ ์„ ์ดํ•ดํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋‚ด ์ ‘๊ทผ ๋ฐฉ์‹์„ ์ƒ๊ฐํ•ด ๋‚ธ ์ดํ›„๊นŒ์ง€ redux-saga๋ฅผ ๋ณด์ง€ ์•Š์•˜์ง€๋งŒ ํ™•์‹คํžˆ ๋ช‡ ๊ฐ€์ง€ ์œ ์‚ฌ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‚˜๋Š” ์—ฌ์ „ํžˆ ๋ช‡ ๊ฐ€์ง€ ์ฐจ์ด์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  1. ๋‚ด ์ ‘๊ทผ ๋ฐฉ์‹์€ ์ž‘์—… ์ŠคํŠธ๋ฆผ์— ๋Œ€ํ•œ ์•ก์„ธ์Šค ๊ถŒํ•œ์ด ์—†๊ณ  ์ƒํƒœ์—๋งŒ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. redux-saga๋Š” ๋‹จ์ˆœํžˆ ์ž‘์—…์ด ์žˆ์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ํ”„๋กœ์„ธ์Šค๋ฅผ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚ด ์ ‘๊ทผ ๋ฐฉ์‹์—์„œ๋Š” ๋ฆฌ๋“€์„œ๊ฐ€ ๋™์ž‘์„ ์š”์ฒญํ•˜๊ธฐ ์œ„ํ•ด ๋ฐ˜์‘ ๊ธฐ๋Šฅ์„ ํŠธ๋ฆฌ๊ฑฐํ•˜๋Š” ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  2. ๋‚ด ์ ‘๊ทผ ๋ฐฉ์‹์—์„œ๋Š” ๋ชจ๋“  ์ƒํƒœ๊ฐ€ redux์˜ ์ƒํƒœ์— ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. Redux-saga์—๋Š” saga ์ƒ์„ฑ๊ธฐ์— ์žˆ๋Š” ์ถ”๊ฐ€ ์ƒํƒœ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค(์–ด๋–ค ๋ผ์ธ์— ์žˆ๋Š”์ง€, ์ง€์—ญ ๋ณ€์ˆ˜ ๊ฐ’).
  3. ๋‚ด ์ ‘๊ทผ ๋ฐฉ์‹์€ ๋น„๋™๊ธฐ ๋ถ€๋ถ„์„ ๋ถ„๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ๋น„๋™๊ธฐ ๊ธฐ๋Šฅ์„ ๋‹ค๋ฃจ์ง€ ์•Š๊ณ ๋„ ๋ฐ˜์‘์˜ ์‹ค์ œ ๋…ผ๋ฆฌ๋ฅผ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ๊ฐ€๋Š” ์ด๊ฒƒ๋“ค์„ ํ•˜๋‚˜๋กœ ๋ฌถ์Šต๋‹ˆ๋‹ค.
  4. ์‚ฌ๊ฐ€๋Š” ๊ฐ™์€ ๋…ผ๋ฆฌ์˜ ์„œ๋กœ ๋‹ค๋ฅธ ์กฐ๊ฐ์„ ํ•จ๊ป˜ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. ๋‚ด ์ ‘๊ทผ ๋ฐฉ์‹์€ ์‚ฌ๊ฐ€๋ฅผ ๊ฐ์†๊ธฐ, ๋ฐ˜์‘ ๋ฐ ๋ฐ˜์‘ ์œ ํ˜• ๊ตฌํ˜„์— ์†ํ•˜๋Š” ๋ถ€๋ถ„์œผ๋กœ ๋ถ„ํ• ํ•˜๋„๋ก ๊ฐ•์š”ํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ๋ณธ์ ์œผ๋กœ ๋‚ด ์ ‘๊ทผ ๋ฐฉ์‹์€ ์ˆœ์ˆ˜ ๊ธฐ๋Šฅ์„ ๊ฐ•์กฐํ•˜๊ณ  ๋ชจ๋“  ๊ฒƒ์„ redux ์ƒํƒœ๋กœ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. redux-saga ์ ‘๊ทผ ๋ฐฉ์‹์€ ํ‘œํ˜„๋ ฅ์„ ๊ฐ•์กฐํ•ฉ๋‹ˆ๋‹ค. ์žฅ์ ๋„ ๋‹จ์ ๋„ ์žˆ์ง€๋งŒ ์ €๋Š” ์ œ๊ฒŒ ๋” ์ข‹์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ €๋Š” ํŽธ๊ฒฌ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ •๋ง ์œ ๋งํ•˜๊ฒŒ ๋“ค๋ฆฝ๋‹ˆ๋‹ค. ๋„๋ฉ”์ธ ๋…ผ๋ฆฌ์—์„œ ๋ฐ˜์‘ ๊ธฐ๊ณ„๋ฅผ ๋ถ„๋ฆฌํ•˜๋Š” ์˜ˆ๋ฅผ ๋ณด๋Š” ๊ฒƒ์ด ๋” ์„ค๋“๋ ฅ์ด ์žˆ์„ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๊ท€ํ•˜์˜ ์ œ์•ˆ์€ fetchPostsIfNeeded๋ฅผ ์ œ๊ฑฐํ–ˆ์œผ๋ฉฐ ๋” ๋งŽ๊ฑฐ๋‚˜ ๋” ์ ์€ ๋ฐ์ดํ„ฐ๊ฐ€ ์š”์ฒญ๋˜์—ˆ์„ ๋•Œ ํ•„์š”์— ๋”ฐ๋ผ ์—ฌ๋Ÿฌ ์š”์ฒญ์„ ์ตœ์ ํ™”ํ•˜๊ฑฐ๋‚˜ ๋‹ค๋ฅธ API ์„ธํŠธ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐ˜์‘ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์ด ์™„์ „ํžˆ ์‹คํ˜„ ๊ฐ€๋Šฅํ•œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๊ทธ๋Œ€๋กœ ๋ฐ˜์‘ ๊ธฐ๋Šฅ์—์„œ๋Š” ์‹ค์ œ๋กœ ๊ทธ๋ ‡๊ฒŒ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์–ด๋–ค ์ž‘์—…์ด ์ด๋ฏธ ์‹œ์ž‘๋˜์—ˆ๋Š”์ง€ ์•Œ์•„์•ผ ํ•˜๋Š” ๋…ผ๋ฆฌ๊ฐ€ ์žˆ์ง€๋งŒ(๋” ์ด์ƒ ์ž‘์—…์„ ์ผ๊ด„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์—†์Œ) ๋ฐ˜์‘ ๊ธฐ๋Šฅ์—๋Š” ์ •๋ณด๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๋ฐ˜์‘() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ˜์‘ ๊ธฐ๊ณ„๋Š” ํ™•์‹คํžˆ ๊ทธ๋Ÿฐ ์ผ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋„๋ฉ”์ธ ๋…ผ๋ฆฌ์—์„œ ๋ฐ˜์‘ ๊ธฐ๊ณ„๋ฅผ ๋ถ„๋ฆฌํ•˜๋Š” ์˜ˆ๋ฅผ ๋ณด๋Š” ๊ฒƒ์ด ๋” ์„ค๋“๋ ฅ์ด ์žˆ์„ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

doReactions() ํ•จ์ˆ˜๊ฐ€ XMLHttpRequest์˜ ์‹œ์ž‘/์ค‘์ง€๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์„ ์˜๋ฏธํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๊นŒ? ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•์„ ๋ชจ์ƒ‰ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฌธ์ œ๋Š” ๋‘ ๋ฐ˜์‘์ด ์‹ค์ œ๋กœ ๋™์ผํ•œ ๋ฐ˜์‘์ธ์ง€ ์—ฌ๋ถ€๋ฅผ ๊ฐ์ง€ํ•˜๋Š” ์ผ๋ฐ˜์ ์ธ ๋ฐฉ๋ฒ•์„ ์ฐพ๊ธฐ๊ฐ€ ์–ด๋ ต๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. Lodash์˜ isEqual์€ ๊ฑฐ์˜ ์ž‘๋™ํ•˜์ง€๋งŒ ํด๋กœ์ €์—๋Š” ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค.

doReactions() ํ•จ์ˆ˜๊ฐ€ XMLHttpRequest์˜ ์‹œ์ž‘/์ค‘์ง€๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์„ ์˜๋ฏธํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๊นŒ?

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

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

ํ ... ๋„๋ฉ”์ธ ๋…ผ๋ฆฌ๋กœ ๊ฐ™์€ ์˜๋ฏธ๊ฐ€ ์•„๋‹ ์ˆ˜๋„ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ๋ณผ ๋•Œ ๋ฐ˜์‘() ํ•จ์ˆ˜๋Š” ๋„๋ฉ”์ธ ๋…ผ๋ฆฌ๋ฅผ ์บก์Šํ™”ํ•˜๊ณ  ๋ฐ˜์‘์ด ์ ์šฉ๋˜๋Š” ๋…ผ๋ฆฌ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” doReactions() ํ•จ์ˆ˜์™€ ๋ณ„๊ฐœ์ž…๋‹ˆ๋‹ค. ๊ทผ๋ฐ ๋ญ”๊ฐ€ ๋‹ค๋ฅธ ๋œป์ด์‹ ๋“ฏ...

๊ทธ๋Œ€๋กœ ๋ฐ˜์‘ ๊ธฐ๋Šฅ์—์„œ๋Š” ์‹ค์ œ๋กœ ๊ทธ๋ ‡๊ฒŒ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์–ด๋–ค ์ž‘์—…์ด ์ด๋ฏธ ์‹œ์ž‘๋˜์—ˆ๋Š”์ง€ ์•Œ์•„์•ผ ํ•˜๋Š” ๋…ผ๋ฆฌ๊ฐ€ ์žˆ์ง€๋งŒ(๋” ์ด์ƒ ์ž‘์—…์„ ์ผ๊ด„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์—†์Œ) ๋ฐ˜์‘ ๊ธฐ๋Šฅ์—๋Š” ์ •๋ณด๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๋ฐ˜์‘() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ˜์‘ ๊ธฐ๊ณ„๋Š” ํ™•์‹คํžˆ ๊ทธ๋Ÿฐ ์ผ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ฃผ๋กœ ๋‹จ์ผ ์ด๋ฒคํŠธ๊ฐ€ ์—ฌ๋Ÿฌ ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ๋™์ผํ•œ ์ •๋ณด๋ฅผ ์š”์ฒญํ•˜๋Š” ์ƒํƒœ ๋ณ€๊ฒฝ์„ ํŠธ๋ฆฌ๊ฑฐํ•œ ๊ฒฝ์šฐ ์ด๋ฅผ ์ตœ์ ํ™”ํ•  ์ˆ˜ ์žˆ์Œ์„ ์˜๋ฏธํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด์ „ ์ƒํƒœ ๋ณ€๊ฒฝ์œผ๋กœ ์ธํ•œ ๋ถ€์ž‘์šฉ์ด ์•„์ง ๋ณด๋ฅ˜ ์ค‘์ธ์ง€ ํ™•์ธํ•˜๋Š” ๊ฒƒ๋งŒ์œผ๋กœ๋Š” ์ถฉ๋ถ„ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์ถ”๊ฐ€ ์š”์ฒญ์ด ํ•„์š”ํ•˜์ง€ ์•Š๋‹ค๋Š” ๊ฒƒ์€ ๋งž์Šต๋‹ˆ๋‹ค.

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

๋‚˜๋Š” ์ฃผ๋กœ ๋‹จ์ผ ์ด๋ฒคํŠธ๊ฐ€ ์—ฌ๋Ÿฌ ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ๋™์ผํ•œ ์ •๋ณด๋ฅผ ์š”์ฒญํ•˜๋Š” ์ƒํƒœ ๋ณ€๊ฒฝ์„ ํŠธ๋ฆฌ๊ฑฐํ•œ ๊ฒฝ์šฐ ์ด๋ฅผ ์ตœ์ ํ™”ํ•  ์ˆ˜ ์žˆ์Œ์„ ์˜๋ฏธํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด์ „ ์ƒํƒœ ๋ณ€๊ฒฝ์œผ๋กœ ์ธํ•œ ๋ถ€์ž‘์šฉ์ด ์•„์ง ๋ณด๋ฅ˜ ์ค‘์ธ์ง€ ํ™•์ธํ•˜๋Š” ๊ฒƒ๋งŒ์œผ๋กœ๋Š” ์ถฉ๋ถ„ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์ถ”๊ฐ€ ์š”์ฒญ์ด ํ•„์š”ํ•˜์ง€ ์•Š๋‹ค๋Š” ๊ฒƒ์€ ๋งž์Šต๋‹ˆ๋‹ค.

์š”์ฒญ์„ ๋ณ‘ํ•ฉํ•˜๊ฑฐ๋‚˜ ์ผ๊ด„ ์ฒ˜๋ฆฌํ•  ์ƒ๊ฐ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ์ค‘๋ณต ์ œ๊ฑฐ๋Š” ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ ๋ณด๋ฅ˜ ์ค‘์ธ ์ƒํƒœ ๋ณ€๊ฒฝ์˜ ๊ฒฝ์šฐ๋„ ์ž˜ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์„œ๋ฒ„ ์‘๋‹ต์ด ๋Œ์•„์˜ฌ ๋•Œ๊นŒ์ง€ ๋ฐ˜์‘ ํ•จ์ˆ˜์—์„œ ๋ฐ˜ํ™˜๋˜๋ฏ€๋กœ ์ค‘๋ณต์ด ์ œ๊ฑฐ๋˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

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

๋‚ด๊ฐ€ ์ƒ๊ฐํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ํ˜„์žฌ ๋ณด๋ฅ˜ ์ค‘์ธ ๋ฐ˜์‘์€ ๋ฐ˜์‘ ๊ตฌ์„ฑ ์š”์†Œ์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๊ธฐ์ˆ ์ ์œผ๋กœ ๋‚ด๋ถ€ ์ƒํƒœ๊ฐ€ ์žˆ์ง€๋งŒ ํ˜„์žฌ ์ƒํƒœ์˜ ํ•จ์ˆ˜๋กœ ๋ชจ๋ธ๋งํ•ฉ๋‹ˆ๋‹ค.

ํ ... ๋„๋ฉ”์ธ ๋…ผ๋ฆฌ๋กœ ๊ฐ™์€ ์˜๋ฏธ๊ฐ€ ์•„๋‹ ์ˆ˜๋„ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ๋ณผ ๋•Œ ๋ฐ˜์‘() ํ•จ์ˆ˜๋Š” ๋„๋ฉ”์ธ ๋…ผ๋ฆฌ๋ฅผ ์บก์Šํ™”ํ•˜๊ณ  ๋ฐ˜์‘์ด ์ ์šฉ๋˜๋Š” ๋…ผ๋ฆฌ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” doReactions() ํ•จ์ˆ˜์™€ ๋ณ„๊ฐœ์ž…๋‹ˆ๋‹ค. ๊ทผ๋ฐ ๋ญ”๊ฐ€ ๋‹ค๋ฅธ ๋œป์ด์‹ ๋“ฏ...

๋‚˜๋Š” /reactions/index ๋ชจ๋“ˆ ์ „์ฒด๋ฅผ ์ทจํ–ˆ์ง€๋งŒ, ์˜ˆ, reactions ํ•จ์ˆ˜๊ฐ€ ์ˆœ์ „ํžˆ ๋„๋ฉ”์ธ ๋…ผ๋ฆฌ๋ผ๋Š” ๋ฐ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋„๋ฉ”์ธ ํŠน์ • ๋ชจ๋“ˆ์— ์žˆ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ doReactions ์˜ ์ƒ์šฉ๊ตฌ์™€ ํ•จ๊ป˜ ๋ž˜ํ•‘๋ฉ๋‹ˆ๋‹ค. ๋ฐฉ๋ฒ•๋ก ์„ ๋…ธํฌํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ฝ”๋“œ์™€ ์•ฑ ์ฝ”๋“œ์˜ ๊ตฌ๋ถ„์„ ํ•œ ๋ˆˆ์— ์ดํ•ดํ•˜๊ธฐ ์–ด๋ ต๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋ฉด doReactions ์ž์ฒด๊ฐ€ API์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ํŠน์ • ํ–‰์œ„์˜ ํŠน์ • ๋ฉ”์„œ๋“œ์™€ ๋‹ค์†Œ ๋ฐ€์ ‘ํ•˜๊ฒŒ ๊ฒฐํ•ฉ๋œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์‚ด์„ ๋ถ™์ธ ๋ฐ˜์‘ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ๋‹ค์–‘ํ•œ ์œ ํ˜•์˜ ํšจ๊ณผ์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ๊ธฐ๋ฅผ ๋“ฑ๋กํ•˜๋Š” ๋ฐฉ๋ฒ•์ผ ์ˆ˜ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๊ฒƒ์€ ๋‹น์‹ ์˜ ๋ฐฉ๋ฒ•์„ ๋…ธํฌํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค. ์ €๋Š” ์ด ์ ‘๊ทผ ๋ฐฉ์‹์ด ์ •๋ง ๋งค๋ ฅ์ ์ด๋ผ๊ณ  โ€‹โ€‹์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋ฐ˜์‘ ๊ตฌ์„ฑ ์š”์†Œ ์ƒํƒœ๊ฐ€ ๋Œ€๋ถ€๋ถ„์˜ ๋ฐ˜์‘ ์ƒํƒœ์™€ ์ข‹์€ ๋น„์œ ์ธ์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.
์•ฑ ์ƒํƒœ์— ์žˆ์–ด์•ผ ํ•˜์ง€๋งŒ ๋ถ„๋ช…ํžˆ ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ๋“ 
๋ฐฐ์น˜ํ•  ์ˆ˜ ์—†๋Š” ๋””์ŠคํŒจ์น˜ ์ด๋ฒคํŠธ ์‚ฌ์ด์˜ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด
๊ฐ€๊ฒŒ.

๋‚˜๋Š” ์ด๋Ÿฐ ์ข…๋ฅ˜์˜ ์ƒํƒœ๊ฐ€ @yelouafi ๊ฐ€ ์ œ์–ด ์ƒํƒœ
์•„๋งˆ๋„ sagas๋Š” ์ง๋ ฌํ™”ํ•  ์ˆ˜ ์—†๋Š” ์ƒํƒœ๋ฅผ ๋ชจ๋ธ๋งํ•˜๋Š” ๊ดœ์ฐฎ์€ ๋ฐฉ๋ฒ•์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
๋…๋ฆฝ์ ์ธ ๊ด€์ฐฐ์ž/ํ–‰์œ„์ž๋กœ์„œ์˜ ์‹œ์Šคํ…œ.

์‚ฌ๊ฐ€๋ผ๋ฉด ์ˆจ๊ฒจ์ง„ ์‚ฌ๊ฐ€ ์ƒํƒœ์— ๋Œ€ํ•ด ๋œ ๊ฑฑ์ •ํ•  ๊ฒƒ ๊ฐ™์•„์š”
์‚ฌ์šฉ์ž ๋Œ€์‹  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ƒ์„ฑ ์ด๋ฒคํŠธ(๋ฐ˜์‘)์—๋งŒ ์‘๋‹ต
์•ฑ ๋ฆฌ๋“€์„œ๊ฐ€
ํ˜„์žฌ ์ƒํƒœ ๋ฐ ๋ชจ๋“  ์กฐ๊ฑด๋ถ€ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์ด
์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์€ ๋ณต์ œ ์—†์ด ์›ํ•˜๋Š” ๋ถ€์ž‘์šฉ์„ ํ—ˆ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
๋น„์ฆˆ๋‹ˆ์Šค ๋…ผ๋ฆฌ.
2016๋…„ 1์›” 4์ผ ์›”์š”์ผ ์˜คํ›„ 5:56 Winston Ewert [email protected]
์ผ๋‹ค:

๋‚˜๋Š” ์ฃผ๋กœ ๋‹จ์ผ ์ด๋ฒคํŠธ๊ฐ€ ์ƒํƒœ ๋ณ€๊ฒฝ์„ ์œ ๋ฐœํ•˜๋Š” ๊ฒฝ์šฐ๋ฅผ ์˜๋ฏธํ–ˆ์Šต๋‹ˆ๋‹ค.
์—ฌ๋Ÿฌ ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ๋™์ผํ•œ ์ •๋ณด๋ฅผ ์š”์ฒญํ•œ ๊ฒฝ์šฐ
์ตœ์ ํ™”ํ•˜์‹ญ์‹œ์˜ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๊ฒƒ๋งŒ์œผ๋กœ๋Š” ์ถฉ๋ถ„ํ•˜์ง€ ์•Š๋‹ค๋Š” ๊ฒƒ์ด ์˜ณ์Šต๋‹ˆ๋‹ค.
์ด์ „ ์ƒํƒœ ๋ณ€๊ฒฝ์˜ ๋ถ€์ž‘์šฉ์ด ์•„์ง ๋ณด๋ฅ˜ ์ค‘์ธ์ง€ ํ™•์ธ
๋”ฐ๋ผ์„œ ์ถ”๊ฐ€ ์š”์ฒญ์ด ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์š”์ฒญ์„ ๋ณ‘ํ•ฉํ•˜๊ฑฐ๋‚˜ ์ผ๊ด„ ์ฒ˜๋ฆฌํ•  ์ƒ๊ฐ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ์ค‘๋ณต ์ œ๊ฑฐ
์ž˜ ์ž‘๋™ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ๋Š” ๋ณด๋ฅ˜ ์ƒํƒœ์˜ ๊ฒฝ์šฐ๋ฅผ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
๋ณ€๊ฒฝ ์‚ฌํ•ญ๋„ ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค.
์„œ๋ฒ„๊ฐ€ ์‘๋‹ตํ•  ๋•Œ๊นŒ์ง€ ๋ฐ˜์‘ ๊ธฐ๋Šฅ(๋”ฐ๋ผ์„œ ์ค‘๋ณต ์ œ๊ฑฐ)
๋Œ์•„์˜ค๋‹ค.

์ฒ˜์Œ์—๋Š” ์•ฑ ๋‚ด์—์„œ ๋ชจ๋“  ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค.
ํ•˜์ง€๋งŒ ์ตœ๊ทผ์˜ ์Šคํ†ฑ์›Œ์น˜ ๋ฌธ์ œ์— ๋Œ€ํ•ด ์ƒ๊ฐํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ์„ ๋•Œ
์Šคํ†ฑ์›Œ์น˜๊ฐ€ ์ผœ์ ธ ์žˆ์–ด์•ผํ•œ๋‹ค๋Š” ์‚ฌ์‹ค์„ ๊นจ๋‹ฌ์•˜์Šต๋‹ˆ๋‹ค.
์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์€ ์ด๊ฒƒ๊ณผ ๊ด€๋ จ๋œ ์‹ค์ œ ๊ฐ„๊ฒฉ ๊ฐœ์ฒด๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
์Šคํ†ฑ์›Œ์น˜๋Š” ๋‹ค๋ฅธ ๊ณณ์— ์ €์žฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. isOn์€ ์•ฑ์— ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
state but is is not ํ˜ผ์ž๋Š” ์ด ๊ฒฝ์šฐ์— ์ถฉ๋ถ„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ์ƒ๊ฐํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ํ˜„์žฌ ๋ณด๋ฅ˜ ์ค‘์ธ ๋ฐ˜์‘์€
๋ฐ˜์‘ ์„ฑ๋ถ„. ๊ธฐ์ˆ ์ ์œผ๋กœ ๋‚ด๋ถ€ ์ƒํƒœ๊ฐ€ ์žˆ์ง€๋งŒ ์šฐ๋ฆฌ๋Š”
๊ทธ๊ฒƒ๋“ค์„ ํ˜„์žฌ ์ƒํƒœ์˜ ํ•จ์ˆ˜๋กœ.

โ€”
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ฑฐ๋‚˜ GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/rackt/redux/issues/1182#issuecomment -168858051.

๋ฐฉ๋ฒ•๋ก ์„ ๋…ธํฌํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ฝ”๋“œ์™€ ์•ฑ ์ฝ”๋“œ์˜ ๊ตฌ๋ถ„์„ ํ•œ ๋ˆˆ์— ์ดํ•ดํ•˜๊ธฐ ์–ด๋ ต๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

๊ทธ๊ฒƒ์€ ์™„์ „ํžˆ ๊ณต์ •ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ ๋‹ค์Œ doReactions ์ž์ฒด๋Š” API์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ํŠน์ • ์ž‘์—…์˜ ํŠน์ • ๋ฉ”์„œ๋“œ์™€ ๋‹ค์†Œ ๋ฐ€์ ‘ํ•˜๊ฒŒ ๊ฒฐํ•ฉ๋œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์‚ด์„ ๋ถ™์ธ ๋ฐ˜์‘ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ๋‹ค์–‘ํ•œ ์œ ํ˜•์˜ ํšจ๊ณผ์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ๊ธฐ๋ฅผ ๋“ฑ๋กํ•˜๋Š” ๋ฐฉ๋ฒ•์ผ ์ˆ˜ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ. ๋‚˜๋Š” ์—ฌ์ „ํžˆ ๊ทธ๊ฒƒ์„ ๋ถ„ํ• ํ•˜๋Š” ๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•์„ ์•Œ์•„ ๋‚ด๋ ค๊ณ  ๋…ธ๋ ฅํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํ‰๋“ฑ ๊ฒ€์‚ฌ ๋ฌธ์ œ๋กœ ์ธํ•ด ๋ณต์žกํ•ฉ๋‹ˆ๋‹ค.

๋ฐ˜์‘ ๊ตฌ์„ฑ ์š”์†Œ ์ƒํƒœ๊ฐ€ ๋Œ€๋ถ€๋ถ„์˜ ๋ฐ˜์‘ ์ƒํƒœ์™€ ์ข‹์€ ๋น„์œ ์ธ์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.
์•ฑ ์ƒํƒœ์— ์žˆ์–ด์•ผ ํ•˜์ง€๋งŒ ๋ถ„๋ช…ํžˆ ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ๋“ 
๋ฐฐ์น˜ํ•  ์ˆ˜ ์—†๋Š” ๋””์ŠคํŒจ์น˜ ์ด๋ฒคํŠธ ์‚ฌ์ด์˜ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด
๊ฐ€๊ฒŒ.

๋ฏธ์•ˆ, ๋‚ด๊ฐ€ ๋น„์œ ๋ฅผ ๋ง์นœ ๊ฒƒ ๊ฐ™์•„. ๋‚ด ์š”์ ์€ DOM์˜ ์ƒํƒœ๋งŒํผ ์ปดํฌ๋„ŒํŠธ ์ƒํƒœ์— ๋ฐ˜์‘ํ•˜๊ธฐ ์œ„ํ•ด ์™ธ๋ถ€ ์•ก์…˜ ์ƒํƒœ๋ฅผ ๋น„๊ตํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ฐ„๊ฒฉ ๋˜๋Š” XMLHttpRequest๋Š” ์ƒ์„ฑ ๋ฐ ์†Œ๋ฉธ ๋ฐ˜์‘์„ ์ˆ˜ํ–‰ํ•˜๋Š” DOM ์š”์†Œ์™€ ๋น„์Šทํ•ฉ๋‹ˆ๋‹ค. ๋‹น์‹ ์€ ๋‹จ์ˆœํžˆ ํ˜„์žฌ DOM์ด ๋ฌด์—‡์„ ํ•ด์•ผ ํ•˜๋Š”์ง€ ๋ฐ˜์‘ํ•˜๊ณ  ๊ทธ๊ฒƒ์ด ์ผ์–ด๋‚˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ํ˜„์žฌ ์™ธ๋ถ€ ๋ฐ˜์‘ ์ง‘ํ•ฉ์„ ๋ฐ˜ํ™˜ํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ์ทจ์†Œํ•˜๊ฑฐ๋‚˜ ์ž‘์—…์„ ์‹œ์ž‘ํ•˜์—ฌ ์‚ฌ์‹ค๋กœ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

๋‚˜๋Š” ๊ทธ ์ ‘๊ทผ ๋ฐฉ์‹๋„ ๋งค์šฐ ํฅ๋ฏธ๋กญ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์ƒํƒœ ๋งคํ•‘์„ ์‚ฌ์šฉํ•˜๋Š” ์—ฌ๋Ÿฌ doReactions ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๊ณ ๋ คํ•ด ๋ณด์…จ์Šต๋‹ˆ๊นŒ? ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋“œ๋ผ์ด๋ฒ„๋ฅผ ๋นŒ๋“œํ•  ์ˆ˜ ์žˆ๋Š” cyclejs์™€ ๋น„์Šทํ•  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

function main(action$) {
  const state$ = action$.startWith(INITIAL_STATE).scan(reducer);

  return { 
    DOM: state$.map(describeDOM),
    HTTP: state$.map(describeRequests),
    ...
  };
}

ํ•œ ๊ฐ€์ง€ ์ฐจ์ด์ ์€ ์ž‘์—… ์ŠคํŠธ๋ฆผ( const someEvent$ = sources.DOM.select('.class').events('click') )์„ ๊ฐ€์ ธ์˜ค๊ธฐ ์œ„ํ•ด ๋“œ๋ผ์ด๋ฒ„์— ์ด๋ฒคํŠธ๋ฅผ ์ฟผ๋ฆฌํ•˜์ง€ ์•Š๊ณ  HTTP ์š”์ฒญ์— ๋Œ€ํ•ด ์ˆ˜ํ–‰ํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ์‹ฑํฌ์—์„œ ์ง์ ‘ ์ž‘์—…( <button onClick={() => dispatch(action())} /> )์„ ์ง€์ •ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ.

๋‚˜๋Š” React ๋น„์œ ๊ฐ€ ๊ฝค ์ž˜ ์ž‘๋™ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. DOM์„ ๋‚ด๋ถ€ ์ƒํƒœ๋กœ ๊ฐ„์ฃผํ•˜์ง€ ์•Š๊ณ  API์™€ ํ•จ๊ป˜ ์ž‘๋™ํ•˜๋Š” ๋ฐ˜๋ฉด ๋‚ด๋ถ€ ์ƒํƒœ๋Š” ๊ตฌ์„ฑ ์š”์†Œ ์ธ์Šคํ„ด์Šค์™€ ๊ฐ€์ƒ DOM์œผ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ์€ API์— ๋Œ€ํ•œ ์•„์ด๋””์–ด์ž…๋‹ˆ๋‹ค(React ์‚ฌ์šฉ, HTTP๋„ ์ด์™€ ๊ฐ™์ด ๋นŒ๋“œํ•  ์ˆ˜ ์žˆ์Œ).

// usage
const describe = (state, dispatch) => <MyComponent state={state} dispatch={dispatch} />;
const driver = createReactDOMDriver({ container } /* opts */);
store.subscribe(() => driver.update(describe(store.getState(), store.dispatch)); 
// (could be simplified further to eg. `store.use(driver, describe)` )

// implementation
const createReactDOMDriver = ({ container }) => {
  return {
    update: (element) => ReactDOM.render(element, container),
    destroy: () => ReactDOM.unmountComponentAtNode(container),
  };
};

describe ๊ฐ€ getState (์ƒํƒœ ์Šค๋ƒ…์ƒท ๋Œ€์‹ ) ๋ฐ dispatch ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ฒŒ ํ•˜๋ฉด ์›ํ•˜๋Š” ๋งŒํผ ๋™๊ธฐํ™”๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ์ƒํƒœ ๋งคํ•‘์„ ์‚ฌ์šฉํ•˜๋Š” ์—ฌ๋Ÿฌ doReactions๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๊ณ ๋ คํ•ด ๋ณด์…จ์Šต๋‹ˆ๊นŒ?

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

์„ค๋ช…์ด getState(์ƒํƒœ ์Šค๋ƒ…์ƒท ๋Œ€์‹ )๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ  ๋””์ŠคํŒจ์น˜ํ•˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ฒŒ ํ•˜๋ฉด ์›ํ•˜๋Š” ๋งŒํผ ๋™๊ธฐํ™”๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š”ํ•˜์ง€ ์•Š์„ ๊ฒƒ์ด๋‹ค. ์ œ ์ƒ๊ฐ์—๋Š” ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ ๋น„๋™๊ธฐ๋ฅผ ์ œํ•œํ•˜๊ณ  ์ถ”๊ฐ€ ์‚ฌ์šฉ ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•˜์ง€ ์•Š์œผ๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. getState()๋ฅผ ํ˜ธ์ถœํ•˜๋ ค๋Š” ๋ชจ๋“  ๊ฒƒ์€ ๊ฐ์†๊ธฐ ๋˜๋Š” ๋ฐ˜์‘ ํ•จ์ˆ˜์—์„œ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. (๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๊ฒƒ์€ ๋‚˜์˜ ์ˆœ์ˆ˜ํ•œ ์‚ฌ๊ณ  ๋ฐฉ์‹์ด๋ฉฐ, ์•„๋งˆ๋„ ๊ทธ๊ฒƒ์„ ๋”ฐ๋ฅด์ง€ ์•Š๋Š” ์‹ค์šฉ์ ์ธ ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.)

๊ณต์ •ํ•œ ์ง€์ ์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋‹น์‹ ์˜ ์•„์ด๋””์–ด์™€ @taurose ์˜ ์˜ˆ ์‚ฌ์ด์˜ ๋งคํ•‘์— ๋Œ€ํ•ด ์ถฉ๋ถ„ํžˆ ์ƒ๊ฐํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์„ฑ๊ธ‰ํ•˜๊ฒŒ describe ๊ฐ€ reactions ํ•จ์ˆ˜๋ผ๊ณ  ๊ฐ€์ •ํ–ˆ์ง€๋งŒ ์‚ฌ์‹ค์ด ์•„๋‹ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ๋„ค, ์ €๋Š” ๋น„๋™๊ธฐ๋ฅผ ์ œํ•œํ•˜๋Š” ๊ฒƒ์ด ์ด์ƒ์ ์ด๋ผ๋Š” ๋ฐ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ์ œ๊ฐ€ ๋‹น์‹ ์˜ ์•„์ด๋””์–ด์˜ ์ทจ์ง€๋ฅผ ์ดํ•ดํ•œ๋‹ค๋ฉด, ์šฐ๋ฆฌ๋Š” ์—ฐ์†์„ฑ์ด ์ˆœ์ˆ˜ํ•˜๊ณ  ์˜๋„๋ฅผ ์„ค๋ช…ํ•˜๋Š” ๋ฐฐ์—ด ๊ตฌ์„ฑ์›์˜ ์กด์žฌ์™€ ๊ฐ™์€ ์ƒํƒœ์˜ ํŠน์ • ์ธก๋ฉด๊ณผ 1:1 ๋งคํ•‘๋˜๊ธฐ๋ฅผ ์›ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์ฃผ์–ด์ง„ ํšจ๊ณผ๊ฐ€ ์ง„ํ–‰ ์ค‘์ž…๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ฒŒํ•˜๋ฉด ์—ฌ๋Ÿฌ ๋ฒˆ ์‹คํ–‰๋˜๋Š” ๊ฒฝ์šฐ ์‹ค์ œ๋กœ ์ค‘์š”ํ•˜์ง€ ์•Š์œผ๋ฉฐ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์•”์‹œ์ ์œผ๋กœ ์˜์กดํ•  ์ˆ˜ ์žˆ๋Š” ํ๋ฆ„ ์ค‘๊ฐ„ ์–ด๋”˜๊ฐ€์—์„œ ์ค‘๋‹จ๋˜๋Š” ํ”„๋กœ์„ธ์Šค์˜ ์ˆจ๊ฒจ์ง„ ์ธก๋ฉด์ด ์—†์Šต๋‹ˆ๋‹ค.

์„ค๋ช…์ด getState(์ƒํƒœ ์Šค๋ƒ…์ƒท ๋Œ€์‹ )๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ  ๋””์ŠคํŒจ์น˜ํ•˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ฒŒ ํ•˜๋ฉด ์›ํ•˜๋Š” ๋งŒํผ ๋™๊ธฐํ™”๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

describe ๋Š” ์ƒํƒœ๊ฐ€ ๋ณ€๊ฒฝ๋  ๋•Œ๋งˆ๋‹ค ํ˜ธ์ถœ๋˜๋ฏ€๋กœ ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋น„๋™๊ธฐ๋ฅผ ํ•  ์ˆ˜ ์—†๋‹ค๋Š” ์˜๋ฏธ๋Š” ์•„๋‹™๋‹ˆ๋‹ค. ๋ฐ˜์‘ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ๊ณ ๋ คํ•˜์‹ญ์‹œ์˜ค. ํ˜„์žฌ ์ƒํƒœ๋ฅผ ๊ฐ€์ ธ์˜ค๊ธฐ ์œ„ํ•ด ๋ Œ๋”๋ง ๋ฉ”์„œ๋“œ ๋˜๋Š” ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ๋‚ด๋ถ€์—์„œ getState ํ˜ธ์ถœํ•˜์ง€ ์•Š๊ณ  ์†Œํ’ˆ์—์„œ ์ฝ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์ž์ฒด์ ์œผ๋กœ ๋น„๋™๊ธฐ์‹์œผ๋กœ ์•„๋ฌด๊ฒƒ๋„ ํ•  ์ˆ˜ ์—†๋‹ค๋Š” ์ ์—์„œ ๋‹น์‹ ์ด ์˜ณ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์„ ๋“œ๋ผ์ด๋ฒ„์— ๋งก๊ธฐ๊ณ  ๋งคํ•‘๋œ ์ƒํƒœ ๋ฐ/๋˜๋Š” ์ฝœ๋ฐฑ์„ ์ „๋‹ฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์„ค๋ช…์ด ๋ฐ˜์‘ ํ•จ์ˆ˜๋ผ๊ณ  ๊ฐ€์ •ํ–ˆ์ง€๋งŒ ์‚ฌ์‹ค์ด ์•„๋‹ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ๋งํ•  ์ˆ˜ ์žˆ๋Š” ํ•œ, ๊ทธ๊ฒƒ์€ ๊ฑฐ์˜ ๋™์ผํ•ฉ๋‹ˆ๋‹ค. ํ•œ ๊ฐ€์ง€ ์ฐจ์ด์ ์€ reactions ๊ฐ€ dispatch ๋ฐ›์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ describe ๋Š” ์ž‘์—…์„ ์ƒ์„ฑํ•˜๊ณ  ์ „๋‹ฌํ•˜๋Š” ์ฝœ๋ฐฑ์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฐ˜๋ฉด reactions ๋Š” ์ž‘์—… ์ƒ์„ฑ์ž๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

@winstonewert ๊ทธ๊ฒƒ์€ ๊ธด ์Šค๋ ˆ๋“œ์ด๋ฉฐ ์ง€๊ธˆ ๋‹น์žฅ ์ฝ๊ฑฐ๋‚˜ ์ฝ”๋“œ๋ฅผ ํ™•์ธํ•  ์‹œ๊ฐ„์ด ์—†์ง€๋งŒ @yelouafi ๊ฐ€ ๋‹ต๋ณ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

redux-saga ํ”„๋กœ์ ํŠธ๋Š” ์—ฌ๊ธฐ ์—์„œ ๊ธด ํ† ๋ก  .

๋‚˜๋Š” ๋˜ํ•œ ํ”„๋กœ๋•์…˜ ์•ฑ์—์„œ 1๋…„ ๋„˜๊ฒŒ saga ๊ฐœ๋…์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ๊ตฌํ˜„์€ ๋œ ํ‘œํ˜„์ ์ด์ง€๋งŒ ์ œ๋„ˆ๋ ˆ์ดํ„ฐ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ์€ redux์— ๋Œ€ํ•œ ๊ฐœ๋…์— ๋Œ€ํ•œ ๋ช‡ ๊ฐ€์ง€ ์œ ์‚ฌ ์˜ˆ์ž…๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์„œ ๊ตฌํ˜„์€ ์™„๋ฒฝํ•˜์ง€ ์•Š์ง€๋งŒ ์•„์ด๋””์–ด๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

@yelouafi ๋Š” redux ์™ธ๋ถ€์—์„œ ์ƒํƒœ๋ฅผ ์ˆจ๊ธฐ๋Š” ์ƒ์„ฑ๊ธฐ ์‚ฌ์šฉ์— ๋‚ด์žฌ๋œ ๋ฌธ์ œ ์™€ ๋ฐฑ์—”๋“œ์—์„œ ๋ฌด์šฉ๋‹ด์„ ์‹œ์ž‘ํ•˜๊ณ  ์œ ๋‹ˆ๋ฒ„์„ค ์•ฑ์˜ ํ”„๋ก ํŠธ์—”๋“œ์— ์ˆจ๊ฒจ์ง„ ์ƒํƒœ๋ฅผ ์ „์†กํ•˜๋Š” ๊ฒƒ์ด ๋ณต์žกํ•˜๋‹ค๋Š” ์ ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค(์ •๋ง ํ•„์š”ํ•œ ๊ฒฝ์šฐ?)

redux-saga๋Š” Free๊ฐ€ IO ๋ชจ๋‚˜๋“œ์— ๋Œ€ํ•œ ๊ฒƒ์ฒ˜๋Ÿผ redux-thunk์— ๋Œ€ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํšจ๊ณผ๋Š” ์„ ์–ธ์ ์ด๋ฉฐ ์ง€๊ธˆ์€ ์‹คํ–‰๋˜์ง€ ์•Š์œผ๋ฉฐ ๋‚ด๋ถ€ ๊ฒ€์‚ฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๊ณ  ์ธํ„ฐํ”„๋ฆฌํ„ฐ์—์„œ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค(๋‚˜์ค‘์— ์‚ฌ์šฉ์ž ์ •์˜ํ•  ์ˆ˜ ์žˆ์Œ).

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

๋ฆฌ๋“€์„œ๋กœ ์‚ฌ๊ฐ€ ์ปจ์…‰์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์€ ๊ฐœ๋…์ ์œผ๋กœ ๋‚˜์œ ์ƒ๊ฐ์ด ์•„๋‹ˆ๋ฉฐ ํŠธ๋ ˆ์ด๋“œ ์˜ค๋ธŒ ๊ฒฐ์ •์ด๋ผ๋Š” ๋ฐ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค.
๊ฐœ์ธ์ ์œผ๋กœ ํ”„๋กœ๋•์…˜์—์„œ 1๋…„ ์ด์ƒ saga๋ฅผ ์‚ฌ์šฉํ•œ ํ›„์— saga์˜ ์ƒํƒœ๋ฅผ ์Šค๋ƒ…์ƒทํ•˜๊ณ  ๋‚˜์ค‘์— ๋ณต์›ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด ์œ ์šฉํ–ˆ์„ ์‚ฌ์šฉ ์‚ฌ๋ก€๊ฐ€ ๊ธฐ์–ต๋‚˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์„ ์žƒ์–ด๋„ ์ œ๋„ˆ๋ ˆ์ดํ„ฐ์˜ ํ‘œํ˜„๋ ฅ์„ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค. ํŠน์ง•.

๋‚ด๊ฐ€ ๋งํ•˜๋Š” ๊ฒƒ์ด redux-saga์— ๋Œ€ํ•œ ๊ณต๊ฒฉ์œผ๋กœ ๋“ค๋ฆฌ์ง€ ์•Š๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ๋‚ด๊ฐ€ ์ƒ๊ฐํ•ด๋‚ธ ์ ‘๊ทผ ๋ฐฉ์‹๊ณผ ์–ด๋–ป๊ฒŒ ๋‹ค๋ฅธ์ง€์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ–ˆ์„ ๋ฟ์ž…๋‹ˆ๋‹ค.

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

๋‚˜๋Š” ๋‹น์‹ ์˜ ์š”์ ์„ ์—ฌ๊ธฐ์—์„œ ์ •๋ง๋กœ ์ดํ•ดํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ๊ฐ€๊ฐ€ ์ด๋ฒคํŠธ ๋กœ๊ทธ์˜ ํˆฌ์˜์ด๋ผ๊ณ  ์ฃผ์žฅํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๊นŒ? ํ•˜์ง€๋งŒ ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์•ก์…˜์„ ์žฌ์ƒํ•˜๋ฉด ๋ฌด์šฉ๋‹ด์ด ๋น„๋™๊ธฐ์‹ ์ด๋ฒคํŠธ์— ์˜์กดํ•˜๋Š” ๊ฒฝ์šฐ ๋ฌด์šฉ๋‹ด์—์„œ ๊ฐ™์€ ์œ„์น˜์— ๋„๋‹ฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. sagas๊ฐ€ redux์˜ ์ƒํƒœ ์ €์žฅ์†Œ๋‚˜ ์ด๋ฒคํŠธ ๋กœ๊ทธ์˜ ํ”„๋กœ์ ์…˜์— ์—†๋Š” ์ƒํƒœ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์€ ํ”ผํ•  ์ˆ˜ ์—†๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ๋งํ•  ์ˆ˜ ์žˆ๋Š” ํ•œ, ๊ทธ๊ฒƒ์€ ๊ฑฐ์˜ ๋™์ผํ•ฉ๋‹ˆ๋‹ค. ํ•œ ๊ฐ€์ง€ ์ฐจ์ด์ ์€ ๋ฐ˜์‘์ด ๋””์ŠคํŒจ์น˜๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์„ค๋ช…์€ ์ž‘์—…์„ ์ƒ์„ฑํ•˜๊ณ  ์ „๋‹ฌํ•˜๋Š” ์ฝœ๋ฐฑ์„ ๋ฐ˜ํ™˜ํ•˜์ง€๋งŒ ๋ฐ˜์‘์€ ์ž‘์—… ์ƒ์„ฑ์ž๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

๋™์˜. ์›์น™์ ์œผ๋กœ ๋ฐ˜์‘์€ ๋™์ผํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๋ชจ๋“  ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋Š” ์ด๋ฒคํŠธ๊ฐ€ ์‹œ์ž‘๋  ๋•Œ ์ „๋‹ฌ๋˜๋Š” ์ž‘์—… ์ƒ์„ฑ๊ธฐ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์ƒ๊ฐํ•˜๋ฉด ํ• ์ˆ˜๋ก ์ด ์ ‘๊ทผ ๋ฐฉ์‹๊ณผ ๋ฌด์šฉ๋‹ด ์‚ฌ์ด์— ๋งŽ์€ ์‹œ๋„ˆ์ง€ ํšจ๊ณผ๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. @winstonewert๊ฐ€ ์„ค๋ช…ํ•œ 4๊ฐ€์ง€ ์š”์ ์— ์ „์ ์œผ๋กœ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ๋ฐ˜์‘์ด ์‚ฌ์šฉ์ž๊ฐ€ ์‹œ์ž‘ํ•œ ์ž‘์—…์„ ๋ณผ ์ˆ˜ ์—†๋Š” ๊ฒƒ์€ ์ข‹์€ ์ผ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์ˆจ๊ฒจ์ง„ ์ƒํƒœ๊ฐ€ ๋ฐฉ์ง€๋˜๊ณ  ๋ฆฌ๋“€์„œ์˜ ๋น„์ฆˆ๋‹ˆ์Šค ๋…ผ๋ฆฌ๊ฐ€ ์ž‘์—… ์ž‘์„ฑ์ž ๋˜๋Š” ์‚ฌ๊ฐ€์—์„œ ๋ณต์ œ๋  ํ•„์š”๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ถ€์ž‘์šฉ์ด ์ข…์ข… ๋ฐ˜์‘ ์ €์žฅ์†Œ, ๊ฐ„๊ฒฉ, dom ๊ฐœ์ฒด, http ์š”์ฒญ ๋“ฑ์— ์ €์žฅํ•  ์ˆ˜ ์—†๋Š” ์ง๋ ฌํ™” ๋ถˆ๊ฐ€๋Šฅํ•œ ์ƒํƒœ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค๋Š” ๊ฒƒ์„ ๊นจ๋‹ฌ์•˜์Šต๋‹ˆ๋‹ค. sagas, rxjs, baconjs ๋“ฑ์€ ์ด ์™ธ๋ถ€ ์ง๋ ฌํ™” ๋ถˆ๊ฐ€๋Šฅํ•œ ์ œ์–ด ์ƒํƒœ์— ์™„๋ฒฝํ•ฉ๋‹ˆ๋‹ค.

doReactions๋Š” ์‚ฌ๊ฐ€๋กœ ๋Œ€์ฒด๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์‚ฌ๊ฐ€์˜ ์ด๋ฒคํŠธ ์†Œ์Šค๋Š” ์•ก์…˜์ด โ€‹โ€‹์•„๋‹Œ ๋ฐ˜์‘์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ๋งํ•˜๋Š” ๊ฒƒ์ด redux-saga์— ๋Œ€ํ•œ ๊ณต๊ฒฉ์œผ๋กœ ๋“ค๋ฆฌ์ง€ ์•Š๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

๋ณ„๋ง์”€์„ ์š”. ๋‚˜๋Š” ํ† ๋ก ์„ ๋”ฐ๋ฅด๊ณ  ์žˆ์ง€๋งŒ ์ฝ”๋“œ๋ฅผ ๋” ์ž์„ธํžˆ ์‚ดํŽด๋ณด์ง€ ์•Š๊ณ  ๋Œ“๊ธ€์„ ๋‹ฌ๊ณ  ์‹ถ์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

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

๋ฌผ๋ก  ์ˆœ์ˆ˜ํ•œ ๊ธฐ๋Šฅ์„ ๋Šฅ๊ฐ€ํ•˜๋Š” ๊ฒƒ์€ ์—†์Šต๋‹ˆ๋‹ค. ๋ฆฌ๋“€์„œ๋Š” ์ƒํƒœ ์ „ํ™˜์„ ํ‘œํ˜„ํ•˜๋Š” ๋ฐ ํ›Œ๋ฅญํ•˜์ง€๋งŒ ์ƒํƒœ ๋จธ์‹ ์œผ๋กœ ์ „ํ™˜ํ•˜๋ฉด ์ •๋ง ์ด์ƒํ•ด์ง‘๋‹ˆ๋‹ค.

์ด๋Š” ๋” ๋งŽ์€ ์ œ์–ด ์ƒํƒœ๋ฅผ ์Šคํ† ์–ด์— ์ €์žฅํ•ด์•ผ ํ•จ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค(์•ฑ ์ƒํƒœ ๋ณ€๊ฒฝ๋งŒ์œผ๋กœ๋Š” ๊ด€๋ จ ๋ฐ˜์‘์„ ์ถ”๋ก ํ•˜๊ธฐ์— ๋ถˆ์ถฉ๋ถ„ํ•จ).

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

๊ทธ๋Ÿฌ๋‚˜ ๋ถ€์ž‘์šฉ์ด ์ข…์ข… ๋ฐ˜์‘ ์ €์žฅ์†Œ, ๊ฐ„๊ฒฉ, dom ๊ฐœ์ฒด, http ์š”์ฒญ ๋“ฑ์— ์ €์žฅํ•  ์ˆ˜ ์—†๋Š” ์ง๋ ฌํ™” ๋ถˆ๊ฐ€๋Šฅํ•œ ์ƒํƒœ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค๋Š” ๊ฒƒ์„ ๊นจ๋‹ฌ์•˜์Šต๋‹ˆ๋‹ค. sagas, rxjs, baconjs ๋“ฑ์€ ์ด ์™ธ๋ถ€ ์ง๋ ฌํ™” ๋ถˆ๊ฐ€๋Šฅํ•œ ์ œ์–ด ์ƒํƒœ์— ์™„๋ฒฝํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋‹น์‹ ์ด ์•„์ง ๋ฌด์—‡์ธ์ง€ ๋ณผ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๋ฆฌ๋“€์„œ๋Š” ์ƒํƒœ ์ „ํ™˜์„ ํ‘œํ˜„ํ•˜๋Š” ๋ฐ ํ›Œ๋ฅญํ•˜์ง€๋งŒ ์ƒํƒœ ๋จธ์‹ ์œผ๋กœ ์ „ํ™˜ํ•˜๋ฉด ์ •๋ง ์ด์ƒํ•ด์ง‘๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋™์˜ํ•œ๋‹ค. ๋ณต์žกํ•œ ์ƒํƒœ ๊ธฐ๊ณ„๋ฅผ ์†์œผ๋กœ ์ž‘์„ฑํ•˜๋Š” ๊ฒฝ์šฐ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. (์‚ฌ์‹ค ์šฐ๋ฆฌ๊ฐ€ ๋ฐœ์ „๊ธฐ๋ฅผ ๊ฐ์†๊ธฐ๋กœ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๋‹ค๋ฉด ๊ทธ๊ฒƒ์€ ๊น”๋”ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.)

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

์—ฌ๊ธฐ์„œ ๋ฌด์Šจ ์ƒ๊ฐ์„ ํ•˜๊ณ  ์žˆ๋Š”์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๋“œ๋ผ์ด๋ฒ„๊ฐ€ ๋‹ค๋ฅธ ์œ ์šฉํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜์ง€๋งŒ ์ œ์–ด ์ƒํƒœ๋ฅผ ์ œ๊ฑฐํ•˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

@winstonewert ์•„๋‹ˆ์š”, ๊ณต๊ฒฉ์œผ๋กœ

๋‚˜๋Š” ๋‹น์‹ ์˜ ์š”์ ์„ ์—ฌ๊ธฐ์—์„œ ์ •๋ง๋กœ ์ดํ•ดํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ๊ฐ€๊ฐ€ ์ด๋ฒคํŠธ ๋กœ๊ทธ์˜ ํˆฌ์˜์ด๋ผ๊ณ  ์ฃผ์žฅํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๊นŒ? ํ•˜์ง€๋งŒ ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์•ก์…˜์„ ์žฌ์ƒํ•˜๋ฉด ๋ฌด์šฉ๋‹ด์ด ๋น„๋™๊ธฐ์‹ ์ด๋ฒคํŠธ์— ์˜์กดํ•˜๋Š” ๊ฒฝ์šฐ ๋ฌด์šฉ๋‹ด์—์„œ ๊ฐ™์€ ์œ„์น˜์— ๋„๋‹ฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. sagas๊ฐ€ redux์˜ ์ƒํƒœ ์ €์žฅ์†Œ๋‚˜ ์ด๋ฒคํŠธ ๋กœ๊ทธ์˜ ํ”„๋กœ์ ์…˜์— ์—†๋Š” ์ƒํƒœ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์€ ํ”ผํ•  ์ˆ˜ ์—†๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์•„๋‹ˆ์š”. redux ์Šคํ† ์–ด๋Š” ํ”„๋กœ์ ์…˜์ด์ง€๋งŒ saga๋Š” ํ‰๋ฒ”ํ•˜๊ณ  ์˜ค๋ž˜๋œ ๋‹จ์ˆœํ•œ ์ฒญ์ทจ์ž์ž…๋‹ˆ๋‹ค.

saga(ํ”„๋กœ์„ธ์Šค ๊ด€๋ฆฌ์ž๋ผ๊ณ ๋„ ํ•จ) ๋Š” ์ƒˆ๋กœ์šด ๊ฐœ๋…์ด ์•„๋‹ˆ๋ฉฐ CQRS ์„ธ๊ณ„์—์„œ ์‹œ์ž‘๋˜์—ˆ์œผ๋ฉฐ ๊ณผ๊ฑฐ์— ๋ฐฑ์—”๋“œ ์‹œ์Šคํ…œ์—์„œ ๋„๋ฆฌ ์‚ฌ์šฉ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

saga๋Š” ์ด๋ฒคํŠธ ๋กœ๊ทธ๋ฅผ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์— ํˆฌ์˜ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์‹œ์Šคํ…œ์—์„œ ์ผ์–ด๋‚˜๋Š” ์ผ์„ ๋“ฃ๊ณ  ๋ฐ˜์‘์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜์˜ ์ผ๋ถ€์ด๋ฉฐ ๋‚˜๋จธ์ง€๋Š” ๊ตฌํ˜„ ์„ธ๋ถ€ ์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ saga๋Š” ์ด๋ฒคํŠธ ๋กœ๊ทธ(๋ฐ ์‹œ๊ฐ„๊ณผ ๊ฐ™์€ ๋‹ค๋ฅธ ์™ธ๋ถ€ ํ•ญ๋ชฉ)๋ฅผ ์ˆ˜์‹ ํ•˜๊ณ  ์ƒˆ๋กœ์šด ๋ช…๋ น/์ด๋ฒคํŠธ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ๋ฐฑ์—”๋“œ ์‹œ์Šคํ…œ์—์„œ ์ด๋ฒคํŠธ๋ฅผ ์žฌ์ƒํ•  ๋•Œ ์ผ๋ฐ˜์ ์œผ๋กœ sagas์— ์˜ํ•ด ํŠธ๋ฆฌ๊ฑฐ๋œ ๋ถ€์ž‘์šฉ ๋น„ํ™œ์„ฑํ™”๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค.

์ฐจ์ด์ ์€ ๋ฐฑ์—”๋“œ ์‹œ์Šคํ…œ์—์„œ saga๋Š” ์ข…์ข… ์‹ค์ œ๋กœ ์ด๋ฒคํŠธ ๋กœ๊ทธ์˜ ํˆฌ์˜์ž…๋‹ˆ๋‹ค. ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•˜๋ ค๋ฉด ์ด๋ฒคํŠธ๋ฅผ ๋‚ด๋ณด๋‚ด๊ณ  ์ž์ฒด์ ์œผ๋กœ ์ˆ˜์‹ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ˜„์žฌ ๊ตฌํ˜„๋˜์–ด ์žˆ๋Š” redux-saga์—์„œ๋Š” saga ์ƒํƒœ๋ฅผ ๋ณต์›ํ•˜๊ธฐ ์œ„ํ•ด ์ด๋ฒคํŠธ ๋กœ๊ทธ๋ฅผ ์žฌ์ƒํ•˜๋Š” ๊ฒƒ์ด ๋” ์–ด๋ ค์šธ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์„œ ๋ฌด์Šจ ์ƒ๊ฐ์„ ํ•˜๊ณ  ์žˆ๋Š”์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๋“œ๋ผ์ด๋ฒ„๊ฐ€ ๋‹ค๋ฅธ ์œ ์šฉํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜์ง€๋งŒ ์ œ์–ด ์ƒํƒœ๋ฅผ ์ œ๊ฑฐํ•˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

์•„๋‹ˆ, ๊ทธ๊ฒƒ์„ ์ œ๊ฑฐํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋Œ€๋ถ€๋ถ„์˜ ๋ชฉ์ ์„ ์œ„ํ•ด ๋‚ด๋ถ€ ๊ตฌํ˜„ ๋ฌธ์ œ๋กœ ๋งŒ๋“œ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์Šคํ† ์–ด์— ๋„๋ฉ”์ธ ์ƒํƒœ๋ฅผ ์ €์žฅํ•˜๋Š” ๊ฒƒ์ด ํฐ ์Šน๋ฆฌ๋ผ๋Š” Redux ์ปค๋ฎค๋‹ˆํ‹ฐ์˜ ๊ฐ•๋ ฅํ•œ ํ•ฉ์˜๊ฐ€ ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค(๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด Redux๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๊ฐ€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?). UI ์ƒํƒœ๋ฅผ ๊ตฌ์„ฑ ์š”์†Œ์— ์บก์Šํ™”ํ•˜๋Š” ๊ฒƒ๊ณผ๋Š” ๋Œ€์กฐ์ ์œผ๋กœ UI ์ƒํƒœ๋ฅผ ์ €์žฅํ•˜๋Š” ๊ฒƒ์ด ์œ ๋ฆฌํ•˜๋‹ค๋Š” ํ•ฉ์˜๋Š” ๋‹ค์†Œ ์ ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ URL(redux-simple-router) ๋˜๋Š” ์–‘์‹ ๋ฐ์ดํ„ฐ์™€ ๊ฐ™์€ ์ €์žฅ์†Œ์˜ ๋ธŒ๋ผ์šฐ์ € ์ƒํƒœ๋ฅผ ๋™๊ธฐํ™”ํ•˜๋Š” ์•„์ด๋””์–ด๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด๊ฒƒ์€ ์Šคํ† ์–ด์— ์žฅ๊ธฐ ์‹คํ–‰ ํ”„๋กœ์„ธ์Šค์˜ ์ƒํƒœ/๋‹จ๊ณ„๋ฅผ ์ €์žฅํ•˜๋Š” ๋งˆ์ง€๋ง‰ ํ”„๋ก ํ‹ฐ์–ด์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์ด ์ ‘์„ ์ด๋ผ๋ฉด ์œ ๊ฐ์ด์ง€๋งŒ ๊ฐœ๋ฐœ์ž ์‚ฌ์šฉ์„ฑ์ด ์ข‹์€ ๋งค์šฐ ์ผ๋ฐ˜์ ์ธ ์ ‘๊ทผ ๋ฐฉ์‹์—๋Š” ๋‹ค์Œ ๊ธฐ๋Šฅ์ด ์žˆ์–ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

  • ์ผ๋ฐ˜ ์‚ฌ์šฉ์ž๊ฐ€ ์ƒ์ ์—์„œ ํšจ๊ณผ๊ฐ€ ํ‘œํ˜„๋˜๋Š” ๋ชจ์–‘์— ๋Œ€ํ•ด ์‹ ๊ฒฝ ์“ฐ์ง€ ์•Š์•„๋„ ๋˜๋„๋ก ๋งŒ๋“œ์‹ญ์‹œ์˜ค. ์ด๋Ÿฌํ•œ ์„ธ๋ถ€ ์ •๋ณด๋ฅผ ์ถ”์ƒํ™”ํ•˜๋Š” ๊ฐ„๋‹จํ•œ API์™€ ์ƒํ˜ธ ์ž‘์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ํšจ๊ณผ๋ฅผ ์‰ฝ๊ฒŒ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ํ๋ฆ„ ์ œ์–ด ๋ฐ ๋‹ค๋ฅธ ํšจ๊ณผ์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง€๋Š” ํšจ๊ณผ์™€ ๊ฐ™์€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์ด ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ๋Š๊ปด์ ธ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ฌผ๋ก  ์ด๊ฒƒ์€ ์ƒ์„ฑ๊ธฐ ์ถ”์ƒํ™”๊ฐ€ ์‹ค์ œ๋กœ ๋น›๋‚˜๋Š” ๊ณณ์ž…๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ์ œ์–ด ํ๋ฆ„์—์„œ ์ž˜ ์ž‘๋™ํ•˜๋ฉฐ ํด๋กœ์ €๋Š” ์ฃผ๋ชฉํ• ๋งŒํ•œ ์˜ˆ์™ธ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ redux-saga ๋˜๋Š” react-redux-controller์—์„œ ์–ผ๋งˆ๋‚˜ ๋ณต์žกํ•œ ๋น„๋™๊ธฐ ํ๋ฆ„์„ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์‰ฝ๊ฒŒ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์›ํ•˜๋Š” ๊ฒฝ์šฐ ํšจ๊ณผ ์ƒํƒœ๊ฐ€ ๋‹ค๋ฅธ ๋งค์žฅ ์†Œ๋น„์ž์—๊ฒŒ ์‰ฝ๊ฒŒ ๋…ธ์ถœ๋  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ์ž์—๊ฒŒ ๋‹ค์ค‘ ํšจ๊ณผ ํ”„๋กœ์„ธ์Šค์˜ ์ƒํƒœ๋ฅผ ํ‘œ์‹œํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ด๊ฒƒ์€ ๋ถ„๋ช…ํ•˜์ง€๋งŒ ์ƒํƒœ๋ฅผ ์บก์Šํ™”ํ•˜๋Š” ๋ชจ๋“  ํ•˜์œ„ ์‹œ์Šคํ…œ์€ ์ž‘์—…์„ ์ „๋‹ฌํ•˜์—ฌ ํ•ด๋‹น ์ƒํƒœ๋ฅผ Redux์™€ ๋™๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ ๋‘ ๋ฒˆ์งธ ์š”์ ์— ๋Œ€ํ•ด์„œ๋Š” redux-saga์™€ ๊ฝค ์œ ์‚ฌํ•œ ๊ฒƒ์ด ์žˆ์–ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. call ๋ž˜ํผ๋กœ ๋‚ด๊ฐ€ ์ƒ๊ฐํ•œ ๊ฒƒ๊ณผ ๊ฑฐ์˜ ๋น„์Šทํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ฌด์šฉ๋‹ด์€ ์–ด๋–ค ์˜๋ฏธ์—์„œ ์ค‘๊ฐ„ ์ƒํƒœ๋กœ ์—ญ์ง๋ ฌํ™”ํ•  ์ˆ˜ ์žˆ๋„๋ก "๋นจ๋ฆฌ ๊ฐ๊ธฐ"๊ฐ€ ๊ฐ€๋Šฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

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

์ง€๊ธˆ์€ ๊ธธ์„ ๋ฒ—์–ด ๋‚ฌ์„ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๊ทธ๋Œ€๋กœ ๋‘๊ฒ ์Šต๋‹ˆ๋‹ค. :)

@acjay ๋‚˜๋Š” ์šฐ๋ฆฌ๊ฐ€ ์ด๋Ÿฌํ•œ ์ ์— ๋Œ€ํ•ด ๋‹น์‹ ๊ณผ ๋™์˜ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋ฌธ์ œ๋Š” ์ด ๋ชจ๋“  ๊ฒƒ์„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ํ•ด๊ฒฐํ•˜๋Š” ์ด ๊ตฌํ˜„์„ ์ฐพ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค :)

ํ•˜์ง€๋งŒ ์ œ๋„ˆ๋ ˆ์ดํ„ฐ๊ฐ€ ์žˆ๋Š” ํ‘œํ˜„ํ˜• API์™€ ์‹œ๊ฐ„ ์—ฌํ–‰ ๋ฐ ์ƒํƒœ ์Šค๋ƒ…์ƒท/๋ณต์› ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋Š” ๊ฒƒ ๋ชจ๋‘ ์–ด๋ ค์šด ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค... ์ œ๋„ˆ๋ ˆ์ดํ„ฐ ์ƒํƒœ๋ฅผ ์‰ฝ๊ฒŒ ๋ณต์›ํ•  ์ˆ˜ ์žˆ๋„๋ก ํšจ๊ณผ์˜ ์‹คํ–‰์„ ๋ฉ”๋ชจํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค...

ํ™•์‹คํ•˜์ง€ ์•Š์ง€๋งŒ ์ด๊ฒƒ์€ while(true) { ... } ์Šคํƒ€์ผ์˜ ๋ฌด์šฉ๋‹ด์„ ๋ฐฐ์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฃจํ”„๋Š” ์ƒํƒœ ์ง„ํ–‰์˜ ๊ฒฐ๊ณผ์ผ ๋ฟ์ž…๋‹ˆ๊นŒ?

@acjay @slorber

๋‚ด๊ฐ€ (https://github.com/yelouafi/redux-saga/issues/22#issuecomment-168872101)์—์„œ ์„ค๋ช…ํ–ˆ๋“ฏ์ด sagas์—์„œ๋Š” ํ˜ผ์ž (์ฆ‰, ํ•ซ ๋ฆฌ๋กœ๋“œ ์—†์ด) ์‹œ๊ฐ„ ์—ฌํ–‰์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ๊ฐ€๋ฅผ ํŠน์ • ์ง€์ ์œผ๋กœ ๊ฐ€์ ธ์˜ค๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ๊ฒƒ์€ ์‹œ์ž‘๋ถ€ํ„ฐ ํ•ด๋‹น ์ง€์ ๊นŒ์ง€์˜ ์ผ๋ จ์˜ ํšจ๊ณผ์™€ ๊ฒฐ๊ณผ(ํ•ด๊ฒฐ ๋˜๋Š” ๊ฑฐ๋ถ€)๋ฟ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ํ•ด๋‹น ์‹œํ€€์Šค๋กœ ๋ฐœ์ „๊ธฐ๋ฅผ ๊ตฌ๋™ํ•ฉ๋‹ˆ๋‹ค.

์‹ค์ œ ๋งˆ์Šคํ„ฐ ๋ธŒ๋žœ์น˜์—์„œ(์•„์ง npm์— ์ถœ์‹œ๋˜์ง€ ์•Š์Œ). Sagas๋Š” ๋ชจ๋‹ˆํ„ฐ๋ง์„ ์ง€์›ํ•˜๋ฉฐ ๋ชจ๋“  ์‚ฐ์ถœ ํšจ๊ณผ์™€ ๊ฒฐ๊ณผ๋ฅผ ์ƒ์ ์— ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ์ œ์–ด ํ๋ฆ„ ๊ทธ๋ž˜ํ”„๋ฅผ ์ถ”์ ํ•˜๊ธฐ ์œ„ํ•œ ๊ณ„์ธต ์ •๋ณด๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

๊ทธ ํšจ๊ณผ ๋กœ๊ทธ๋Š” ์ฃผ์–ด์ง„ ์‹œ์ ๊นŒ์ง€ Saga๋ฅผ ์žฌ์ƒํ•˜๊ธฐ ์œ„ํ•ด ์•…์šฉ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋กœ๊ทธ์— ์ด๋ฏธ ๊ณผ๊ฑฐ ์‘๋‹ต์ด ํฌํ•จ๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ ์‹ค์ œ API ํ˜ธ์ถœ์„ ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

repo ์˜ˆ์ œ ์—๋Š” saga ๋ชจ๋‹ˆํ„ฐ ์˜ {type: 'LOG_EFFECT'} ์„ ์ƒ์ ์— ์ „๋‹ฌํ•˜์—ฌ ํ๋ฆ„์˜ ์ถ”์ ์„ ์ธ์‡„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ์€ ๋น„๋™๊ธฐ ์˜ˆ์ œ์˜ ํšจ๊ณผ ๋กœ๊ทธ ์บก์ฒ˜์ž…๋‹ˆ๋‹ค.

saga-log-async

ํŽธ์ง‘: ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค ๊ณ ์ • ์ด๋ฏธ์ง€ ๋งํฌ

ํฅ๋ฏธ๋กญ๋‹ค! ๊ทธ๋ฆฌ๊ณ  ๊ทธ ๊ฐœ๋ฐœ ๋„๊ตฌ ์ด๋ฏธ์ง€๋Š” _awesome_์ž…๋‹ˆ๋‹ค.

๋ฉ‹์ง€๋„ค์š” :)

์‚ฌ์‹ค, ๊ทธ ์‚ฌ๊ฐ€ ๋ชจ๋‹ˆํ„ฐ๋Š” ๊ฝค ๋ฉ‹์ง€๋‹ค.

์ƒ๊ฐํ•ด๋ณด๋ฉด ์‚ฌ๊ฐ€๋Š” ๋‘ ๊ฐ€์ง€ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ณ  ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ฒซ์งธ, ๋น„๋™๊ธฐ ํšจ๊ณผ๋ฅผ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ๋‘˜์งธ, ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๋ฆฌ๋“€์„œ์—์„œ ์†์œผ๋กœ ์“ด ๋ถˆ์พŒํ•œ ์ƒํƒœ ๋จธ์‹ ์ด ํ•„์š”ํ–ˆ์„ ๋ณต์žกํ•œ ์ƒํƒœ ์ƒํ˜ธ ์ž‘์šฉ์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

๋‚ด ์ ‘๊ทผ ๋ฐฉ์‹์€ ์ฒซ ๋ฒˆ์งธ ๋ฌธ์ œ๋งŒ ๋‹ค๋ฃน๋‹ˆ๋‹ค. ๋‘ ๋ฒˆ์งธ ๋ฌธ์ œ์— ๋Œ€ํ•œ ํ•„์š”์„ฑ์„ ์ฐพ์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. ์•„๋งˆ๋„ ๋‚˜๋Š” ์•„์ง ์‹คํ–‰ํ•˜๊ธฐ์— ์ถฉ๋ถ„ํ•œ redux ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜์ง€ ์•Š์•˜์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์˜ˆ, ํ•˜์ง€๋งŒ ๋‘ ๊ฐ€์ง€ ์•„์ด๋””์–ด๋ฅผ ์œตํ•ฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค. redux-saga์˜ call ๋ž˜ํผ๋Š” ํšจ๊ณผ์— ๋Œ€ํ•œ ๋งค์šฐ ๊ฐ„๋‹จํ•œ ์ˆ˜์ค€์˜ ๊ฐ„์ ‘ ์ฐธ์กฐ์ด์ง€๋งŒ ๋‹ค์–‘ํ•œ ์œ ํ˜•์˜ ํšจ๊ณผ์— ๋Œ€ํ•œ ๋“œ๋ผ์ด๋ฒ„๋กœ ๋ฏธ๋“ค์›จ์–ด๋ฅผ ์ดˆ๊ธฐํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋ฉด ํ•ด๋‹น ํšจ๊ณผ๋ฅผ ํ•จ์ˆ˜์—์„œ ๋ถ„๋ฆฌ๋œ JSONable ๋ฐ์ดํ„ฐ๋กœ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ ํ˜ธ์ถœ๋˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋“œ๋ผ์ด๋ฒ„๋Š” ๊ธฐ๋ณธ ์ƒํƒœ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ €์žฅ์†Œ๋กœ ์ „๋‹ฌํ•˜๋Š” ์„ธ๋ถ€ ์‚ฌํ•ญ์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

์‹ค์ œ์ ์ธ ์ด์ ์€ ๊ฑฐ์˜ ์—†์ง€๋งŒ ๋ณต์žก์„ฑ์ด ๋งŽ์ด ์ถ”๊ฐ€๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด ์ƒ๊ฐ์˜ ์„ ์„ ๋๊นŒ์ง€ ๋”ฐ๋ฅด๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

์ข‹์•„, ๋‚˜๋Š” ๋” ๋งŽ์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋งŒ๋“ค๊ณ  ๊ทธ๊ฒƒ์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์‹ค์ œ ์˜ˆ์ œ๋ฅผ ์ด์‹ํ–ˆ๋‹ค.

์ฒซ์งธ, ๋ฐ˜์‘ ๊ตฌํ˜„์ด ์žˆ์Šต๋‹ˆ๋‹ค.
https://github.com/winstonewert/redux-reactions/blob/master/src/index.js
์ธํ„ฐํŽ˜์ด์Šค๋Š” ์„ธ ๊ฐ€์ง€ ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. startReactions๋Š” ์ €์žฅ์†Œ, ๋ฐ˜์‘ ๊ธฐ๋Šฅ ๋ฐ ์ด๋ฆ„์—์„œ ๋“œ๋ผ์ด๋ฒ„๋กœ์˜ ๋งคํ•‘์„ ์ทจํ•ฉ๋‹ˆ๋‹ค. fromEmitter์™€ fromPromiseFactory๋Š” ๋ชจ๋‘ ๋“œ๋ผ์ด๋ฒ„๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์—์„œ ์˜ˆ์ œ๋Š” ์‹œ์Šคํ…œ์„ ํ™œ์„ฑํ™”ํ•˜๊ธฐ ์œ„ํ•ด startReactions๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค:
https://github.com/winstonewert/redux-reactions/blob/master/examples/real-world/store/configureStore.dev.js#L28

๋ฐ˜์‘์˜ ๊ธฐ๋ณธ ๊ตฌ์„ฑ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
https://github.com/winstonewert/redux-reactions/blob/master/examples/real-world/reactions/index.js.
๋ฐ˜์‘ ํ•จ์ˆ˜๋Š” ์‹ค์ œ๋กœ ํ•ด๋‹น ํŽ˜์ด์ง€์— ๋Œ€ํ•ด ์‹ค์ œ๋กœ ํ•„์š”ํ•œ ๋ฐ˜์‘์„ ํŒŒ์•…ํ•˜๊ธฐ ์œ„ํ•ด ๋ฐ˜์‘() ํ•จ์ˆ˜๊ฐ€ ์žˆ๋Š” ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ์ฐพ๋Š” ๋ฐ˜์‘ ๋ผ์šฐํ„ฐ ์ธ์Šคํ„ด์Šคํ™” ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ๋ฐ˜๋ณตํ•ฉ๋‹ˆ๋‹ค.

github api ๋ฐ˜์‘ ์œ ํ˜•์˜ ๊ตฌํ˜„์€ https://github.com/winstonewert/redux-reactions/blob/master/examples/real-world/reactions/api.js์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋Œ€๋ถ€๋ถ„ ์›๋ณธ ์˜ˆ์ œ์—์„œ ์‚ฌ์šฉ๋œ ๋ฏธ๋“ค์›จ์–ด์—์„œ ๋ณต์‚ฌ/๋ถ™์—ฌ๋„ฃ๊ธฐ์ž…๋‹ˆ๋‹ค. ์ค‘์š”ํ•œ ์ ์€ https://github.com/winstonewert/redux-reactions/blob/master/examples/real-world/reactions/api.js#L79 ์ž…๋‹ˆ๋‹ค . ์—ฌ๊ธฐ์„œ fromPromiseFactory๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ํ•จ์ˆ˜์—์„œ ๋“œ๋ผ์ด๋ฒ„๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์•ฝ์†์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

๊ตฌ์„ฑ ์š”์†Œ๋ณ„ ๋ฐ˜์‘ ๊ธฐ๋Šฅ์€ https://github.com/winstonewert/redux-reactions/blob/master/examples/real-world/containers/RepoPage.js#L80์—์„œ ํ™•์ธํ•˜์„ธ์š”.

๋ฐ˜์‘ ์ƒ์„ฑ์ž์™€ ๊ณตํ†ต ๋…ผ๋ฆฌ๋Š” https://github.com/winstonewert/redux-reactions/blob/master/examples/real-world/reactions/data.js ์—

์•ˆ๋…•ํ•˜์„ธ์š” ์—ฌ๋Ÿฌ๋ถ„! Raise๋Š” Elm ์•„ํ‚คํ…์ฒ˜์™€ ์œ ์‚ฌํ•œ ํšจ๊ณผ ์‹œ์Šคํ…œ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์Šคํ† ์–ด ์ธํ•ธ์„œ๋ฅผ ์ถœ์‹œํ–ˆ์Šต๋‹ˆ๋‹ค! ์•ž์œผ๋กœ ์ปค๋ฎค๋‹ˆํ‹ฐ์˜ ๋ชจ๋“  ์š”๊ตฌ ์‚ฌํ•ญ์„ ์ถฉ์กฑํ•˜๊ธฐ ์œ„ํ•ด ์ด๋Ÿฌํ•œ ๋ชจ๋“  ์ ‘๊ทผ ๋ฐฉ์‹์„ ๋ฐฐ์šฐ๊ณ  ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

https://github.com/raisemarketplace/redux-loop

ํ† ๋ก ์— ๊ด€์‹ฌ์ด ์žˆ๋Š” ์‚ฌ๋žŒ์€ ์—ฌ๊ธฐ์—์„œ ๋‚ด ์•„์ด๋””์–ด์— ๋Œ€ํ•œ ์ถ”๊ฐ€ ํ† ๋ก ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. https://github.com/winstonewert/redux-reactions/issues/7

์—ฌ๊ธฐ์—์„œ ๋‚ด ํŒจํ„ด์„ ์‚ฌ์šฉํ•˜์—ฌ ๋” elmish๊ฐ€ ๋˜๋„๋ก ์นด์šดํ„ฐ ์•ฑ์„ ์žฌ์ž‘์—…ํ•œ ๋ถ„๊ธฐ๋ฅผ ๋ณผ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
https://github.com/winstonewert/redux-reactions/tree/elmish/examples/counter

๋‚˜๋Š” ๋˜ํ•œ ์—ฌ๊ธฐ์—์„œ ์‚ฌ์šฉ๋œ ์ ‘๊ทผ ๋ฐฉ์‹์„ ์žฌ๋ฐœ๋ช…ํ•˜๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค: https://github.com/ccorcos/elmish

@yelouafi , ์‚ฌ๊ฐ€ ๋ชจ๋‹ˆํ„ฐ ์•„์ด๋””์–ด์— ๋Œ€ํ•œ ๋งํฌ๋ฅผ ๋‹ค์‹œ ๊ฒŒ์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ์ •๋ง ์ข‹์€ ๋ฌผ๊ฑด์ž…๋‹ˆ๋‹ค! ๋งํฌ๊ฐ€ ์ฃฝ์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค(404). ๋” ๋ณด๊ณ  ์‹ถ์–ด์š”!

๊ด€๋ จ ์ƒˆ๋กœ์šด ํ† ๋ก : https://github.com/reactjs/redux/issues/1528

(๊ด€๋ จ๋œ ๊ฒƒ ๊ฐ™์•„์š”. ์ž˜๋ชป๋œ ๊ณณ์ด๋ผ๋ฉด ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค.)

๋ชจ๋“  ํšจ๊ณผ๋ฅผ DOM ๋ Œ๋”๋ง๊ณผ ๋™์ผํ•˜๊ฒŒ ์ทจ๊ธ‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

  1. jQuery ๋Š” ๋ช…๋ นํ˜• ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์žˆ๋Š” DOM ๋“œ๋ผ์ด๋ฒ„์ž…๋‹ˆ๋‹ค. React๋Š” ์„ ์–ธ์  ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์žˆ๋Š” DOM ๋“œ๋ผ์ด๋ฒ„์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ "๊ทธ ๋ฒ„ํŠผ์„ ๋น„ํ™œ์„ฑํ™”ํ•˜์‹ญ์‹œ์˜ค"๋ผ๊ณ  ๋ช…๋ นํ•˜๋Š” ๋Œ€์‹  "์ € ๋ฒ„ํŠผ์„ ๋น„ํ™œ์„ฑํ™”ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค"๋ผ๊ณ  ์„ ์–ธํ•˜๊ณ  ๋“œ๋ผ์ด๋ฒ„๊ฐ€ ์ˆ˜ํ–‰ํ•  DOM ์กฐ์ž‘์„ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค. " GET \product\123 "๋ฅผ ์ฃผ๋ฌธํ•˜๋Š” ๋Œ€์‹  "์šฐ๋ฆฌ๋Š” ํ•ด๋‹น ๋ฐ์ดํ„ฐ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค"๋ผ๊ณ  ์„ ์–ธํ•˜๊ณ  ๋“œ๋ผ์ด๋ฒ„๋Š” ๋ณด๋‚ด๊ฑฐ๋‚˜ ์ทจ์†Œํ•  ์š”์ฒญ์„ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค.
  2. DOM ๋“œ๋ผ์ด๋ฒ„์— ๋Œ€ํ•œ API๋กœ React ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๋“œ๋ผ์ด๋ฒ„์™€๋„ ์ธํ„ฐํŽ˜์ด์Šคํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•ฉ์‹œ๋‹ค.

    • <button ...> - "์ผ๋ฐ˜" React ๊ตฌ์„ฑ ์š”์†Œ์—์„œ View ๋ ˆ์ด์–ด๋ฅผ ๋นŒ๋“œํ•ฉ๋‹ˆ๋‹ค.

    • <Map ...> - "๋ž˜ํผ" ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ผ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๋ช…๋ นํ˜• ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์„ ์–ธ์  ์ธํ„ฐํŽ˜์ด์Šค๋กœ ์ „ํ™˜ํ•ฉ๋‹ˆ๋‹ค. "์ผ๋ฐ˜" ๊ตฌ์„ฑ ์š”์†Œ์™€ ๋™์ผํ•œ ๋ฐฉ์‹์œผ๋กœ ์‚ฌ์šฉํ•˜์ง€๋งŒ ๋‚ด๋ถ€์ ์œผ๋กœ๋Š” ์‹ค์ œ๋กœ ๋“œ๋ผ์ด๋ฒ„์ž…๋‹ˆ๋‹ค.

    • <Chart ...> - ๊ตฌํ˜„์— ๋”ฐ๋ผ ์œ„ ์ค‘ ํ•˜๋‚˜์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ "์ผ๋ฐ˜" ๊ตฌ์„ฑ ์š”์†Œ์™€ ๋“œ๋ผ์ด๋ฒ„ ๊ฐ„์˜ ๊ฒฝ๊ณ„๋Š” ์ด๋ฏธ ๋ชจํ˜ธํ•ฉ๋‹ˆ๋‹ค.

    • <Http url={'/product/'+props.selectedProductId} onSuccess={props.PRODUCT_LOADED} /> (๋˜๋Š” "์Šค๋งˆํŠธ" <Service...> ) - (UI๊ฐ€ ์—†๋Š”) ๋“œ๋ผ์ด๋ฒ„ ๊ตฌ์„ฑ ์š”์†Œ์—์„œ ์„œ๋น„์Šค ๊ณ„์ธต์„ ๊ตฌ์ถ•ํ•ฉ๋‹ˆ๋‹ค.

๋ณด๊ธฐ ๋ฐ ์„œ๋น„์Šค ๊ณ„์ธต์€ ๋ชจ๋‘ React ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ํ†ตํ•ด ์„ค๋ช…๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์šฐ๋ฆฌ์˜ ์ตœ์ƒ์œ„(์—ฐ๊ฒฐ๋œ) ๊ตฌ์„ฑ ์š”์†Œ๋Š” ๊ทธ๊ฒƒ๋“ค์„ ์„œ๋กœ ๋ถ™์ž…๋‹ˆ๋‹ค.
์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋ฆฌ๋“€์„œ๊ฐ€ ์ˆœ์ˆ˜ํ•˜๊ฒŒ ์œ ์ง€๋˜๊ณ  ํšจ๊ณผ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ์ƒˆ๋กœ์šด ์ˆ˜๋‹จ์„ ๋„์ž…ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

new Date ๋˜๋Š” Math.random ๊ฐ€ ์—ฌ๊ธฐ์— ๋งž๋Š”์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.

๋ช…๋ นํ˜• API๋ฅผ ์„ ์–ธ์  API๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ฒƒ์ด ํ•ญ์ƒ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๊นŒ?
์ด๊ฒƒ์ด ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ๊ฒฌํ•ด๋ผ๊ณ  ์ƒ๊ฐํ•˜์‹ญ๋‹ˆ๊นŒ?

๊ฐ์‚ฌ ํ•ด์š”

๋น„๋™๊ธฐ ์ž‘์—…์„ ์œ„ํ•œ saga ๋ฐ ๊ธฐํƒ€ ๋ฉ‹์ง„ ๋„๊ตฌ๊ฐ€ ์žˆ๋‹ค๋Š” ์ ์„ ๊ฐ์•ˆํ•  ๋•Œ ์ง€๊ธˆ ์•ˆ์ „ํ•˜๊ฒŒ ์ข…๋ฃŒํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. #1528์—์„œ ๋ช‡ ๊ฐ€์ง€ ํฅ๋ฏธ๋กœ์šด ์ƒˆ๋กœ์šด ๋ฐฉํ–ฅ์„ ํ™•์ธํ•˜์„ธ์š”(๋น„๋™๊ธฐ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ).

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰