Akka.NET은 .NET 환경에서 동시성(Concurrency) 및 분산(Distributed) 시스템을 쉽게 구축하기 위한 액터 모델(Actor Model) 프레임워크. 원래 Java/Scala 용으로 개발된 Akka를 .NET으로 포팅한 것이다.
핵심 개념: 액터 모델 (Actor Model)
복잡한 동시성 문제를 락(Lock)이나 스레드(Thread)를 직접 다루지 않고, "액터"라는 독립적인 객체들이 메시지를 주고받는 방식으로 해결
- 액터 (Actor): 상태(State)와 행동(Behavior)을 가진 독립적인 작업 단위. 각 액터는 자신만의 우편함(Mailbox)을 가진다.
- 메시지 (Message): 액터 간에 주고받는 불변(Immutable) 데이터.
- 통신: 액터는 다른 액터의 상태를 직접 수정할 수 없으며, 오직 메시지를 보내서만 통신한다. 이는 공유 메모리로 인한 경쟁 상태(Race Condition)나 데드락(Deadlock)을 원천적으로 방지한다.
사무실 비유:
- 액터는 각자 자기 책상(상태)을 가진 직원입니다.
- 다른 직원의 책상을 마음대로 건드릴 수 없습니다.
- 업무 요청은 쪽지(메시지)를 써서 상대방의 수신함(Mailbox)에 넣어야 합니다.
- 직원은 수신함에 온 쪽지를 순서대로 하나씩 처리합니다.
주요 특징 및 장점
- 높은 동시성 (High Concurrency)
- 수백만 개의 가벼운(Lightweight) 액터를 생성할 수 있음. OS 스레드에 직접 매핑되지 않아 매우 효율적이다.
- 장애 극복 및 자기 회복 (Fault-Tolerance & Self-Healing)
- 액터는 부모-자식 관계의 계층 구조(Hierarchy)를 이룬다.
- 자식 액터에서 에러가 발생하면, 부모 액터(Supervisor)가 이를 감지하고 정책(다시 시작, 중지 등)에 따라 자동으로 복구한다. "Let it crash"(고장 나도록 놔둔다) 철학을 구현.
- 위치 투명성 (Location Transparency)
- 메시지를 보내는 코드는 상대 액터가 같은 프로세스에 있는지, 다른 서버에 있는지 신경 쓸 필요가 없다. 단일 서버용으로 개발한 코드를 거의 그대로 분산 환경으로 확장할 수 있다.
- 고성능 (High Performance)
- 비동기 메시지 처리 방식으로 초당 수백만 개의 메시지를 처리할 수 있습니다.
언제 사용하나요?
- 대규모 실시간 데이터 처리: IoT, 금융 거래, 실시간 분석
- 온라인 게임 서버: 수많은 플레이어의 상태와 상호작용을 동시에 처리