๊ณต์‚ผ
article thumbnail


๐Ÿ’ฌ ๋“ค์–ด๊ฐ€๋ฉฐ

์ด์ „์— ๊ฐœ๋…์„ ์ •๋ฆฌํ–ˆ๋˜ Redux, MVC๋“ฑ์˜ ๊ธ€์„ ํ•œ๋ฒˆ ๋ณด๊ณ ๊ฐ€๋ฉด ์ข‹์„ ๋“ฏ ํ•˜๋‹ค. 

 

https://strap.tistory.com/58

 

(MVC, Flux, Redux) ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ƒํƒœ๊ด€๋ฆฌ

MVC (Model - View - Controller) ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ์—์„œ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด ๋””์ž์ธ ํŒจํ„ด์ค‘ ํ•˜๋‚˜๋กœ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ์„ธ๊ฐ€์ง€ ์—ญํ• ๋กœ ๋‚˜๋ˆ„์–ด ๊ด€๋ฆฌํ•จ์œผ๋กœ์จ ๊ฐœ๋ฐœ์˜ ์œ ์ง€๋ณด์ˆ˜์„ฑ๊ณผ ํ™•์ž‘์„ฑ

strap.tistory.com

 

์˜ค๋Š˜ ๊ณต๋ถ€ํ•  ๋ถ€๋ถ„์€ recoil ์ด์ง€๋งŒ ํ•œ๋ฒˆ๋” ๊ฐ„๋‹จํ•˜๊ฒŒ Redux์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•ด๋ณด๋ฉด, Redux๋Š” ์ „์—ญ ์ƒํƒœ๊ด€๋ฆฌ๋ฅผ ๋„์™€์ฃผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ์˜ค๋Š˜๋‚  Recoil์— ๋น„ํ•ด ์›”๋“ฑํžˆ ๋งŽ์€ ๊ฐœ๋ฐœ์ž๊ฐ€ ์‚ฌ์šฉํ•œ๋‹ค. 

 

https://npmtrends.com/react-redux-vs-recoil

 

์ตœ๊ทผ Recoil๋„ ๋งŽ์€ ๊ฐœ๋ฐœ์ž๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ์ถ”์„ธ์ด์ง€๋งŒ ์•„์ง ๋น„๊ต๊ฐ€ ์•ˆ๋ ๋งŒํผ ์ ์€ ์ˆ˜๋ฅผ ๋ณด์ด๊ณ  ์žˆ๋‹ค. 

 

๊ทธ๋ ‡๋‹ค๋ฉด ์ตœ๊ทผ Recoil ์ด์šฉ์ž๊ฐ€ ๋งŽ์•„์ง€๋Š” ์ด์œ ๊ฐ€ ๋ญ˜๊นŒ?? 

 

๊ทธ๊ฒƒ์€ ๋ฐ”๋กœ Redux ์˜ ๋ณด์ผ๋Ÿฌ ํ”Œ๋ ˆ์ดํŠธ๊ฐ€ ๊ต‰์žฅํžˆ ๋ณต์žกํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. 

 

Redux์˜ ๋ณด์ผ๋Ÿฌํ”Œ๋ ˆ์ดํŠธ๋ž€? 

Redux ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹œ์ž‘ํ•˜๊ธฐ์ „ ๋กœ์ง์„ ์ž‘์„ฑํ•ด์•ผํ•˜๋Š” ์ดˆ๊ธฐ ์„ค์ •, ๊ตฌ์กฐ, ํŒจํ„ด ๋“ฑ์„ ์˜๋ฏธํ•œ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ Redux๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ณผ์ •์—์„œ ๋ฐ˜๋ณต์ ์ธ ์ฝ”๋“œ์™€ ๊ตฌ์กฐ๋ฅผ ๋งŽ์ด ๊ฐ–๊ฒŒ๋œ๋‹ค.

 

Redux์˜ ๋ณด์ผ๋Ÿฌ ํ”Œ๋ ˆ์ดํŠธ ์ฝ”๋“œ๋ฅผ ์ œ๊ณตํ•˜์—ฌ ๋” ์‰ฝ๊ฒŒ Redux๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“ค์–ด ์ฃผ๋Š” Redux ํˆดํ‚ท ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋„ ์žˆ์ง€๋งŒ ์ด๋ฒˆ ๊ธ€์—์„œ๋Š” Recoil์— ๋Œ€ํ•ด ์•Œ์•„๋ณธ๋‹ค.

 

 

 

 


