πŸ™ˆ Redux(λ¦¬λ•μŠ€): 두 판 μ‚¬μ΄μ˜ 차이

κΈ°μˆ λ…ΈνŠΈ
(CS μš©μ–΄ 정리 - πŸ™ˆ Redux(λ¦¬λ•μŠ€) μΆ”κ°€)
Β 
(차이 μ—†μŒ)

2025λ…„ 4μ›” 17일 (λͺ©) 14:25 κΈ°μ€€ μ΅œμ‹ νŒ

πŸ™ˆ Redux(λ¦¬λ•μŠ€)

> `Redux`λŠ” μžλ°”μŠ€ν¬λ¦½νŠΈ 앱을 μœ„ν•œ 예츑 κ°€λŠ₯ν•œ μƒνƒœ μ»¨ν…Œμ΄λ„ˆμ΄λ‹€.

`Redux`λŠ” μΌκ΄€μ μœΌλ‘œ λ™μž‘ν•˜κ³ , μ„œλ‘œ λ‹€λ₯Έ ν™˜κ²½(μ„œλ²„, ν΄λΌμ΄μ–ΈνŠΈ, λ„€μ΄ν‹°λΈŒ) λ“±μ—μ„œ μž‘λ™ν•˜κ³ , ν…ŒμŠ€νŠΈν•˜κΈ° μ‰¬μš΄ μ•±μœΌλ‘œ μž‘μ„±ν•  수 있게 도와쀀닀. `React`와 `React Native`와 같은 λ‹€λ₯Έ λ·° λΌμ΄λΈŒλŸ¬λ¦¬μ™€ ν•¨κ»˜ μ‚¬μš©ν•  수 있고, `Redux`λŠ” 맀우 μž‘μ§€λ§Œ(의쑴 라이브러리 포함 2KB), μ‚¬μš© κ°€λŠ₯ν•œ μ• λ“œμ˜¨(ν”„λ‘œκ·Έλž¨μ˜ κΈ°λŠ₯을 λ³΄μ™„ν•˜κΈ° μœ„ν•΄ μΆ”κ°€ν•˜λŠ” 보쑰 ν”„λ‘œκ·Έλž¨)은 맀우 λ§Žλ‹€.

Reduxλ₯Ό μ‚¬μš©ν•˜λ©΄ μ „μ—­μœΌλ‘œ μƒνƒœλ₯Ό κ΄€λ¦¬ν•΄μ£ΌλŠ” μ €μž₯μ†Œλ₯Ό 제곡 받을 수 μžˆμ–΄, μ–Έμ œ μ–΄λ””μ„œλ“  μ €μž₯μ†Œμ— μ ‘κ·Όν•˜μ—¬ μƒνƒœκ΄€λ¦¬(state management)λ₯Ό νŽΈλ¦¬ν•˜κ³  효율적으둜 λ‹€λ£° 수 있게 ν•΄μ€€λ‹€.

ReduxλŠ” 이럴 λ•Œ μ‚¬μš©ν•΄μ•Ό ν•œλ‹€.

`Redux`λŠ” μƒνƒœλ₯Ό κ΄€λ¦¬ν•˜κΈ°μ— μœ μš©ν•œ λ„κ΅¬μ΄μ§€λ§Œ ν˜„μž¬ 상황에 μ ν•©ν•œμ§€ λ”°μ Έ 보아야 ν•œλ‹€. 단지 λˆ„κ΅°κ°€κ°€ μ‚¬μš©ν•˜λΌκ³  ν–ˆλ‹€λŠ” 이유만으둜 `Redux`λ₯Ό μ‚¬μš©ν•΄μ„œλŠ” μ•ˆλœλ‹€. μ‹œκ°„μ„ λ“€μ—¬μ„œ 잠재적인 이점과 그에 λ”°λ₯΄λŠ” 단점을 이해해야 ν•œλ‹€.

