๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ’๊ณต๋ถ€/ํ”„๋ฆฌ์˜จ๋ณด๋”ฉ์ฝ”์Šค

[ํ”„๋ฆฌ์˜จ๋ณด๋”ฉ์ฝ”์Šค] 6์ฃผ์ฐจ - ๊ณผ์ œ9

by rindev 2021. 9. 12.

์‹œ๊ฐ„์— am5:29 ๋ณด๋Š”๋ฐ ์™œ ๊ฐ‘์ž๊ธฐ ์Šฌํผ์ง€์ง€..?ใ…‹ใ…‹ใ…‹ใ…‹

โœ์•Œ๊ฒŒ๋œ ๊ฒƒ๊ณผ ๋Š๋‚€์ 

 

๐Ÿ”ฅ๊ทธ๋ž˜์„œ ํ•ด๋ณด๋Š” ์ •๋ฆฌ

1. redux-saga....... ์–ด๋ ต๋‹ค!

ํ•˜์ง€๋งŒ redux-saga๋ฅผ ํ•˜๊ธฐ์ „์— ๋„˜์–ด์•ผํ•˜๋Š” ํฐ ์‚ฐ์ด ํ•˜๋‚˜ ์žˆ๋Š”๋ฐ..... #๊ฐ€๋ณด์ž๊ณ 

 

โœ… Generator

function weirdFunction() {
  return 1; // ๋ณดํ†ต ํ•จ์ˆ˜๋Š” return์„ ์—ฌ๋Ÿฌ ๋ฒˆ ํ•  ์ˆ˜ ์—†๋‹ค! 
  return 2; // ์ด ํ•จ์ˆ˜๋Š” ํ˜ธ์ถœํ•  ๋•Œ ๋งˆ๋‹ค 1๋งŒ ๋ฐ˜ํ™˜ํ•  ๊ฒƒ์ด๋‹ค.
  return 3;
  return 4;
  return 5;
}

์œ„์˜ ์˜ˆ์‹œ์™€ ๋‹ฌ๋ฆฌ, ์ œ๋„ˆ๋ ˆ์ดํ„ฐ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ’์„ ์ˆœ์ฐจ์ ์œผ๋กœ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

  • ์ œ๋„ˆ๋ ˆ์ดํ„ฐ ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค ๋•Œ์—๋Š” function* ์ด๋ผ๋Š” ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
  • ์ œ๋„ˆ๋ ˆ์ดํ„ฐ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ํ•œ ๊ฐ์ฒด(์ œ๋„ˆ๋ ˆ์ดํ„ฐ)๊ฐ€ ๋ฐ˜ํ™˜๋œ๋‹ค.
  • ์ œ๋„ˆ๋ ˆ์ดํ„ฐ ํ•จ์ˆ˜๋Š” ๋ฐ”๋กœ ํ˜ธ์ถœํ•œ๋‹ค๊ณ  ์‹คํ–‰๋˜๋Š”๊ฒŒ ์•„๋‹ˆ๊ณ ,
    generator.next()๋ฅผ ํ˜ธ์ถœํ•ด์•ผ ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋˜๋ฉฐ yield๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ  ๋ฉˆ์ถค
    generator.next()๋ฅผ ๋‹ค์‹œ ํ˜ธ์ถœํ•˜๋ฉด ๊ทธ ๋’ค์—๋ถ€ํ„ฐ ์ด์–ด์„œ ๋‹ค์‹œ ์‹œ์ž‘ ๋จ

 

โœ… redux-saga

์ด๋ฏธ์ง€ ์ถœ์ฒ˜: https://www.youtube.com/watch?v=VHszuWZk0JA

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

redux์—์„œ๋Š” action์„ ํ•˜๋ฉด dispatchํ•ด์„œ ๋ฐ”๋กœ state๊ฐ€ ๋ณ€๊ฒฝ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ redux-saga๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. 

 

redux-saga๊ฐ€ redux-thunk๋ณด๋‹ค ๋งŽ์ด ์“ฐ์ด๋Š” ์ด์œ 

  • ๋น„๋™๊ธฐ ์ž‘์—… ์‹œ ๊ธฐ์กด ์š”์ฒญ ์ทจ์†Œ ๊ฐ€๋Šฅ
  • ํŠน์ • ์•ก์…˜์ด ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ์ด์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ์•ก์…˜์ด ๋””์ŠคํŒจ์น˜ ๋˜๊ฒŒ๋” ํ•˜๊ฑฐ๋‚˜, js์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Œ
  • ์›น ์†Œ์ผ“์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ Channel์ด๋ผ๋Š” ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•ด์„œ ๋” ํšจ์œจ์ ์œผ๋กœ ์ฝ”๋“œ ๊ด€๋ฆฌ ๊ฐ€๋Šฅ
  • API ์š”์ฒญ์ด ์‹คํŒจํ–ˆ์„ ๋•Œ ์žฌ์š”์ฒญ ์ž‘์—… ๊ฐ€๋Šฅ

 

