๐Ÿ–ฅFrontEnd/Redux

TIL) ๋ฆฌ๋•์Šค ๊ธฐ์ดˆ, ๋ฆฌ๋•์Šค ์ž‘๋™ ๋ฐฉ์‹ ์ •๋ฆฌ, ์™œ ๋ฆฌ๋•์Šค๋ฅผ ๋ฐฐ์šธ๊นŒ? ์™œ ๋ฆฌ๋•์Šค๊ฐ€ ๋ฆฌ์•กํŠธ ์ƒํƒœ๊ณ„์—์„œ ์ค‘์š”ํ•˜์ง€? ๋ฆฌ๋•์Šค๋ฅผ ๋ฆฌ์•กํŠธ์—์„œ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•˜์ง€?

hellohailie 2022. 7. 4. 00:39

 

๋ฐฐ์šด์  

1. ์™œ ๋ฆฌ๋•์Šค๋ฅผ ๋ฐฐ์šธ๊นŒ? 

2. ์™œ ๋ฆฌ๋•์Šค๊ฐ€ ๋ฆฌ์•กํŠธ ์ƒํƒœ๊ณ„์—์„œ ์ค‘์š”ํ•˜์ง€?

3. ๋ฆฌ๋•์Šค๋ฅผ ๋ฆฌ์•กํŠธ์—์„œ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•˜์ง€?

 

 


์™œ ๋ฆฌ๋•์Šค๋ฅผ ๋ฐฐ์šธ๊นŒ?

 

๋ฆฌ๋•์Šค๋Š” ํฌ๋กœ์Šค ์ปดํฌ๋„ŒํŠธ ๋˜๋Š” ์•ฑ ์™€์ด๋“œ ์ƒํƒœ๋ฅผ ์œ„ํ•œ ์ƒํƒœ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ์ด๋‹ค. 

์šฐ๋ฆฌ๊ฐ€ ์ƒํƒœ, ์ฆ‰ ์šฐ๋ฆฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ณ€๊ฒฝํ•™ ํ™”๋ฉด์— ํ‘œ์‹œํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•˜๋„๋ก ๋„์™€์ค€๋‹ค. 

 

๋ฆฌ๋•์Šค๋Š” ์šฐ๋ฆฌ๊ฐ€ ๊ทธ๋Ÿฐ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค์ˆ˜์˜ ์ปดํฌ๋„ŒํŠธ๋‚˜ ์‹ฌ์ง€์–ด๋Š” ์•ฑ ์ „์ฒด์—์„œ ๊ด€๋ฆฌํ•˜๋„๋ก ๋„์™€์ค€๋‹ค. 

 

์•ž์—์„œ ๋ฐฐ์šด state๋ฅผ 3๊ฐ€์ง€๋กœ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

 

1. local state : ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€๊ฒฝ๋˜์–ด์„œ ํ•˜๋‚˜์˜ ์ปดํฌ๋„ŒํŠธ์— ์†ํ•˜๋Š” UI์— ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š” ์ƒํƒœ. (useState() ๋‚˜ useReducer() ์‚ฌ์šฉ)

2. cross-component state : ํ•˜๋‚˜์˜ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์•„๋‹ˆ๋ผ ๋‹ค์ˆ˜์˜ ์ปดํฌ๋„ŒํŠธ์— ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š” ์ƒํƒœ. (useState() ๋‚˜ useReducer() ์‚ฌ์šฉ && prop์„ ์ฃผ๋ณ€์— ๋„ฃ์–ด์ฃผ์–ด์•ผ ํ•œ๋‹ค. (prop ์ฒด์ธ ๊ตฌ์ถ• => prop ๋“œ๋ฆด๋ง))

3. app-wide state : ๋‹ค์ˆ˜์˜ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์•„๋‹ˆ๋ผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ชจ๋“  ์ปดํฌ๋„ŒํŠธ์— ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š” ์ƒํƒœ. ex ์‚ฌ์šฉ์ž ์ธ์ฆ (useState() ๋‚˜ useReducer() ์‚ฌ์šฉํ•˜๊ณ , props ์ „์ฒด ์ฃผ๋ณ€์˜ ํ•จ์ˆ˜๋ฅผ ์—…๋ฐ์ดํŠธํ•ด์„œ ๊ทธ๊ฑธ ๊ด€๋ฆฌํ•  ์ˆ˜๋„ ์žˆ๋‹ค. )

 

 