Recoil 

Facebook์—์„œ ๊ฐœ๋ฐœํ•œ ์ƒํƒœ ๊ด€๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋‹ค. React๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ ๋‹ค๋ฅธ ์ƒํƒœ ๊ด€๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค๊ณผ๋Š” ๋‹ฌ๋ฆฌ, Recoil์€ React์™€ ๋…๋ฆฝ์ ์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค. 

 

Recoil์€ ์ปดํฌ๋„ŒํŠธ ๊ณ„์ธต ๊ตฌ์กฐ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” ์ „์—ญ ์ƒํƒœ ๊ด€๋ฆฌ ๋ฐฉ์‹์„ ์ทจํ•˜๊ณ  ์žˆ๋‹ค.

 

๋”ฐ๋ผ์„œ, ์ปดํฌ๋„ŒํŠธ ๊ฐ„ ๋ฐ์ดํ„ฐ ์ „๋‹ฌ์„ ๋ณด๋‹ค ์‰ฝ๊ณ  ์ง๊ด€์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค. ๋˜ํ•œ Recoil์€ ๋‹ค์–‘ํ•œ ์ƒํƒœ ๊ด€๋ฆฌ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, ์ด๋ฅผ ํ†ตํ•ด ์ƒํƒœ ๊ด€๋ฆฌ๋ฅผ ๋ณด๋‹ค ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค€๋‹ค.

 

 

Recoil ์ฃผ์š” ๊ธฐ๋Šฅ

  • Atom: ์ „์—ญ ์ƒํƒœ๋ฅผ ์ •์˜ํ•˜๊ณ , ์ด๋ฅผ ์ฝ๊ณ  ์“ฐ๊ธฐ ์œ„ํ•œ ๋ฉ”์†Œ๋“œ๋ฅผ ์ œ๊ณต
  • Selector: ์ „์—ญ ์ƒํƒœ๋ฅผ ์กฐํ•ฉํ•˜์—ฌ ํŒŒ์ƒ๋œ ์ƒํƒœ๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ์ด๋ฅผ ์ฝ๊ธฐ ์œ„ํ•œ ๋ฉ”์†Œ๋“œ๋ฅผ ์ œ๊ณต
  • Asynchronous Effects: ๋น„๋™๊ธฐ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณต
  • Persistence: ์ƒํƒœ๋ฅผ ๋กœ์ปฌ ์Šคํ† ๋ฆฌ์ง€ ๋“ฑ์— ์ €์žฅํ•˜๊ณ , ์ด๋ฅผ ๋‹ค์‹œ ๋ถˆ๋Ÿฌ์˜ค๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณต

 

https://recoiljs.org/ko/docs/introduction/core-concepts/

 

์ฃผ์š” ๊ฐœ๋… | Recoil

๊ฐœ์š”

recoiljs.org

 

Recoil ์‚ฌ์šฉ๋ฐฉ๋ฒ•

import "./index.css";
import App from "./App";
import React from "react";
import ReactDOM from "react-dom/client";
import { RecoilRoot } from "recoil";
import { BrowserRouter } from "react-router-dom";

const root = ReactDOM.createRoot(document.getElementById("root"));
root.render(
  <>
    <RecoilRoot>
      <BrowserRouter>
        <App />
      </BrowserRouter>
    </RecoilRoot>
  </>
);

 

App์„ RecoilRoot๋กœ ๊ฐ์‹ธ Recoil์„ App ์ „์ฒด์—์„œ ์ „์—ญ์œผ๋กœ ์ƒํƒœ๊ด€๋ฆฌ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ค€๋‹ค. 

 

Redux์—์„œ <Providde>๋ฅผ ํ†ตํ•ด์„œ App์— store๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ๊ฒƒ๊ณผ ๋น„์Šทํ•˜๋‹ค. Recoil์€ atom์„ ์„ค์ •ํ•˜๊ณ  RecoilRoot์•ˆ์—์„œ ์ž์œ ๋กญ๊ฒŒ ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค์ •ํ•ด์ฃผ๋Š” ๊ฑฐ๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.

 

 