์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” intall ํ•„์š”!

$ npm install redux-saga

$ yarn add redux-saga

 

โœ… Redux-Saga effects

  • delay
import { delay } from 'redux-saga/effects';
// ์ƒ๋žต

function* addTodo(action: Action) {
  try {
    yield delay(500);
    // ์ƒ๋žต
  } catch (error) {
    // ์ƒ๋žต
  }
}

๋‹ค์Œ ๊ตฌ๋ฌธ์œผ๋กœ ์ด๋™ ์ „์— ์ผ์ • ์‹œ๊ฐ„ ๋Œ€๊ธฐํ•œ๋‹ค.

 

  • put
import { put } from 'redux-saga/effects';
// ์ƒ๋žต

function* addTodo(action: Action) {
  try {
    yield put(addNewTodo(action.data));
    // ์ƒ๋žต
  } catch (error) {
    // ์ƒ๋žต
  }
}

redux ์Šคํ† ์–ด์— ์•ก์…˜์„ dispatch ํ•œ๋‹ค.

 

  • call
import { call } from 'redux-saga/effects';
// ์ƒ๋žต

function* getTodoList() {
  try {
    const getTodos: any = yield call(fetchTodos);
    // ์ƒ๋žต
  } catch (error) {
    // ์ƒ๋žต
  }
}

๋‹ค๋ฅธ saga๋“ค์ด๋‚˜ promise ๋“ฑ์„ ํ˜ธ์ถœ ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

8๋ถ„~ Redux-saga ์„ค๋ช…์ด ๋‚˜์˜ต๋‹ˆ๋‹ค.

 

 

2. json-server

ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ ์ผ์ •์— ๋งž์ถฐ์„œ ๋ฐฑ์—”๋“œ๊ฐ€ ์ค€๋น„๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ...๐Ÿ˜จ

๋ฐฑ์—”๋“œ๊ฐ€ ์—†๋”๋ผ๋„ ํ”„๋ก ํŠธ ๊ฐœ๋ฐœ์€ ๋ฉˆ์ถ”๋ฉด ์•ˆ๋˜๋‹ˆ๊นŒ! ๊ฐ€์งœ API ์„œ๋ฒ„๋ฅผ ๋งŒ๋“ค์–ด ๋ด…์‹œ๋‹ค.

 

 

public/Data ์•ˆ์— data.json์„ ๋งŒ๋“ค์–ด์„œ ๋‚ด์šฉ์„ ์ž‘์„ฑ ํ›„, ์•„๋ž˜ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด์„œ ์„œ๋ฒ„๋ฅผ ์—ด์–ด์ค๋‹ˆ๋‹ค.

$ npx json-server ./data.json --port 4000

์„ฑ๊ณต์ ์œผ๋กœ ์‹คํ–‰๋˜๋ฉด ๊ท€์—ฌ์šด ์ด๋ชจํ‹ฐ์ฝ˜์ด ๋ฐ˜๊ฒจ์ค๋‹ˆ๋‹ค. ๏ผผ{^_^}/

 

์ด์ œ axios๋‚˜ fetch๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํ‰์†Œ์— API์—์„œ ์š”์ฒญํ•˜๋˜ ๊ฒƒ ์ฒ˜๋Ÿผ ์ž‘์—…์„ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค! ์‹ ๊ธฐํ•ด

 

 

3. window hostsํŒŒ์ผ ์ˆ˜์ •

 

์ด๋ฏธ์ง€ ์ถœ์ฒ˜ : https://goddaehee.tistory.com/90

๐Ÿค” ํ˜ธ์ŠคํŠธ ํŒŒ์ผ?

ํ˜ธ์ŠคํŠธ ์ด๋ฆ„์— ๋Œ€์‘ํ•˜๋Š” IP ์ฃผ์†Œ๋ฅผ ์ €์žฅํ•˜๊ณ  ์žˆ์–ด์„œ DNS์—์„œ ์ฃผ์†Œ ์ •๋ณด๋ฅผ ์ œ๊ณต๋ฐ›์ง€ ์•Š๊ณ ๋„ ์„œ๋ฒ„์˜ ์œ„์น˜๋ฅผ ์ฐพ๊ฒŒ ํ•ด์ฃผ๋Š” ํŒŒ์ผ!

 

