๐Ÿ–ฅFrontEnd/Redux

์ „์—ญ ์ƒํƒœ์™€ ์ง€์—ญ ์ƒํƒœ ๊ตฌ๋ถ„์„ ํ•ด๋ณด์ž

hellohailie 2022. 10. 11. 17:09

 

ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด์„œ ๊ตณ์ด ์ „์—ญ์œผ๋กœ ๊ด€๋ฆฌํ•˜์ง€ ์•Š์•„๋„ ๋˜๋Š” ์ƒํƒœ๋ฅผ ์ „์—ญ์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ณ  ์žˆ์Œ์„ ๊นจ๋‹ซ๊ณ  ์ „์—ญ ์ƒํƒœ์™€ ์ง€์—ญ ์ƒํƒœ๋ฅผ ๊ณต๋ถ€ํ•˜๋˜ ์ค‘ ์ •๋ฆฌํ•˜๋Š” ๊ธ€์ž…๋‹ˆ๋‹ค. 

 

์ „์—ญ์œผ๋กœ ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ๋Œ€ํ‘œ์ ์ธ ํˆด๋กœ Redux, Redux toolkit์ด ์žˆ์Šต๋‹ˆ๋‹ค. 

์ €๋Š” ์ด๋ฒˆ ํ”„๋กœ์ ํŠธ์—์„œ Zustand๋ผ๋Š” ํˆด๋กœ ์ƒํƒœ๋ฅผ ์ „์—ญ์œผ๋กœ ๊ด€๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค. 

 

์ œ๊ฐ€ ์‚ฌ์šฉํ•œ Zustand์— ๋Œ€ํ•ด์„œ ๊ฐ„๋‹จํ•˜๊ฒŒ ์†Œ๊ฐœํ•˜์ž๋ฉด, Redux, Redux toolkit, context API ๋“ฑ๊ณผ ๋น„๊ตํ•˜๋ฉด ์‚ฌ์šฉํ•˜๊ธฐ ์ •๋ง ์‰ฝ๊ณ , Provider๋กœ ๊ฐ์‹ธ์ฃผ์ง€ ์•Š์•„๋„ ๋˜์„œ ๋ถˆํ•„์š”ํ•œ ๋ Œ๋”๋ง์„ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. Zustand ์‚ฌ์šฉ๋ฒ•์— ๋Œ€ํ•ด์„œ๋Š” ๋‹ค๋ฅธ ํฌ์ŠคํŒ…์— ์ •๋ฆฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. 

 


๐Ÿ’ก์ „์—ญ ์ƒํƒœ๋ž€?

๋ฌธ์„œ์˜ ์–ด๋–ค ๊ณณ์—์„œ๋„ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ์˜์—ญ์„ ๋งํ•ฉ๋‹ˆ๋‹ค. 

๋”ฐ๋ผ์„œ ์–ด๋–ค ์ƒํƒœ๊ฐ€ ์ „์—ญ์œผ๋กœ ๊ด€๋ฆฌ๋˜๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์€ ํ•ด๋‹น ์ปดํฌ๋„ŒํŠธ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์™ธ๋ถ€ ์ปดํฌ๋„ŒํŠธ ์–ด๋””์—์„œ๋“ ์ง€ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. 

 

 ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ตฌ์„ฑํ•˜๊ณ  ์žˆ๋Š” ์ฝ”๋“œ ์–ด๋””์—์„œ๋“ ์ง€ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๋ฉฐ, ๋ณ€ํ™”์— ๋”ฐ๋ผ ๋ Œ๋”๋ง์— ์˜ํ–ฅ์„ ์ค˜์•ผํ•˜๋Š” ๊ฐ’

 

 


ํ”„๋ก ํŠธ์—”๋“œ์—์„œ ๊ด€๋ฆฌํ•˜๋Š” ์ƒํƒœ๋Š” ํฌ๊ฒŒ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. 

 

1. ์™ธ๋ถ€์—์„œ ๋ฐ›๋Š” ๋™์ ์ธ ๋ฐ์ดํ„ฐ (ex. server response)

2. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ UI ์ƒํƒœ (ex. ๋‹คํฌ๋ชจ๋“œ, ๋ชจ๋‹ฌ)

 

 

