정의

Actor Model은 1973년 Carl Hewitt 등이 제안한 동시성(concurrency) 계산의 수학적 모델로, 액터(Actor) 를 계산의 기본 단위로 삼습니다. 액터는 메시지를 받으면

  1. 지역 연산 수행,
  2. 새로운 액터 생성,
  3. 다른 액터에게 메시지 전송,
  4. 차후 메시지를 처리할 행동(behavior) 변경
    동시에 결정‧실행할 수 있습니다.

주요 특징

  • 비동기 메시지 전달: 액터 간 상호작용은 잠금(lock) 이나 공유 메모리 없이 오직 메시지로만 이루어집습니다. 순서는 보장되지 않으며, 송신자는 수신자의 현재 상태를 알 필요가 없습니다.
  • 고립된 상태: 각 액터는 자신의 내부 상태를 직접 변경할 수 있지만, 다른 액터의 상태에는 오직 메시지를 통해서만 간접적으로 영향을 줍니다.
  • 동적 토폴로지: 메시지 안에 주소(참조) 를 담아 보내면, 런타임 동안 액터 그래프(구조)가 자유롭게 변형됩니다.
  • 내재적(inherent) 동시성: “모든 것은 액터다”라는 철학 아래, 순차 실행은 동시성의 특수한 사례로 취급됩니다.

장점

  • 데드락·경쟁 조건 감소: 공유 상태가 없고 메시지가 비동기이므로 전통적 락 기반 동시성 문제를 자연스럽게 회피합니다.
  • 확장성 & 분산 친화성: 네트워크 넘어로도 동일한 모델을 적용할 수 있어 Erlang, Akka(Scala/Java), Orleans(.NET) 같은 분산 시스템 프레임워크의 이론적 토대가 됩니다.
  • 모듈성: 액터는 고유 주소와 행동을 갖는 캡슐화된 객체 이므로, 시스템 확장이 용이합니다.

한계

  • 메시지 지연·순서: 비동기 특성상 메시지 순서 보장이 필요하면 별도 로직이 필요합니다.
  • 디버깅 난이도: 액터 수가 많아지면 비동기 흐름 추적이 어려워질 수 있습니다.

어디에 쓰이나?

분야대표 활용 • 프레임워크
고가용성 통신Erlang/OTP – WhatsApp, RabbitMQ
분산 데이터 처리Akka – Event‑Sourcing, CQRS, Spark Stream
클라우드 게임·서비스Microsoft Orleans – Halo, Azure 서비스
현대 언어 런타임Swift Concurrency(Structured actors), Kotlin kotlinx.coroutines actor API

참고 문서