๐Ÿค” ์™œ ์“ฐ๋Š”๊ฑฐ์•ผ?

  • ์ธํ„ฐ๋„ท ์†๋„ ํ–ฅ์ƒ
  • ๋ฆฌ์†Œ์Šค ์‚ฌ์šฉ ์ค„์ž„

๐Ÿ˜จ ํ•˜์ง€๋งŒ..

  • ์‚ฌ์ดํŠธ ๋ฐฉ๋ฌธ์ด ์ฐจ๋‹จ ๋  ์ˆ˜ ์žˆ์Œ
  • ๊ทธ๋ฆฌ๊ณ  ํ•ด์ปคํ•œํ…Œ ํ„ธ๋ฆฌ๋ฉด ๋งค์šฐ ์œ„ํ—˜ํ•จ (๊ทธ๋ž˜์„œ ํ˜ธ์ŠคํŠธํŒŒ์ผ ์ˆ˜์ •ํ•  ๋•Œ ๋ณด์•ˆํ”„๋กœ๊ทธ๋žจ์ด ๊ฒฝ๊ณ ํ•จ)

์•„๋ฌดํŠผ ์ €๊ธฐ ๋งจ ๋งˆ์ง€๋ง‰ ์ค„์—

127.0.0.1 dummy-server.url

์„ ์ถ”๊ฐ€ํ•˜๋ฉด...! 

 

์•„๊นŒ ๋‚ด๊ฐ€ ์—ด์–ด์ค€ ๊ฐ€์งœ ์„œ๋ฒ„(localhost:4000)์„ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค!

 

 

 

๐Ÿ‘€ ์ฐธ๊ณ  (๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!)

๋”๋ณด๊ธฐ

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Generator

 

Generator - JavaScript | MDN

Generator ๊ฐ์ฒด๋Š” generator function ์œผ๋กœ๋ถ€ํ„ฐ ๋ฐ˜ํ™˜๋œ ๊ฐ’์ด๋ฉฐ ๋ฐ˜๋ณต์ž์™€ ๋ฐ˜๋ณต์ž ํ”„๋กœํ† ์ฝœ์„ ์ค€์ˆ˜ํ•ฉ๋‹ˆ๋‹ค.

developer.mozilla.org

 

https://redux-saga.js.org/docs/introduction/BeginnerTutorial

 

Beginner Tutorial | Redux-Saga

Beginner Tutorial

redux-saga.js.org

 

https://react.vlpt.us/redux-middleware/10-redux-saga.html

 

10. redux-saga · GitBook

No results matching ""

react.vlpt.us

 

https://velog.io/@tjdud0123/Redux-%EB%B0%8F-%EB%AF%B8%EB%93%A4%EC%9B%A8%EC%96%B4-Redux-saga-%EA%B8%B0%EB%B3%B8-%EC%A0%95%EB%A6%AC

 

Redux ๋ฐ ๋ฏธ๋“ค์›จ์–ด Redux-saga ๊ธฐ๋ณธ ์ •๋ฆฌ ๋ฐ ์ ์šฉ

Redux์™€ ๋ฏธ๋“ค์›จ์–ด Redux-saga์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ณ  ๊ฐ„๋‹จํ•˜๊ฒŒ ์ ์šฉํ•ด๋ณด๊ธฐ

velog.io

 

https://sustainable-dev.tistory.com/94

 

redux-saga์˜ ์ฃผ์š”ํ•จ์ˆ˜(delay, call, put, all, takeEvery, takeLatest)

์ƒˆ ํ”„๋กœ์ ํŠธ์—์„œ redux-saga๋ฅผ ์จ๋ณด๋ ค๊ณ ํ•˜๋Š”๋ฐ ํ—ท๊ฐˆ๋ ค์„œ ์ฃผ๋กœ ์“ฐ๋Š” ํ•จ์ˆ˜๋ฅผ ์ •๋ฆฌํ•ด๋ณด์•˜๋‹ค. redux-saga docs ๋งํฌ(ํ•œ๊ธ€๋ฒˆ์—ญ) ์ฝ์–ด์ฃผ์„ธ์š” · GitBook No results matching "" mskims.github.io delay ์„ค์ •๋œ ์‹œ๊ฐ„ ์ด..

sustainable-dev.tistory.com

 

 

 

๋Œ“๊ธ€