ํ๋ก๊ทธ๋๋จธ๋ก์ ์ด๋ค ๊ธฐ์ ์ ์ฒ์ ๋ฐฐ์ธ ๋์๋ ๋ช ์ธ๋ณด๋ค๋ ์ญํ , ์ฆ ์ฉ๋ก ์์ฃผ๋ก ์ ๊ทผํ๋ ๊ฒ์ด ์ข๋ค.
Actor ๋ชจ๋ธ์ Akka(Scala), Elrang์์ ๋์์ฑ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ ๊ฐ๋ ์ด๋ผ๋ ๊ฒ์ ์๊ณ ์์๊ณ ,
Xstate๋ก ์ข ๋ ๊น์ด ์์๋ณผ ๊ธฐํ๋ฅผ ๊ฐ์ ธ๋ณด๋ ค ํ์ผ๋... ์์๊ฐ ๋ณ๋ก ์์ด์ ์ข ๋ ๋ฆฌ์์น๋ฅผ ํด๋ด์ผ ํ ๊ฒ ๊ฐ๋ค.
ํด๋น ํฌ์คํธ์์๋ ์ ๋ง ๊ฐ๋จํ๊ฒ๋ง ์์๋ณธ๋ค.
Actor์ ๊ท์น
๋ชจ๋ ๊ณ์ฐ์ ์กํฐ ๋ด๋ถ์์ ์ผ์ด๋๋ค.
๊ฐ ์กํฐ๋ ๋ฉ์ธ์ง๋ก๋ง ํต์ ํ๋ค.
์กํฐ๋ ๋ฉ์ธ์ง์ ์๋ตํ์ฌ ๋ค์ ํ๋์ ์ํํ๋ค.
- ์์ ์ ํ๋, ์ํ๋ฅผ ๋ฐ๊พผ๋ค.
- ๋ค๋ฅธ ์กํฐ์๊ฒ ๋ฉ์ธ์ง๋ฅผ ๋ฐ๊พผ๋ค.
- ์ ํ ๊ฐ์ ์ฐจ์ผ๋ ์กํฐ๋ฅผ ์์ฑํ๋ค.
- ์๋ ๋์์ฑ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ฌ ๋์จ ๊ฐ๋ ์ด๊ธฐ ๋๋ฌธ์ด๋ค.
๊ฐ๋จํ ์์ : ์์ ํ๋ก์ธ์ค๋ฅผ ์์ฑํ๋ ๋ถ๋ชจ ์กํฐ
๋ถ๋ชจ / ์์ ๋จธ์ ์ ๋ง๋ค๊ธฐ ์ ์, ์์ ๋ถ๋ถ์ ์๋์ ๊ฐ์ด ์ค์ ํ๋ค. ์ฆ, ์ํ ์ ์ด๊ฐ ๋ฐ์ํ ๋๋ง๋ค ๋ก๊ทธ๋ฅผ ์ถ๋ ฅํ๋ค.
const service = interpret(parentMachine, { devTools: true }).onTransition(
(state) => {
console.log(state.value);
}
);
service.start();
service.send("TOGGLE");
๋ ๊ฐ๋จํ ์์ ๋จธ์ ๋ถํฐ ์ค์ ํ๋ค
const remoteMachine = createMachine({
id: "remote",
initial: "offline",
states: {
// ๋ถ๋ชจ์ wake์ ์๋ตํ์ฌ ์ํ๋ฅผ online์ผ๋ก ์ ์ด
offline: { on: { WAKE: "online" } },
// online ์ํ๋ก ์ ์ดํ ํ 5000ms ํ์ ๋ถ๋ชจ์ ๋ฉ์ธ์ง(์ด๋ฒคํธ) ์ ๋ฌ.
online: { after: { 5000: { actions: sendParent("REMOTE.ONLINE") } } }
}
});
๋ถ๋ชจ์ ์์์ ํ๋ ฅ ๋์์ ๋ค์๊ณผ ๊ฐ๋ค.
- ๋ถ๋ชจ์ ์ด๊ธฐ ์ํ๋ waiting์ด๊ณ , entry ๋ด์ ์ฝ๋ฐฑ์ด ์คํ๋์ด, localOne์ ์์ ํ๋ก์ธ์ค๋ฅผ ํ ๋นํ๋ค. ์์ ํ๋ก์ธ์ค๋ remoteMachine์ ํฌํจํ๋ค.
- ์์ ํ๋ก์ธ์ค์ remoteMachine์ offline ์ํ์ด๋ค. LOCAL.WAKE ์ด๋ฒคํธ๋ฅผ ํตํด, ์์ ๋จธ์ ์ WAKE ์ด๋ฒคํธ๋ฅผ ์ ๋ฌํ๋ค.
- ์์ ํ๋ก์ธ์ค๋ WAKE ์ด๋ฒคํธ์ ์๋ตํด ์์ ์ ์ํ๋ฅผ online์ผ๋ก ๋ณ๊ฒฝํ๋ค. ๊ทธ๋ฆฌ๊ณ ์ํ ๋ณ๊ฒฝ ์๋ฃ ํ 5์ด ํ ๋ถ๋ชจ๋ก REMOTE.ONLINE ๋ฉ์ธ์ง๋ฅผ ๋ฐ์์ํจ๋ค.
- ๋ถ๋ชจ๋ REMOTE.ONLINE์ ์๋ตํด ์์ ์ ์ํ๋ฅผ connected๋ก ๋ณ๊ฒฝํ๋ค
const parentMachine = createMachine({
id: "parent",
initial: "waiting",
context: { localOne: null },
states: {
waiting: {
// 1. ์ด๊ธฐ ์ํ๊ฐ waiting์ด๊ณ , ๋ฐ๋ผ์ entry ๋ด์ ์ฝ๋ฐฑ์ด ์คํ๋์ด, localOne์ ์์ ํ๋ก์ธ์ค๋ฅผ ํ ๋นํ๋ค.
entry: assign({ localOne: () => spawn(remoteMachine) }),
on: {
"LOCAL.WAKE": {
actions: send({ type: "WAKE" }, { to: (context) => context.localOne })
},
"REMOTE.ONLINE": { target: "connected" }
}
},
connected: {}
}
});
์ด๋ ๊ฒ ์์ ํ๋ก์ธ์ค์ ๋ถ๋ชจ ํ๋ก์ธ์ค ๊ฐ์ ๋น๋๊ธฐ ํ์ ์ํ ๋จธ์ ์ ๋ง๋ค ์ ์๋ค.
์ฐธ๊ณ :
Spawning Child State With XState : ๊ณต์ ๋ฌธ์ ์์