๐Ÿ”‘React์˜ ์ƒํƒœ๊ด€๋ฆฌ๋ž€ ๋ฌด์—‡์ธ๊ฐ€?

Seunggyu Jungยท2023๋…„ 6์›” 12์ผ
0
post-thumbnail

๋ชฉ์ฐจ

1. ์ฃผ์ œ ์„ ์ • ์ด์œ 

2. ์ƒํƒœ๊ด€๋ฆฌ๋ž€

  • ์ƒํƒœ๊ด€๋ฆฌ์˜ ์ •์˜
  • ์ƒํƒœ์˜ ์ข…๋ฅ˜

3. React์˜ ์ƒํƒœ๊ด€๋ฆฌ

  • Context API
  • Redux
  • Reacoil ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

1. ์ฃผ์ œ ์„ ์ • ์ด์œ 

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


2. ์ƒํƒœ๊ด€๋ฆฌ๋ž€

2-1. ์ƒํƒœ๊ด€๋ฆฌ์˜ ์ •์˜

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

2-2. ์ƒํƒœ์˜ ์ข…๋ฅ˜

  • ์ง€์—ญ์ƒํƒœ(localState) : ํŠน์ • ์ปดํผ๋„ŒํŠธ ์•ˆ์—์„œ๋งŒ ๊ด€๋ฆฌ๋˜๋Š” ์ƒํƒœ๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ์ด๋Š” ์ฃผ๋กœ ์ž‘์€ ํ”„๋กœ์ ํŠธ์ฒ˜๋Ÿผ ์ข์€ ์˜์—ญ์—์„œ๋งŒ ๊ด€๋ฆฌ๋˜๋Š” ๋ฐ์ดํ„ฐ๋“ค์ด๋‹ค.

  • ์ปดํผ๋„ŒํŠธ ๊ฐ„ ์ƒํƒœ: ๋‹ค์ˆ˜์˜ ์ปดํผ๋„ŒํŠธ์—์„œ ์‚ฌ์šฉ๋˜๊ณ  ์˜ํ–ฅ์„ ์ฃผ๋Š” ๋ฐ์ดํ„ฐ๋“ค์„ ์˜๋ฏธํ•œ๋‹ค. ๋Œ€ํ‘œ์ ์ธ ์˜ˆ์‹œ๋กœ ์—ฌ๋Ÿฌ ์ปดํผ๋„ŒํŠธ๊ฐ€ ๋™์‹œ์— ์‚ฌ์šฉํ•˜๋Š” ๋ชจ๋‹ฌ์ฐฝ ๋“ฑ์ด ์žˆ๋‹ค.
    2๊ฐœ ์ด์ƒ์˜ ์ปดํผ๋„ŒํŠธ๊ฐ„์— ์ƒํƒœ๋ฅผ ์ฃผ๊ณ  ๋ฐ›์„ ๊ฒฝ์šฐ, ์ƒ์œ„ ์ปดํผ๋„ŒํŠธ์—์„œ ํ•˜์œ„ ์ปดํผ๋„ŒํŠธ๋กœ๋งŒ ์ƒํƒœ๋ฅผ ์ „๋‹ฌํ•˜๋ฉฐ, ์ด๋ฅผ Props Driling์ด๋ผ ํ•œ๋‹ค.

  • ์ „์—ญ ์ƒํƒœ(globalState) : ํ”„๋กœ์ ํŠธ ์ „์ฒด์— ์˜ํ–ฅ์„ ๋ผ์น˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ๋Œ€ํ‘œ์ ์ธ ์˜ˆ๋กœ, ๋ชจ๋“  ์ปดํผ๋„ŒํŠธ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ํŽ˜์ด์ง€์˜ ํ—ค๋” ์ปดํผ๋„ŒํŠธ ๋“ฑ์ด ์žˆ๋‹ค.

  • ์ƒํƒœ๊ด€๋ฆฌ๊ฐ€ ํ•„์š”ํ•œ ์ด์œ : ๊ฑฑ ์ปดํผ๋„ŒํŠธ๊ฐ€ ๋ถ€๋ชจ์ž์‹ ๊ด€๊ณ„๋กœ ๋˜์–ด์žˆ์ง€ ์•Š์€ ์ด์ƒ ๊ฐ ์ปดํผ๋„ŒํŠธ๊ฐ„์˜ ์ง์ ‘์ ์ธ ๋ฐ์ดํ„ฐ ์ „๋‹ฌ์€ ์–ด๋ ต์šฐ๋ฉฐ, ๊ตฌ์กฐ๊ฐ€ ๋ณต์žกํ•˜์—ฌ Props Driling์ด ๋งŽ์•„์ง€๋ฉด Props์˜ ์ถœ์ฒ˜๋ฅผ ์ฐพ๊ธฐ ์–ด๋ ค์›Œ๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ฅผ ๊ด€๋ฆฌํ•ด์ค˜์•ผ ํ•œ๋‹ค.