Reduxλ₯Ό μ‚¬μš©ν•˜κΈ° μ ν•©ν•œ 상황

> 1. κ³„μ†ν•΄μ„œ λ³€ν™”ν•˜λŠ” μƒλ‹Ήν•œ μ–‘μ˜ 데이터가 μžˆμ„ 경우 > 2. μƒνƒœλ₯Ό μœ„ν•œ 단 ν•˜λ‚˜μ˜ 근원이 ν•„μš”ν•  경우 > 3. 앱에 쀑간 λ˜λŠ” 큰 규λͺ¨μ˜ μ½”λ“œλ² μ΄μŠ€κ°€ 있고, λ§Žμ€ μ‚¬λžŒλ“€μ΄ μž‘μ—…ν•  경우


Redux ν‚€μ›Œλ“œ

`Redux`λ₯Ό 본격적으둜 μ‚¬μš©ν•˜κΈ° μ „ μš©μ–΄μ™€ κ°œλ…μ„ μ•Œμ•„μ•Ό ν•œλ‹€.

1. Action (μ•‘μ…˜)

μƒνƒœλ₯Ό μ—…λ°μ΄νŠΈν•˜λŠ”λ° ν•„μš”ν•œ 정보λ₯Ό 담은 객체닀. `Action` κ°μ²΄λŠ” λ°˜λ“œμ‹œ κ³ μœ ν•œ νƒ€μž…(type)의 ν”„λ‘œνΌν‹°(Property)λ₯Ό κ°€μ Έμ•„ν•˜κ³ , μƒνƒœλ₯Ό λ³€κ²½ν•΄μ•Ό 될 λ•Œ, μ–΄λ– ν•œ λ³€ν™”λ₯Ό 쀄지 ν•΄λ‹Ήν•˜λŠ” μ•‘μ…˜μ„ λ°œμƒμ‹œν‚¬ 수 μžˆλ‹€.

2. Action Creator (μ•‘μ…˜ 생성 ν•¨μˆ˜)

`action`이 λ™μž‘μ— λŒ€ν•΄ μ„ μ–Έλœ 객체라면, `Action Creator`λŠ” `action`을 μƒμ„±ν•˜μ—¬ μ‹€μ œ 객체둜 λ§Œλ“€μ–΄ μ£ΌλŠ” ν•¨μˆ˜λ‹€. λ³€ν™”λ₯Ό 생길 λ•Œλ§ˆλ‹€ `action` 객체λ₯Ό λ§Œλ“€μ–΄μ€˜μ•Ό ν•˜λŠ”λ°, 맀번 μƒˆλ‘œμš΄ 객체λ₯Ό λ§Œλ“€ ν•„μš” 없이 ν•¨μˆ˜λ‘œ λ§Œλ“€μ–΄ μž¬μ‚¬μš©ν•  수 μžˆλ‹€.

3. Reducer (λ¦¬λ“€μ„œ)

`store`에 μ ‘κ·Όν•΄μ„œ μƒνƒœ(state) λ³€ν™”λ₯Ό μΌμœΌν‚€λŠ” ν•¨μˆ˜λ‹€. μ•‘μ…˜μ„ λ°œμƒμ‹œν‚€λ €λ©΄ `reducer`κ°€ ν˜„μž¬ μƒνƒœμ™€ 전달받은 μ•‘μ…˜ 객체λ₯Ό νŒŒλΌλ―Έν„°(parameter)둜 λ°›μ•„μ˜¨λ‹€. λ°˜ν™˜ν•˜λŠ” μƒνƒœλŠ” μƒˆλ‘œ λ§Œλ“€μ–΄μ„œ λ°˜ν™˜μ„ ν•΄μ€€λ‹€.

4. Store (μŠ€ν† μ–΄)