Atoms

Atom ์€ ์šฐ๋ฆฌ๊ฐ€ ๋งŒ๋“  RecoilRoot ๋‚ด๋ถ€์—์„œ ์ž์œ ๋กญ๊ฒŒ ๋ถˆ๋Ÿฌ๋‹ค๊ฐ€ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ƒํƒœ๋‹จ์œ„ ์ด๋‹ค. 

 

์—ฌ๋Ÿฌ ์ปดํฌ๋„ŒํŠธ์—์„œ ์ž์œ ๋กญ๊ฒŒ ์‚ฌ์šฉ๊ฐ€๋Šฅ ํ•˜๋ฉฐ ์ƒˆ๋กœ์šด ๊ฐ’์„ ๋ฐ›์•„ ๋žœ๋”๋งํ•˜๋Š” ๊ฒƒ๋„ ๊ฐ€๋Šฅํ•˜๋‹ค. ๊ทธ๋ ‡๊ฒŒ ๋œ๋‹ค๋ฉด ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š” ๋ชจ๋“  ์ปดํฌ๋„ŒํŠธ์˜ ๊ฐ’์ด ์ƒˆ๋กญ๊ฒŒ ๋ฐ˜์˜๋œ๋‹ค.

 

 

const fontSizeState = atom({
  key: 'fontSizeState',
  default: 14,
});

 

Atom์€ ์œ„์™€ ๊ฐ™์ด ๊ณ ์œ ํ•œ ํ‚ค ๊ฐ’, default ๊ฐ’์œผ๋กœ ์„ ์–ธํ•˜์—ฌ ์‚ฌ์šฉํ•œ๋‹ค.

 

Atom์—๋Š” ๊ณ ์œ ํ•œ ํ‚ค๊ฐ€ ํ•„์š”ํ•˜๋‹ค. ๋‘๊ฐœ ์ด์ƒ์˜ Atom์—์„œ ๊ฐ™์€ ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ์˜ค๋ฅ˜์ด๊ธฐ ๋•Œ๋ฌธ์— ํ‚ค ๊ฐ’์„ ์ „์—ญ์ ์œผ๋กœ ๊ณ ์œ ํ•˜๋„๋ก ํ•ด์•ผํ•œ๋‹ค. 

 

ํ•ด๋‹น Atom์„ ์ปดํฌ๋„ŒํŠธ์—์„œ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด useRecoilState๋ผ๋Š” ํ›…์€ ์ด์šฉํ•ด์•ผ ํ•œ๋‹ค. React์˜ useState์™€ ๋น„์Šทํ•˜์ง€๋งŒ ์ƒํƒœ๊ฐ€ ์ปดํฌ๋„ŒํŠธ๊ฐ„์— ๊ณต์œ ๋  ์ˆ˜ ์žˆ๋‹ค.

 

useRecoilState

import { userData } from "atom/atom";
import { useRecoilState } from "recoil";

const MyBoard = ({ setActive, userId }) => {
  const [content, setContent] = useRecoilState(userData);
  ...
}

 

์‚ฌ์šฉํ•˜๊ณ ์ž ํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ์—์„œ ๋‹ค์Œ๊ณผ๊ฐ™์ด ์„ ์–ธ๋œ atom์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์˜ค๊ณ , useRecoilState๋ฅผ ์ด์šฉํ•˜์—ฌ ์›ํ•˜๋Š” ๊ฐ์ฒด์— ๋‹ด์•„ ์ค„ ์ˆ˜ ์žˆ๋‹ค. 

 

์ด์ œ ๊ฐ์ฒด content์—๋Š” ์šฐ๋ฆฌ๊ฐ€ ์›ํ•˜๋Š” atom์— ๋‹ด๊ฒจ์žˆ๋˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์™€ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๊ฒƒ์ด๋‹ค. 

 

 