ํฌ๋กœ์Šค ์ปดํฌ๋„ŒํŠธ์™€ ์•ฑ ์™€์ด๋“œ state์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ๊ณ  ์ „์ฒด props ํ•จ์ˆ˜๋ฅผ ์—…๋ฐ์ดํŠธ ํ•˜๋Š” ๊ฒƒ์€ ๋ฒˆ๊ฑฐ๋กœ์šธ ์ˆ˜ ์žˆ๋‹ค.

 

ํฌ๋กœ์Šค ์ปดํฌ๋„ŒํŠธ์™€ ์•ฑ ์™€์ด๋“œ state๋ฅผ ๋‹จ์ˆœํ™” ํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

=> ์ด๊ฑธ ๋ฆฌ์•กํŠธ ์ปจํ…Œ์ŠคํŠธ๊ฐ€ ๋ณด์™„ํ•ด์ฃผ๋Š” ์—ญํ• ์„ ํ•œ๋‹ค. 

๋ฆฌ์•กํŠธ ์ปจํ…์ŠคํŠธ๋ฅผ ์“ฐ๋ฉด prop ์ฒด์ธ์ด๋‚˜ prop ๋“œ๋ฆด๋ง์„ ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๊ณ , ๋Œ€์‹ ์— Context์™€ ContextProvider ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค. 

 


์™œ ๋ฆฌ๋•์Šค๊ฐ€ ๋ฆฌ์•กํŠธ ์ƒํƒœ๊ณ„์—์„œ ์ค‘์š”ํ•˜์ง€?
์ด๋ ‡๊ฒŒ ๋‹ค์ˆ˜์˜ ์ปดํฌ๋„ŒํŠธ์— ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š” state๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๋ฆฌ์•กํŠธ ์ปจํ…์ŠคํŠธ๊ฐ€ ์žˆ๋Š”๋ฐ ์™œ ๋ฆฌ๋•์Šค๊นŒ์ง€ ๊ณต๋ถ€ํ•ด์•ผํ• ๊นŒ??

๋ฆฌ์•กํŠธ ์ปจํ…Œ์ŠคํŠธ๋Š” ์ž ์žฌ์ ์ธ ๋‹จ์ ์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค!

 

๋‹จ์  1. ๋ฆฌ์•กํŠธ ์ปจํ…์ŠคํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์„ค์ •์ด ์•„์ฃผ ๋ณต์žกํ•ด์งˆ ์ˆ˜ ์žˆ๊ณ , ๋ฆฌ์•กํŠธ ์ปจํ…์ŠคํŠธ๋ฅผ ์ด์šฉํ•œ ์ƒํƒœ ๊ด€๋ฆฌ๊ฐ€ ๋ณต์žกํ•ด์งˆ ์ˆ˜ ์žˆ๋‹ค.

๋‹ค์ˆ˜์˜ ์ปดํฌ๋„ŒํŠธ๋‚˜ ์ „์ฒด ์•ฑ์— ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š” ๋งŽ์€ ๋‹ค์–‘ํ•œ state๊ฐ€ ์žˆ๋‹ค. ๊ทธ๋ž˜์„œ ๊ทธ๋Ÿฐ state๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ๊ตฌ์ถ•ํ•œ ContextProvider ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋งŽ์ด ์กด์žฌํ•˜๊ฒŒ ๋œ๋‹ค. 

๊ทธ๋Ÿผ ์•„๋ž˜์ฒ˜๋Ÿผ ๋Œ... ๐Ÿ‘‡

 