๐Ÿ’ก๋‚ด๊ฐ€ ํ”„๋กœ์ ํŠธ์—์„œ ์ „์—ญ ์ƒํƒœ๋ฅผ ์‚ฌ์šฉํ•œ ์˜ˆ์‹œ

 

์ €๋Š” ํšŒ์›๊ฐ€์ž…, ๋กœ๊ทธ์ธ ํŒŒํŠธ๋ฅผ ๋งก์œผ๋ฉด์„œ ํŠน์ • ์ •๋ณด๋ฅผ ์ž…๋ ฅํ•œ ์œ ์ €์˜ ๊ฒฝ์šฐ ํŠน์ • ํŽ˜์ด์ง€๋ฅผ ๋‹ค์‹œ ๋ Œ๋”๋งํ•  ํ•„์š”๊ฐ€ ์—†๋„๋ก ํ•ด์•ผ๋งŒ ํ–ˆ์Šต๋‹ˆ๋‹ค. 

์˜ˆ๋ฅผ ๋“ค๋ฉด ์ตœ์ดˆ ํšŒ์›๊ฐ€์ž…ํ•œ ์œ ์ €์˜ ๊ฒฝ์šฐ, ๋กœ๊ทธ์ธ ํ›„ ๊ฒฌ์ฃผ ์ธ์ฆ ํŽ˜์ด์ง€๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ, ๊ฒฌ์ฃผ ์ธ์ฆ์„ ์™„๋ฃŒํ•œ ์œ ์ €์˜ ๊ฒฝ์šฐ, ๊ทธ ์œ ์ €๊ฐ€ ๋‹ค์‹œ ๋กœ๊ทธ์ธํ•˜๋”๋ผ๋„ ๊ฒฌ์ฃผ ์ธ์ฆ ํŽ˜์ด์ง€๋ฅผ ๋ณด์—ฌ์ฃผ๋ฉด ์•ˆ๋ฉ๋‹ˆ๋‹ค. 

 

์ด๋ฅผ ์œ„ํ•ด์„œ ๋กœ๊ทธ์ธ ํ›„ (ํ† ํฐ์„ ๋ฐœ๊ธ‰๋ฐ›์€ ํ›„) ํšŒ์›์ •๋ณด๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ํ•ด๋‹น ์œ ์ €์˜ ๋‹‰๋„ค์ž„๊ณผ ๊ฒฌ์ฃผ์ธ์ฆ ์œ ๋ฌด๋ฅผ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค. 

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

 


๐Ÿ’ก์ „์—ญ ์ƒํƒœ๋ฅผ ์“ฐ๋Š” ์ด์œ ?!

 

์ƒํƒœ๋ฅผ ์ „์—ญ์œผ๋กœ ์“ฐ์ง€ ์•Š๋Š”๋‹ค๋ฉด? 

1. ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค. 

2. ๋ฐ์ดํ„ฐ๋ฅผ ํ˜ธ์ถœํ•œ ์ปดํฌ๋„ŒํŠธ์˜ state๋กœ ์ •์˜ํ•œ๋‹ค. 

3. ์ด state๋ฅผ ํ•„์š”ํ•œ ์ปดํฌ๋„ŒํŠธ๋กœ props๋กœ ์ „๋‹ฌํ•œ๋‹ค. 

๐Ÿ‘‰ ์ƒํƒœ๋ฅผ ๊ตณ์ด ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„๋„ ๋˜๋Š” ๊ณณ์ด๋”๋ผ๋„ props๋กœ ์ „๋‹ฌํ•ด์•ผํ•  ์ˆ˜๋„ ์žˆ๋‹ค. 

 

์ƒํƒœ๋ฅผ ์ „์—ญ์œผ๋กœ ์“ด๋‹ค๋ฉด?

1. ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค. 

2. ๋ฐ์ดํ„ฐ๋ฅผ ์ „์—ญ์œผ๋กœ ์ €์žฅํ•œ๋‹ค. 

3. ์ƒํƒœ๊ด€๋ฆฌ store์— ์ ‘๊ทผํ•˜์—ฌ ์›ํ•˜๋Š” ๊ฐ’์„ ๊ฐ€์ ธ์™€์„œ ์“ฐ๊ธฐ๋งŒ ํ•˜๋ฉด ๋œ๋‹ค.

