이 포스팅은 nact.io 공식 홈페이지를 번역한 글입니다.
[NEW] 이제 공식 사이트에서도 한글 문서가 제공됩니다. https://nact.io/ko_kr

상태가 있는 액터

액터 시스템의 주요 장점 가운데 하나는 바로 상태가 있는 서비스를 안전하게 생성하는 방법을 제공하는 것입니다. Nact에서는 spawn 함수를 이용해서 상태 있는 액터를 생성합니다.

아래의 예제에서, 상태는 비어있는 객체 state = {} 로 초기화됩니다. 액터가 메시지를 수신할 때마다, 현재 상태는 메시지 핸들러 함수의 첫번째 인자로 들어갑니다.1 한 번도 들어오지 않았던 이름(msg.name)이 들어오면, 메시지 핸들러 함수는 기존의 상태(state)에 새로운 이름(msg.name)을 추가해서 새로운 상태로 반환합니다. 만약 이미 들어왔던 이름(msg.name)이라면 그냥 기존의 상태를 그대로 반환합니다. 이때 반환된 상태는 다음 번 메시지 핸들러 함수 호출 시 state 인자의 값으로 사용됩니다.

const statefulGreeter = spawn(
  system, 
  (state = {}, msg, ctx) => {
    const hasPreviouslyGreetedMe = state[msg.name] !== undefined
    if (hasPreviouslyGreetedMe) {
      console.log(`Hello again ${msg.name}.`)
      return state;
    } else {
      console.log(
        `Good to meet you, ${msg.name}.\nI am the ${ctx.name} service!`
      )
      return { ...state, [msg.name]: true }
    }
  },
  'stateful-greeter'
)

References


  1. Redux에서 reducer 함수를 작성해 본 개발자에게는 매우 익숙한 모양입니다.