액터 : 상태와 행동을 캡슐화하는 객체. 메시지를 주고받아 통신.
액터를 사람처럼 생각하면 이해하기 쉬움.
부분 작업을 나누고 문제 상황을 어떻게 처리할지 고민하면 됨.
주의사항
ActorSystem은 무거운 구조임. 스레드도 할당하게 되므로, 논리적인 애플리케이션당 하나만 생성하는 것이 좋다.
액터는 자연스럽게 계층 구조를 형성한다.
특정 역할을 담당하는 액터는 작업을 더 작은 부분으로 나누기 위해 자식 액터를 생성함.
중요한 데이터를 다루는 액터는 위험한 작업을 자식 액터에게 위임해야 한다.
이를 **에러 커널 패턴(Error Kernel Pattern)**이라고 한다.
한 액터가 다른 액터에 의존한다면, 그 액터의 상태를 주시해야 한다.
하나의 액터가 여러 역할을 담당한다면, 이를 별도의 자식 액터로 분리하는 것이 좋다.
액터 시스템은 스케줄링, 설정, 로깅 등을 관리하는 단위이며 여러 액터 시스템이 동시에 존재할 수 있다.
액터는 이벤트 주도 방식으로 이벤트를 처리하고 응답 또는 추가 요청을 생성해야 한다.
효율적으로 작동해야 하며 다른 리소스를 차지하지 않아야 한다.
불가피한 경우가 아니라면 액터가 외부 엔터티에서 블로킹 되어선 안된다.
가변 객체를 액터 간에 주고받지 않아야 한다.
액터 시스템은 자동으로 많은 것을 처리하기 때문에 메시지 처리 순서 등에 대해 걱정할 필요가 없다.
애플리케이션이 모든 작업을 마쳤다면, ActorSystem의 terminate 메소드를 호출하여 액터 시스템을 종료할 수 있다.
CoordinatedShutdown을 이용하면 액터 시스템이 종료되는 동안 추가 작업을 실행할 수 있다.