๐Ÿ‘‰ ์ปดํฌ๋„ŒํŠธ์˜ ๊ตฌ์กฐ ๋ณ€๊ฒฝ์—๋„ ์ž์œ ๋กœ์›Œ์ง€๊ณ  ์ฝ”๋“œ๊ฐ€ ํ›จ์”ฌ ๊น”๋”ํ•ด์ง„๋‹ค. 

 

โš ๏ธ ๋ถˆํ•„์š”ํ•œ ๋„คํŠธ์›Œํฌ ๋น„์šฉ์„ ์ค„์ด๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ์‹œ์ ์— ๋ฐ์ดํ„ฐ๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๊ณ , ์ „์—ญ์œผ๋กœ ๊ด€๋ฆฌํ•  ํ•„์š”๊ฐ€ ์žˆ๋‹ค๋ฉด ์ „์—ญ์œผ๋กœ ๊ด€๋ฆฌํ•˜์ž! โš ๏ธ

 


์ด๊ฑธ ๋‹ค์‹œ ์ƒ๊ฐํ•ด๋ณด์ž!

 

Redux์—์„œ ์„œ๋ฒ„ ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•˜๋ฉด ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•˜๋Š” ์‹œ์ ์— ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ์Œ์„ ๋ณด์žฅํ•  ์ˆ˜ ์—†๊ฒŒ ๋œ๋‹ค.

๋˜ํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํฌ๊ธฐ๊ฐ€ ์ปค์ง€๋ฉด ์ปค์งˆ์ˆ˜๋ก ๋ฐ์ดํ„ฐ์˜ ํ๋ฆ„์„ ๋”ฐ๋ผ๊ฐ€๊ธฐ ํž˜๋“ค๊ฒŒ ๋œ๋‹ค.

 


 

์ •๋ฆฌ

=> ๊ฐœ๋ฐœ์ž๋งˆ๋‹ค api ํ˜ธ์ถœํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์—ญ์œผ๋กœ ๊ด€๋ฆฌํ•ด์•ผํ•˜๋Š”์ง€์— ๋Œ€ํ•œ ๊ฒฌํ•ด๋Š” ๋‹ค๋ฅด๋‹ค. 

๋‚ด๊ฐ€ ์ƒ๊ฐํ•˜๊ธฐ์—๋Š” ๊ตณ์ด ์ „์—ญ์œผ๋กœ ๊ด€๋ฆฌํ•˜์ง€ ์•Š์•„๋„ ๋˜๋Š” ๋ฐ์ดํ„ฐ์˜ ๊ฒฝ์šฐ์—๋Š” ์ง€์—ญ์ ์œผ๋กœ๋งŒ ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•ด๋„ ์ถฉ๋ถ„ํ•˜๊ธฐ์— ๊ตฌ๋ถ„ํ•ด์„œ ์‚ฌ์šฉํ•ด๋ณด์ž!

 

 


์ฐธ๊ณ  ์ž๋ฃŒ)

https://jbee.io/react/thinking-about-global-state/

 

์ „์—ญ ์ƒํƒœ ๊ด€๋ฆฌ์— ๋Œ€ํ•œ ๋‹จ์ƒ (stale-while-revalidate)

์ด ๊ธ€์˜ ๋ถ€์ œ๋Š” Stop Using Redux for Caching for API Response์ด๋‹ค. ํ•œ ๋•Œ ์ „์—ญ ์ƒํƒœ ๊ด€๋ฆฌ ๋„๊ตฌ๋กœ Redux๋ฅผ ์ฆ๊ฒจ์ผ๋˜ ๊ฐœ๋ฐœ์ž๋กœ์„œ ์ด์ œ ๋”์ด์ƒ Redux๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ฒŒ ๋œ ์ด์œ ์™€ ํšŒ๊ณ ๋ฅผ ๋‹ด์€ ๊ธ€์ด๋‹ค. Table of Contents

jbee.io

 

https://www.reddit.com/r/reactjs/comments/k6m35q/when_should_you_store_data_in_global_state_eg/

 

When should you store data in global state e.g. Context and Redux

I've been learning React by myself the past few months and I don't fully understand when to store data in the global state except for...

www.reddit.com

 

 

 

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