참고 https://learnyousomeerlang.com/finite-state-machines#what-are-they 이전글 https://ojt90902.tistory.com/1688 5. FSM을 위한 예제 → 게임 내의 거래 시스템 실용적인 예제를 위해 온라인 게임에서 플레이어들끼리 거래를 FSM으로 구현해보고자 한다. 아래 FSM은 복잡하기 때문에 시나리오 자체를 이해하는데 난이도가 높다. 5.1 시나리오 설정 거래 요청 거래 수락 아이템 제안 제안 철회 거래 준비 완료 일방적으로 거래 취소하기 게임 내의 거래 시스템은 다음 작업이 가능해야한다. 그리고 전반적인 동작 방식은 다음과 같다. 각 플레이어는 자신의 FSM을 가진다. → A는 A's FSM을 가짐. 각 플레이어는 FSM을 통해 통..
참고 https://learnyousomeerlang.com/finite-state-machines#what-are-they 1. FSM(Finite State Machine)과 간단한 예시 FSM (유한상태머신)은 특정한 수의 State를 가지고, 이 중 하나의 State가 항상 Active되는 추상적인 모델을 의미한다. Dog에 대한 세 가지 State를 정의한 FSM를 살펴보면 다음과 같다. barks wag tail sits 짖고, 꼬리를 흔들고, 앉아있는 상태가 있다. 그리고 각 상태는 특정 작업이 트리거 되었을 때 다른 상태로 전이된다. 예를 들어 'sits' 상태의 개는 'see squirrels' 입력이 들어왔을 때 'barks' 상태로 전이된다. 위는 또 다른 예시인 고양이의 FSM이다...
참고 https://learnyousomeerlang.com/event-handlers#handle-this 1. Event Handlers 이전 글(https://ojt90902.tistory.com/1672)에서 작성했던 Pub - Sub 모델은 특정 이벤트가 발생했을 때, EventServer가 구독자에게 이벤트를 전송해준다. 이벤트를 받은 구독자들이 그 이벤트에 대한 각각의 작업을 진행한다. 이 방식은 각 구독자 프로세스가 이벤트를 따로 처리하기 때문에 '처리하는데 오랜 시간이 걸리는 함수'를 실행하는 경우에는 유용하다. 그러나 간단한 작업일 경우, 이벤트 구독을 기다리는 프로세스에 CPU 스케쥴러를 소모하기 때문에 컴퓨팅 파워를 효율적으로 사용하지 못할 수 있다. 이벤트마다 처리해야 할 작업이 ..
참고 https://learnyousomeerlang.com/building-applications-with-otp#a-pool-of-processes 1. Building an Application With OTP 얼랭 Application은 관련된 코드와 프로세스로 이루어진 하나의 그룹이다. OTP Application은 프로세스에 OTP behaviour를 사용해서 VM이 프로세스를 설정, 해체하는 방법을 알려주는 형태다. 예를 들어 OTP Behaviour를 사용하는 경우, init(), terminate() 등이 구현되어야 한다. 이번 장에서는 OTP Application의 일부를 작성할 것이고, 가장 먼저 프로세스 풀을 구현하는 방법에 대해서 이야기한다. 프로세스 풀은 어플리케이션에서 실행되는..
참조 https://learnyousomeerlang.com/supervisors#from-bad-to-good 1. From Bad To Good 이전에 구현했던 Supervisor는 process_flag(trap_exit, treu)를 이용해 시스템 프로세스가 되어서 워커 프로세스의 종료 신호를 받고 되살리는 작업을 했었다. 그런데 이 단순한 Supervisor는 근본적인 문제 두 가지를 가지고 있다. 단순 통신 오류로 Retry 한번만 다시 하면 사용할 수 있는 프로세스인데, 죽이고 처음부터 시작해야 함. 하나의 Supervisor는 하나의 워크 프로세스만 관리할 수 있음. OTP에서 제공해주는 슈퍼바이저는 위 단점을 해결해준다. 2. Supervisor Concepts 슈퍼바이저는 슈퍼바이저 -..
* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.