๋‹จ์  2. ํ…Œ๋งˆ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ฑฐ๋‚˜ ์ธ์ฆ ๊ฐ™์€ ์ €๋นˆ๋„ ์—…๋ฐ์ดํŠธ์—๋Š” ์„ฑ๋Šฅ์ด ์ข‹์ง€๋งŒ, ๋ฐ์ดํ„ฐ๊ฐ€ ์ž์ฃผ ๋ณ€๊ฒฝ๋˜๋Š” ๊ฒฝ์šฐ์—๋Š” ์„ฑ๋Šฅ์ด ์ข‹์ง€ ์•Š๋‹ค. (์œ ๋™์ ์ธ state ํ™•์‚ฐ์„ ๋Œ€์ฒดํ•  ์ˆ˜ ์—†๋‹ค. )

์ด์— ๋ฐ˜ํ•ด ๋ฆฌ๋•์Šค๋Š” ์œ ๋™์ ์ธ ์ƒํƒœ ๊ด€๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋‹ค. 

 

ํ•˜์ง€๋งŒ ์†Œํ˜•, ์ค‘ํ˜• ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐ™์€ ๊ฒฝ์šฐ์—๋Š” ์ด๋Ÿฐ ๋‹จ์ ์ด ์ƒ๊ด€ ์—†์„ ์ˆ˜๋„ ์žˆ๋‹ค. 

 

์•„๋ฌดํŠผ ๋ฆฌ๋•์Šค๋Š” ๋ฆฌ์•กํŠธ ์ปจํ…์ŠคํŠธ์˜ ๋Œ€์•ˆ์ด๋‹ค. 

 


๋ฆฌ๋•์Šค๋ฅผ ๋ฆฌ์•กํŠธ์—์„œ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•˜์ง€?

 

๋ฆฌ๋•์Šค๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์žˆ๋Š” ํ•˜๋‚˜์˜ ์ค‘์•™ ๋ฐ์ดํ„ฐ(state) ์ €์žฅ์†Œ์ด๋‹ค. 

 

์ €์žฅ์†Œ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•ด์„œ ์ปดํฌ๋„ŒํŠธ ์•ˆ์—์„œ ๊ทธ๊ฑธ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. 

์˜ˆ๋ฅผ ๋“ค์–ด, ์‚ฌ์šฉ์ž์˜ ์ธ์ฆ ์ƒํƒœ๊ฐ€ ๋ณ€๊ฒฝ๋˜๋Š” ๋“ฑ ๊ฑฐ๊ธฐ ์žˆ๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฉด ์šฐ๋ฆฌ๋Š” ์ปดํฌ๋„ŒํŠธ์—์„œ ๊ทธ๊ฑธ ์ธ์ง€ํ•ด์„œ ๊ทธ์— ๋งž์ถฐ ๋Œ€์‘ํ•˜๊ณ  UI๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๊ธธ ์›ํ•œ๋‹ค.

 

๋ฐ์ดํ„ฐ ๋ฐ›์•„์˜ค๋Š” ๋ฐฉ๋ฒ•

1. ์ด ์ปดํฌ๋„ŒํŠธ๋ฅผ ์œ„ํ•ด ์šฐ๋ฆฌ ์ค‘์•™ ์ €์žฅ์†Œ์— ๋Œ€ํ•œ ๊ตฌ๋…์„ ์„ค์ •ํ•œ๋‹ค. (subscription)

2. ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ €์žฅ์†Œ๋ฅผ ๊ตฌ๋…ํ•˜๊ณ  ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€๊ฒฝ๋  ๋•Œ๋งˆ๋‹ค ์ €์žฅ์†Œ๊ฐ€ ์ปดํฌ๋„ŒํŠธ์— ์•Œ๋ ค์ค€๋‹ค.

3. ๊ทธ๋Ÿผ ์ปดํฌ๋„ŒํŠธ๋Š” ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›๊ฒŒ ๋˜๊ณ , ๊ทธ๊ฑธ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. (๋ฆฌ๋•์Šค ์ €์žฅ์†Œ์˜ ์ผ๋ถ€๋Š” ๋ฐ›๋Š” ๊ฒƒ์ด๋‹ค. ) ex) ํ˜„์žฌ์˜ ์ธ์ฆ ์ƒํƒœ ๊ฐ™์€ ๊ฒƒ

 

๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝํ•˜๋Š” ๋ฐฉ๋ฒ•

**์ปดํฌ๋„ŒํŠธ๋Š” ์ ˆ๋Œ€๋กœ ์ค‘์š”ํ•˜์ง€ ์•Š๊ณ , ์ ˆ๋Œ€๋กœ ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ง์ ‘ ์กฐ์ž‘ํ•˜์ง€ ์•Š๋Š”๋‹ค. **

๊ทธ๋ž˜์„œ ๊ตฌ๋…์„ ํ•˜๋Š” ๊ฒƒ์ด๊ณ , ๋ฐ์ดํ„ฐ๋Š” ์ ˆ๋Œ€๋กœ ๋ฐ˜๋Œ€ ๋ฐฉํ–ฅ์œผ๋กœ ํ๋ฅด์ง€ ์•Š๋Š”๋‹ค!! (์ ์–ด๋„ ์ง์ ‘์ ์ธ ๋ฐ์ดํ„ฐ ํ๋ฆ„์€ ๊ทธ๋ ‡๋‹ค.)

์ปดํฌ๋„ŒํŠธ๋Š” ์ €์žฅ์†Œ์— ์žˆ๋Š” ๊ทธ ๋ฐ์ดํ„ฐ๋ฅผ ์ง์ ‘ ์กฐ์ž‘ํ•˜์ง€ ์•Š๋Š”๋‹ค. ๋Œ€์‹ , ๋ฆฌ๋“€์„œ๋ผ๋Š” ๊ฐœ๋…์„ ์ด์šฉํ•œ๋‹ค. 

 

๋ฆฌ๋“€์„œ ํ•จ์ˆ˜๋ฅผ ์„ค์ •ํ•ด์•ผ ํ•œ๋‹ค. ์ด ํ•จ์ˆ˜๋Š” ๋ณ€ํ˜•์„ ๋‹ด๋‹นํ•œ๋‹ค. (mutates store data)

**์—ฌ๊ธฐ์„œ์˜ ๋ฆฌ๋“€์„œ ํ•จ์ˆ˜๋Š” useReducer ํ›…๊ณผ๋Š” ๋‹ค๋ฅด๋‹ค**

๋ฆฌ๋“€์„œ ํ•จ์ˆ˜๋Š” ์ž…๋ ฅ์„ ๋ฐ›์•„์„œ ๊ทธ ์ž…๋ ฅ์„ ๋ณ€ํ™˜ํ•˜๊ณ  ์ค„์ด๋Š” ํ•จ์ˆ˜์ด๋‹ค. ex) ์ˆซ์ž๋กœ ๋œ ๋ฆฌ์ŠคํŠธ๋ฅผ ๊ทธ ์ˆซ์ž๋“ค์˜ ํ•ฉ์œผ๋กœ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค. 

๋ฆฌ๋“€์„œ ํ•จ์ˆ˜๋Š” ์ž…๋ ฅ์„ ๋ณ€ํ™˜ํ•ด์„œ ์ƒˆ๋กœ์šด ์ถœ๋ ฅ, ์ƒˆ๋กœ์šด ๊ฒฐ๊ณผ๋ฅผ ๋ฑ‰์–ด๋‚ธ๋‹ค. => ์ผ๋ฐ˜์ ์ธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ฐœ๋…

 

useReducer ๋Š” ํ›…์ด ์‚ฌ์šฉํ•˜๊ณ  ๋ฆฌ๋“€์„œ ํ•จ์ˆ˜๋Š” ๋ฆฌ๋•์Šค๋„ ์‚ฌ์šฉํ•œ๋‹ค. 

 

 

์ปดํฌ๋„ŒํŠธ์™€ ๊ทธ ๋ฆฌ๋“€์„œ ํ•จ์ˆ˜๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•

 

์–ด๋–ค ์ปดํฌ๋„ŒํŠธ์˜ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๋ฉด ๊ทธ๊ฒŒ ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ์„ ํŠธ๋ฆฌ๊ฑฐ ํ•œ๋‹ค. ์ด๊ฑธ ์–ด๋–ป๊ฒŒ ์—ฐ๊ฒฐํ• ๊นŒ??