3. React์˜ ์ƒํƒœ๊ด€๋ฆฌ

3-1. Context API

  • Context API : React ์ปดํฌ๋„ŒํŠธ ํŠธ๋ฆฌ ์•ˆ์—์„œ ์ „์—ญ ์ƒํƒœ๋ฅผ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“ค์–ด์ง„ ๋ฐฉ๋ฒ•์ด๋‹ค.
    ๋ช…์นญ์€ API์ด๊ธฐ๋Š” ํ•˜์ง€๋งŒ, ์‹ค์งˆ์ ์ธ ๊ด€๋ฆฌ๋Š” API๊ฐ€ ์•„๋‹ˆ๋ผ useState๋ฅผ ํ†ตํ•ด ์ด๋ฃจ์–ด์ง„๋‹ค.

  • useState() :
    cosnt [state, setState] = useState()์˜ ํ˜•ํƒœ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋‹ค.
    ์•ž์—์„œ์„œ๋ถ€ํ„ฐ state๋ผ๋Š” ์ƒํƒœ๋ณ€์ˆ˜์™€ ์ƒํƒœ์— ๋ณ€ํ™”๋ฅผ ์ฃผ๋Š” setState๋ผ๋Š” ํ•จ์ˆ˜๊ฐ€ ์žˆ๋‹ค. useState()์˜ ํŒŒ๋ผ๋ฏธํ„ฐ์—๋Š” ์ดˆ๊ธฐ state๊ฐ’์ด ๋“ค์–ด๊ฐ€๋ฉฐ, ์ดํ›„ setState๋ฅผ ํ†ตํ•ด state์˜ ๊ฐ’์— ๋ณ€ํ™”๋ฅผ ์ฃผ๋Š” ๋ฐฉ์‹์œผ๋กœ ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•œ๋‹ค.
    useState()๋Š” ์ƒํƒœ๋ฅผ ์ƒˆ๋กœ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์‚ญ์ œํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋‹จ์ˆœ ๋น„๊ต๋ฅผ ํ†ตํ•ด ์ƒํƒœ๋ฅผ ์—…๋ฐ์ดํŠธ ์‹œํ‚ค๋Š” ์›๋ฆฌ๋กœ ์ž‘๋™ํ•œ๋‹ค.
    ์ฆ‰, ๋™์ผํ•œ ๋ฐ์ดํ„ฐ์˜ key๊ฐ’์ด๋ฉด ํ‚ค์˜ value๊ฐ’์˜ ์ฐจ์ด๋ฅผ ๋น„๊ตํ•˜์—ฌ ์ตœ์‹ ์˜ value๊ฐ’์œผ๋กœ ๊ฐฑ์‹ ํ•˜๋ฉฐ ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•œ๋‹ค.
    ์ด๋Š” ์ค‘๊ฐ„์— ์žˆ๋Š” ์š”์†Œ๋“ค์—๊ฒŒ props๋ฅผ ๋„˜๊ธฐ์ง€ ์•Š๊ณ ๋„ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ๋‹ค ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ธฐ์— props Drilling์„ ํ”ผํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ฃผ๋กœ ์ „์—ญ์ ์œผ๋กœ ์“ฐ์ด๋Š” ๋ฐ์ดํ„ฐ๋“ค์„ ์‚ฌ์šฉํ•  ๋•Œ ์ž์ฃผ ์‚ฌ์šฉ๋œ๋‹ค.

  • useEffect() :

  • context API์˜ ๊ตฌ์กฐ : context, provider, comsumer ๋กœ ๊ตฌ์„ฑ
    context : ์ „์—ญ์ƒํƒœ๋ฅผ ์ €์žฅํ•˜๋Š” ๊ณณ์œผ๋กœ , ๋‚ด๋ถ€์—๋Š” provider์™€ consumer๋กœ ๊ตฌ์„ฑ๋˜์–ด์žˆ๋‹ค.
    provider : ์ „์—ญ์ƒํƒœ๋ฅผ ์ œ๊ณตํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค. ์ฃผ๋กœ Root Component(index.js / app.js)์—์„œ ์ •์˜๋œ๋‹ค.
    consumer ์ œ๊ณต๋ฐ›์€ ์ „์—ญ์ƒํƒœ๋ฅผ ๋ฐ›์•„์„œ ์‚ฌ์šฉํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.