์—ฌ๊ธฐ์„œ setContent์— ํ•ด๋‹น๋˜์–ด์žˆ๋Š” ๊ฐ’์ด ๋ณ€๊ฒฝ๋œ๋‹ค๋ฉด atom์— ์žˆ๋Š” , ๊ทธ๋ฆฌ๊ณ  ์—ฐ๊ฒฐ๋œ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๊ฐ€ ํ•จ๊ป˜ ๋ณ€ํ™”ํ•œ๋‹ค.

 

Selectors

Atom๋ฐ Selector์—์„œ ํŒŒ์ƒ๋œ ๊ฐ’์„ ๊ณ„์‚ฐํ•˜๊ณ  ๋ณ€ํ™˜ํ•˜๋Š” ์ˆœ์ˆ˜ ํ•จ์ˆ˜์ด๋‹ค. 

 

Selector๋Š” ์ปดํฌ๋„ŒํŠธ์˜ ๋ Œ๋”๋ง๊ณผ๋Š” ๊ด€๊ณ„์—†์ด ํ˜ธ์ถœ๋˜๊ณ , ๋ณ€๊ฒฝ ๊ฐ€๋Šฅํ•œ ์ƒํƒœ๋ฅผ ์ˆ˜์ •ํ•˜์ง€ ์•Š๊ณ  ๋ณ€ํ™˜ํ•˜๋ฉฐ ์ˆ˜ํ–‰ํ•œ๋‹ค. 

 

Selector๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ „์—ญ ์ƒํƒœ์˜ ๊ฐ’์„ ๊ณ„์‚ฐํ•˜๊ฑฐ๋‚˜ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ƒํƒœ๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๊ณ„์‚ฐ๋œ ๊ฐ’์„ ์‚ฌ์šฉํ•˜์—ฌ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ Œ๋”๋ง ํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

ํšจ์œจ์ ์ธ ๋ Œ๋”๋ง์„ ์œ„ํ•ด ์ด๋Ÿฌํ•œ ๋ฐฉ์‹์œผ๋กœ ์‚ฌ์šฉ ๋œ๋‹ค. 

 

import { selector } from 'recoil';
import { todoListState } from './atoms';

export const todoListFilterState = selector({
  key: 'todoListFilterState',
  get: ({ get }) => {
    const todoList = get(todoListState);
    const itemsLeft = todoList.filter((item) => !item.isComplete).length;
    return { itemsLeft, todoList };
  },
});

todoListFilterState์˜ Selector ํ•จ์ˆ˜๋Š” todoListState Atom ๊ฐ’์„ ์ธ์ˆ˜๋กœ ๋ฐ›์•„๋“ค์ธ๋‹ค.

 

์ด Selector ํ•จ์ˆ˜๋Š” todoListState์˜ ๊ฐ’์„ ๋ถ„์„ํ•˜๊ณ  ํ•„ํ„ฐ๋ง๋œ ํ•  ์ผ ๋ชฉ๋ก๊ณผ ์™„๋ฃŒ๋˜์ง€ ์•Š์€ ํ•  ์ผ ํ•ญ๋ชฉ ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 

์ด ๊ฐ’์„ ์‚ฌ์šฉํ•˜์—ฌ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ Œ๋”๋งํ•˜๊ณ , todoListState๊ฐ€ ๋ณ€๊ฒฝ๋  ๋•Œ๋งŒ ๋‹ค์‹œ ๊ณ„์‚ฐ๋˜์–ด ๋ Œ๋”๋ง์ด ์ง„ํ–‰๋˜๋Š” ํ˜•์‹์ด๋‹ค. 

 

 

 

Recoil๊ณผ Redux ์žฅ๋‹จ์ 