`store`λŠ” μƒνƒœκ°€ κ΄€λ¦¬λ˜λŠ” 였직 ν•˜λ‚˜μ˜ 곡간이닀. μ•±μ—μ„œ ν˜„μž¬`state`와 `reducer`κ°€ μ €μž₯λ˜μ–΄ 있으며, μ»΄ν¬λ„ŒνŠΈμ—μ„œ μƒνƒœ 정보가 ν•„μš”ν•  λ•Œ μŠ€ν† μ–΄μ— μ ‘κ·Όν•œλ‹€.

5. Dispatch (λ””μŠ€νŒ¨μΉ˜)

`Dispatch`λŠ” `store` λ‚΄μž₯ ν•¨μˆ˜ 쀑 ν•˜λ‚˜μ΄λ©°, `action`을 λ°œμƒμ‹œν‚€λŠ” ν•¨μˆ˜λ‹€. `action`을 νŒŒλΌλ―Έν„°λ‘œ μ „λ‹¬ν•˜κ³ ,`dispatch`κ°€ 호좜되면 `store`λŠ” `reducer` ν•¨μˆ˜λ₯Ό μ‹€ν–‰μ‹œμΌœμ„œ μƒˆλ‘œμš΄ μƒνƒœλ₯Ό λ§Œλ“€μ–΄ μ€€λ‹€.

6. Subscribe (ꡬ독)

`Subscribe`λŠ” `store`의 λ‚΄μž₯ ν•¨μˆ˜ 쀑 ν•˜λ‚˜μ΄λ©°, νŠΉμ • ν•¨μˆ˜λ₯Ό 전달해주면 `action`이 `dispatch` λ˜μ—ˆμ„ λ•Œλ§ˆλ‹€ μ „λ‹¬λœ ν•¨μˆ˜κ°€ ν˜ΈμΆœλœλ‹€.

Redux 흐름

<img src="https://velog.velcdn.com/images/tlsl13/post/d537b15b-d1cd-4671-b761-4709581207a1/image.gif" width="30%" height="30%"/>

> 1. UIμ—μ„œ μ»΄ν¬λ„ŒνŠΈ 내에 μ‘΄μž¬ν•˜λŠ” μ΄λ²€νŠΈκ°€ ν˜ΈμΆœλœλ‹€. > 2. μ΄λ²€νŠΈμ™€ μ—°κ²°λœ `Action Creator`κ°€ ν˜ΈμΆœλœλ‹€. > 3. Action Creatorμ—μ„œ μƒμ„±λœ `Action`이 ν˜ΈμΆœλœλ‹€. > 4. `Action`이 `Reducer`둜 μ „λ‹¬λœλ‹€. 이 과정을 `Dispatch`μ—μ„œ λ‹΄λ‹Ήν•œλ‹€. > 5. `Reducer`μ—μ„œ `Dispatch`된 action에 따라 μƒνƒœκ°’μ„ λ³€κ²½ν•œλ‹€. > 6. 변경사항이 λ Œλ”λ§λ˜μ–΄ UI에 λ‚˜νƒ€λ‚œλ‹€.

λ‚˜μ˜ 의견

κ°„λ‹¨ν•œ ν”„λ‘œμ νŠΈμ—λŠ” `Redux`λ₯Ό μ‚¬μš©ν•˜λŠ” 것보닀 ν˜‘μ—…μ„ ν•˜λŠ” κ²½μš°λ‚˜ λ³΅μž‘ν•œ 둜직 ꡬ쑰일 λ•Œ μ‚¬μš©ν•˜λ©΄ νš¨μœ¨μ μ΄λ‹€. `Redux`λ₯Ό μ‚¬μš©ν•˜λ©΄ μœ μ§€λ³΄μˆ˜κ°€ μš©μ΄ν•΄μ§€λ―€λ‘œ κΈ°λ³Έ κ°œλ…κ³Ό 흐름을 μ•Œκ³ μžˆλ‹€λ©΄ 이 라이브러리λ₯Ό ν™œμš©ν•˜λŠ” 것을 μΆ”μ²œν•œλ‹€.

>