3-2. Redux

  • Redux : ๊ณต์‹ ๋ฌธ์„œ์— ๋”ฐ๋ฅด๋ฉด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์•ฑ์„ ์œ„ํ•œ ์˜ˆ์ธก ๊ฐ€๋Šฅํ•œ ์ƒํƒœ ์ปจํ…Œ์ด๋„ˆ๋ผ๊ณ  ์ •์˜ํ•œ๋‹ค.
    ์ด๋ฅผ ํ’€์–ด ์„ค๋ช…ํ•˜๋ฉด, ์ „์—ญ ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๋„๊ตฌ, ์ฆ‰, ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ „์ฒด์— ๋Œ€ํ•œ ์ค‘์•™ ์ €์žฅ์†Œ ์—ญํ• ์„ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.

  • 'Store','Action', 'Reducer'๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋‹ค.
    Store๋Š” ์ „์—ญ์ƒํƒœ๋ฅผ ์ €์žฅํ•˜๋Š” ์ €์žฅ์†Œ ์—ญํ• ์„ ํ•˜๋ฉฐ, ์˜ค์ง Reducer๋ฅผ ํ†ตํ•ด์„œ๋งŒ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ์ฃผ๋กœ index.js์— ์ •์˜๋˜๋ฉฐ Store๋Š” ์˜ค์ง 1๊ฐœ๋งŒ ์กด์žฌํ•  ์ˆ˜ ์žˆ๋‹ค.
    Action์€ Store์— ์ €์žฅ๋œ ์ƒํƒœ์˜ ๋ณ€ํ™”๋ฅผ Reducer์— ๋ช…๋ นํ•˜๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ฐ์ฒด์ด๋‹ค. ๋ณ€ํ™”๋ฅผ ์ฃผ๊ธฐ ์œ„ํ•ด dispatch๋ผ๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Reducer์—๊ฒŒ ์ „๋‹ฌ๋œ๋‹ค.
    Reducer๋Š” ๋ณ€ํ™”๋ฅผ ๊ฐ์ง€ํ•˜์—ฌ ์ƒํƒœ๋ฅผ ๋ณ€ํ™”์‹œํ‚ค๋Š” ์—ญํ• ์„ ํ•˜๋Š” ์ˆœ์ˆ˜ํ•จ์ˆ˜๋กœ์„œ, ์ „์—ญ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ณ  ์—…๋ฐ์ดํŠธ์‹œํ‚จ๋‹ค. ๋ฐ”๋‹๋ผ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ '์ด๋ฒคํŠธ๋ฆฌ์Šค๋„ˆ'์™€ ๋™์ผํ•œ ์—ญํ• ์„ ํ•œ๋‹ค๊ณ  ํŒŒ์•…ํ•ด๋„ ์ข‹๋‹ค.
    ๋‹ค๋งŒ, Redux์˜ ๊ฒฝ์šฐ, ์ƒํƒœ๊ด€๋ฆฌ๋ฅผ ํ•  ๋•Œ, ์ด์ „์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝ์‹œํ‚ค๋Š” ๊ฒƒ์ด ์•„๋‹Œ ์ƒˆ๋กœ์šด ์ƒํƒœ์˜ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ๋ฐ˜ํ™˜ํ•œ๋‹ค๋Š” ์ ์„ ๋ช…์‹œํ•ด์•ผํ•œ๋‹ค.
    *์ˆœ์ˆ˜ํ•จ์ˆ˜ : ๋‹ค๋ฅธ ์™ธ๋ถ€์˜ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š์œผ๋ฉด์„œ๋„, ์–ด๋–ค ๋™์ผํ•œ ์ธ์ž์— ๋Œ€ํ•ด ํ•ญ์ƒ ๋™์ผํ•œ ๊ฐ’์„ ๋ฆฌํ„ดํ•˜๋Š” ํ•จ์ˆ˜์ด๋‹ค.