์ธก๋ฉด Recoil Redux
๊ฐœ๋… React ์ปดํฌ๋„ŒํŠธ ๋‚ด๋ถ€์—์„œ ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ค‘์•™ ์ง‘์ค‘ํ™”๋œ ์ƒํƒœ ์ €์žฅ์†Œ ๋ฐ ๋ถˆ๋ณ€ ์ƒํƒœ ์—…๋ฐ์ดํŠธ
ํ•ต์‹ฌ ์•„์ด๋””์–ด "Atoms"๋ผ ๋ถˆ๋ฆฌ๋Š” ์›์ž์ ์ธ ์ƒํƒœ ์กฐ๊ฐ๋“ค์„ ์กฐํ•ฉ ๋‹จ์ผ ์Šคํ† ์–ด์™€ ์•ก์…˜์„ ํ†ตํ•œ ์ƒํƒœ ๋ณ€ํ™” ๊ด€๋ฆฌ
๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ์ง์ ‘์ ์œผ๋กœ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š์Œ ๋ฏธ๋“ค์›จ์–ด(thunk, saga ๋“ฑ)๋ฅผ ํ†ตํ•œ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ
์„ฑ๋Šฅ ์ตœ์ ํ™” "Selector"๋ฅผ ํ†ตํ•ด Memoization๊ณผ ์ง€์—ฐ ๋กœ๋”ฉ ์ง€์› Reselect๋‚˜ Memoization์„ ํ†ตํ•œ ์„ฑ๋Šฅ ์ตœ์ ํ™” ๊ฐ€๋Šฅ
์ƒํƒœ ์—…๋ฐ์ดํŠธ Immutableํ•œ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ ์‚ฌ์šฉ ๋ถˆ๋ณ€์„ฑ ์œ ์ง€๋ฅผ ์œ„ํ•ด ๋ถˆ๋ณ€ ์—…๋ฐ์ดํŠธ ํŒจํ„ด ์‚ฌ์šฉ
ํŽธ๋ฆฌ์„ฑ ๋ฐ ๋ณต์žก์„ฑ ์ปดํฌ๋„ŒํŠธ ๋‚ด์—์„œ ๋น„๊ต์  ์ง๊ด€์ ์ธ ์ƒํƒœ ๊ด€๋ฆฌ ์ดˆ๊ธฐ ์„ค์ • ๋ฐ ๋ฏธ๋“ค์›จ์–ด ์„ค์ •์œผ๋กœ ์ธํ•œ ์„ค์ • ๋ณต์žก์„ฑ
์ปค๋ฎค๋‹ˆํ‹ฐ ๋ฐ ์ƒํƒœ๊ณ„ ์•„์ง ์ƒ๋Œ€์ ์œผ๋กœ ์ž‘์€ ์ปค๋ฎค๋‹ˆํ‹ฐ์™€ ์ƒํƒœ๊ณ„ ํฐ ์ปค๋ฎค๋‹ˆํ‹ฐ์™€ ๋‹ค์–‘ํ•œ ๊ด€๋ จ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ฐ ํ”Œ๋Ÿฌ๊ทธ์ธ
๊ณต์‹ ๋ฌธ์„œ ๋ฐ ์ž๋ฃŒ ์ƒ๋Œ€์ ์œผ๋กœ ํ•œ์ •๋œ ๋ฌธ์„œ ๋ฐ ์ž๋ฃŒ ๋‹ค์–‘ํ•œ ์ž๋ฃŒ์™€ ์˜ˆ์ œ๊ฐ€ ํ’๋ถ€ํ•œ ๊ณต์‹ ๋ฌธ์„œ
ํ”„๋กœ์ ํŠธ ์œ ํ˜• ๋ฐ ๊ทœ๋ชจ ์ค‘๊ฐ„ ํฌ๊ธฐ์˜ ํ”„๋กœ์ ํŠธ๋‚˜ ์ƒˆ๋กœ์šด ํ”„๋กœ์ ํŠธ์— ์ ํ•ฉ ๋Œ€๊ทœ๋ชจ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐ ๋ณต์žกํ•œ ์ƒํƒœ ๊ด€๋ฆฌ์— ์ ํ•ฉ

 

(Recoil ) ์ง€์—ฐ๋กœ๋”ฉ ์ด๋ž€? 


์ง€์—ฐ๋กœ๋”ฉ (lazy loading)์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ํ•„์š”ํ•œ ๋ฆฌ์†Œ์Šค๋ฅผ ์ฒ˜์Œ์— ๋ชจ๋‘ ๋ถˆ๋Ÿฌ์˜ค์ง€ ์•Š๊ณ , ํ•„์š”ํ•œ ์‹œ์ ์— ํ•„์š”ํ•œ ๋ฆฌ์†Œ์Šค๋งŒ ๋กœ๋”ฉํ•˜๋Š” ๊ธฐ๋ฒ•์„ ๋งํ•จ