์ปดํฌ๋„ŒํŠธ๊ฐ€ ์•ก์…˜์„ ๋ฐœ์†กํ•œ๋‹ค. (dispatch)

๊ทธ๋ž˜์„œ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์–ด๋–ค ์•ก์…˜์„ ํŠธ๋ฆฌ๊ฑฐํ•œ๋‹ค๊ณ  ๋งํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋Ÿฐ ์•ก์…˜์€ ๋‹จ์ˆœํ•œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ฐ์ฒด๊ณ , ๊ทธ๊ฒŒ ๋ฆฌ๋“€์„œ๊ฐ€ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•  ์ž‘์—…์„ ์„ค๋ช…ํ•œ๋‹ค. => ๋ฆฌ๋•์Šค๋Š” ๊ทธ ์•ก์…˜์„ ๋ฆฌ๋“€์„œ๋กœ ์ „๋‹ฌํ•˜๊ณ  ์›ํ•˜๋Š” ์ž‘์—…์— ๋Œ€ํ•œ ์„ค๋ช…์„ ์ฝ๊ฒŒ ๋œ๋‹ค. ์ด์–ด์„œ ๊ทธ ์ž‘์—…์„ ๋ฆฌ๋“€์„œ๊ฐ€ ์ˆ˜ํ–‰ํ•˜๊ฒŒ ๋œ๋‹ค. 

 

**๋ฆฌ๋•์Šค ์ž‘๋™ ๋ฐฉ์‹ ์ด ์ •๋ฆฌ**

์ปดํฌ๋„ŒํŠธ๊ฐ€ ์•ก์…˜์„ ๋ฐœ์†กํ•˜๊ณ  ๊ทธ ์•ก์…˜์—๋Š” ์ˆ˜ํ–‰ํ•ด์•ผ ํ•  ์ž‘์—…์ด ์„ค๋ช…๋˜์–ด ์žˆ๋‹ค.

ํ•˜์ง€๋งŒ ๊ทธ๊ฑธ ์ง์ ‘ ํ•˜์ง€ ์•Š๊ณ , ์•ก์…˜๋“ค์„ ๋ฆฌ๋“€์„œ๋กœ ์ „๋‹ฌํ•ด์„œ ๊ทธ ์•ก์…˜์ด ์›ํ•˜๋Š” ๊ฑธ ๋ฆฌ๋“€์„œ๊ฐ€ ํ•˜๊ฒŒ ๋œ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๋‚˜์„œ, ๋ฆฌ๋“€์„œ๋Š” ์ƒˆ๋กœ์šด ์ƒํƒœ(state)๋ฅผ ๋ฑ‰์–ด๋‚ด๊ณ  ๊ทธ๊ฒŒ ์‹ค์ œ๋กœ ๊ทธ ์ค‘์•™ ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ์˜ ๊ธฐ์กด ์ƒํƒœ๋ฅผ ๋Œ€์ฒดํ•˜๊ฒŒ ๋œ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๊ทธ๋Ÿฐ ๊ณผ์ •์ด ์ผ์–ด๋‚˜๊ณ  ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ์˜ ์ƒํƒœ๊ฐ€ ์—…๋ฐ์ดํŠธ ๋˜๋ฉด, ๊ตฌ๋… ์ค‘์ธ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์•Œ๋ฆผ์„ ๋ฐ›๊ฒŒ ๋˜๊ณ , ์ปดํฌ๋„ŒํŠธ๋Š” UI๋ฅผ ์—…๋ฐ์ดํŠธ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜๋Š”๊ฑฐ๋‹ค. 

 

 

 

๐Ÿ˜ƒ ์ž˜๋ชป๋œ ๊ฐœ๋… ์ „๋‹ฌ์ด ์žˆ๋‹ค๋ฉด ๋Œ“๊ธ€ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ์ €์˜ ์„ฑ์žฅ์— ํฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค๐Ÿค“