3-3. Recoil ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

  • ์•ž์„œ ์–ธ๊ธ‰ํ•œ Redux๋Š” ๋‹จ๋ฐฉํ–ฅ์˜ ํ๋ฆ„์—์„œ ์ƒํƒœ๊ด€๋ฆฌ๊ฐ€ ์šฉ์ดํ•˜์ง€๋งŒ, ์ด๋ฅผ ์œ„ํ•œ action, reducer์™€ ๊ฐ™์€ ์ดˆ๊ธฐ ์„ธํŒ…์ด ์ƒ๋‹นํžˆ ๋ฒˆ๊ฑฐ๋กญ๊ณ  React์™€ ์ž˜ ๋งž์ง€ ์•Š๋Š”๋‹ค๋Š” ์—ฌ๋ก ์ด ์ฃผ๋ฅผ ์ด๋ฃจ์—ˆ๋‹ค.

  • React์˜ ์ƒํƒœ๊ด€๋ฆฌ๋ฅผ ๋ณด๋‹ค React์Šค๋Ÿฝ๊ฒŒ(hook์„ ์ „์—ญ์œผ๋กœ ํ™•์žฅ์‹œํ‚ด) ํ•˜๊ธฐ ์œ„ํ•ด, ๋ฉ”ํƒ€(์ „ ํŽ˜์ด์Šค๋ถ)์‚ฌ์—์„œ ์ œ์ž‘ํ•œ React ์ƒํƒœ๊ด€๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋‹ค.

  • Recoil์€ atom๊ณผ selector๋ผ๋Š” ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•œ๋‹ค.

  • atom์€ ๊ตฌ๋…, ์˜ต์ €๋ฒ„์™€ ๊ฐ™์€ ๊ฐœ๋…์„ ์ƒ๊ฐํ•  ํ•„์š”์—†์ด hook์„ ์‚ฌ์šฉํ•˜๋“ฏ์ด ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.
    hook๋ฅผ ์‚ฌ์šฉํ–ˆ๋˜ ๊ฐœ๋ฐœ์ž๋ผ๋ฉด ์‰ฝ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

  • selector๋ฅผ ์ด์šฉํ•˜๋ฉด ๋ฆฌ๋“€์„œ ์—†์ด ๋ณต์žกํ•œ ์—ฐ์‚ฐ๋„ ๊ฐ„๋‹จํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค.

profile
๊ฐ๋™์„ ์ฃผ๊ณ ํ”ˆ ๊ฐœ๋ฐœ์ž(์ค€๋น„์ƒ)

0๊ฐœ์˜ ๋Œ“๊ธ€