- "Selectors" ๋ผ๊ณ  ๋ถˆ๋ฆฌ๋Š” ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ์ƒํƒœ๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ  ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ด๋ฅผ ์ด์šฉํ•˜์—ฌ ์ง€์—ฐ๋กœ๋”ฉ์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Œ

 

(Recoil) Immutable ์ด๋ž€?


Immutable์€ ๋ณ€๊ฒฝ ๋ถˆ๊ฐ€๋Šฅํ•œ ๊ฒƒ์„ ์˜๋ฏธํ•˜๋Š” ๊ฐœ๋…์ด๋‹ค. ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€๊ฒฝ ๋ถˆ๊ฐ€๋Šฅํ•จ์œผ๋กœ ์จ ์˜ˆ์ธก๊ฐ€๋Šฅํ•˜์—ฌ ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ๋ถ€์ž‘์šฉ์„ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค. 

 

Recoil ๊ณผ Redux ์ฐจ์ด์  ์š”์•ฝ

๋‘˜์˜ ๊ฐ€์žฅ ํฐ ์ฐจ์ด์ ์€ ์ƒํƒœ๊ด€๋ฆฌ์˜ ์ ‘๊ทผ ๋ฐฉ์‹์ด๋‹ค. 

 

Recoil์€ React ์ปดํฌ๋„ŒํŠธ ๋‚ด์—์„œ ์ง์ ‘์ ์œผ๋กœ ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ  ๊ณต์œ ํ•˜๋Š”๋ฐ ์ดˆ์ ์„ ๋‘” ๋ฐ˜๋ฉด, 

 

Redux๋Š” ์ค‘์•™์ง‘์ค‘ํ™”๋œ(Reducer) ์ƒํƒœ ์ €์žฅ์†Œ์™€ ์•ก์…˜์„ ํ†ตํ•œ ์ƒํƒœ ๋ณ€ํ™” ๊ด€๋ฆฌ ์ค‘์ ์„ ๋‘์—ˆ๋‹ค. 

 

Recoil์€ ์ปดํฌ๋„ŒํŠธ๊ฐ„ ์ƒํƒœ๊ณต์œ ๋ฅผ ๊ฐ„ํŽธํ•˜๊ฒŒ ๋งŒ๋“ค๊ณ , Redux๋Š” ๋ณต์žกํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ƒํƒœ๊ด€๋ฆฌ์™€ ๋ฏธ๋“ค์›จ์–ด ๊ธฐ๋Šฅ์„ ๊ฐ•์กฐํ•œ๋‹ค.

 


๐Ÿ”— ์ฐธ๊ณ 

https://tech.osci.kr/2022/06/16/recoil-state-management-of-react/

 

Recoil, ๋ฆฌ์•กํŠธ์˜ ์ƒํƒœ๊ด€๋ฆฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ - ์˜คํ”ˆ์†Œ์Šค์ปจ์„คํŒ… ํ…Œํฌ๋ธ”๋กœ๊ทธ

Recoil ๋งŒ์„ ์œ„ํ•œ ๊ธ€์ด์ง€๋งŒ, ํ•ด๋‹น ๊ธฐ์ˆ ์„ ํƒ๊ตฌํ•˜๊ธฐ ์ „์— ๊ฐ™์€ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๊ณ  ์žˆ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ๋น„๊ต๋ฅผ ํ•˜๋Š”๊ฒƒ์€ ์ƒ๋‹นํžˆ ์ค‘์š”ํ•œ ์ผ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.Frontend ๊ฐœ๋ฐœ์„ ํ•˜๋ฉด์„œ state

tech.osci.kr

https://recoiljs.org/ko/docs/introduction/core-concepts/

 

์ฃผ์š” ๊ฐœ๋… | Recoil

๊ฐœ์š”

recoiljs.org

 

 

 

 

profile

๊ณต์‚ผ

@g_three

ํฌ์ŠคํŒ…์ด ์ข‹์•˜๋‹ค๋ฉด "์ข‹์•„์š”โค๏ธ" ๋˜๋Š” "๊ตฌ๋…๐Ÿ‘๐Ÿป" ํ•ด์ฃผ์„ธ์š”!