상태없는 프로그래밍(stateless programming)과 상태 있는 프로그래밍(stateful programming)은 프로그램이 상태를 다루는 방식에 차이가 있습니다. 이 두 개념과 함께 Akka 액터의 라이프 사이클에 대해 설명드리겠습니다.

1. 상태없는 프로그래밍 (Stateless Programming)

  • 정의: 상태없는 프로그래밍에서는 개별 함수 호출이나 요청이 이전 호출이나 다른 사용자와의 공유된 상태에 영향을 받지 않음. 각 호출이 독립적으로 처리되며, 호출이 완료된 후에는 상태가 유지되지 않습니다.
  • 장점:
    • 확장성: 요청 간의 상태 공유가 없기 때문에 쉽게 병렬 처리 및 확장이 가능.
    • 단순화: 상태 관리가 필요 없어 코드가 간결하고 유지보수가 쉬움.
    • 재사용성: 상태에 의존하지 않기 때문에 함수 재사용성이 높음.
  • 단점: 특정 상황에서 매 요청마다 상태 정보를 다시 제공하거나 초기화해야 하므로, 상태를 지속적으로 불러와야 할 경우 성능 이슈가 발생할 수 있습니다.
    • 주로 단일지점의 DB를 항상 호출 하기때문에 성능 이슈가 있을수있으며, 확장이 용이하다란 장점은 역설적으로 단일지점 병목을 유발함으로 탄력적 성능확장에는 도움되지 못할수 있습니다.

2. 상태 있는 프로그래밍 (Stateful Programming)

  • 정의: 상태 있는 프로그래밍은 프로그램이 상태를 유지하며, 각 함수 호출이나 요청이 이 상태에 영향을 줄 수 있음. 예를 들어, 데이터베이스나 메모리에 저장된 상태를 이용해 프로그램의 흐름을 제어합니다.
  • 장점:
    • 효율적 데이터 처리: 상태를 유지하므로, 반복적인 데이터 초기화가 필요 없고 효율적인 데이터 처리가 가능.
    • 연속적인 흐름: 상태를 기반으로 지속적으로 상호작용해야 하는 작업에 적합.
  • 단점:
    • 복잡성 증가: 상태를 지속적으로 관리해야 하므로, 동시성 문제나 데이터 일관성 문제 등이 발생할 수 있음.
    • 확장성 저하: 상태를 각 노드에 유지해야 하는 경우 분산 시스템에서 확장이 어려워질 수 있음.
      • 상태있는 객체를 네트워크 분산처리를 하는것은 어려울수 있습니다. 


액터는 상태를 가진 객체로 상태없는 개발방식과 비교해 어려울수 있지만

스레드모델로 분산확장을 시도하는것보다 쉬울수 있습니다. 


Akka 액터의 라이프 사이클

Akka의 액터 시스템은 액터의 생명 주기를 관리하며, 다음 단계로 구성됩니다.

  1. 생성 (Creation): 액터는 actorOf 메서드를 호출하여 생성됩니다. 생성 시 액터의 초기 상태가 설정되고, 메시지를 받을 준비를 합니다. 생성 시 부모 액터가 할당되어 상위-하위 구조가 만들어집니다.

  2. 시작 (Started): 액터가 생성되면 preStart 메서드가 호출됩니다. 이 단계에서 액터는 자신의 상태를 초기화하고 메시지를 받을 준비를 마칩니다.

  3. 실행 (Running): 액터는 활성 상태로 메시지를 받을 준비가 된 상태입니다. 액터가 실행 중일 때, receive 메서드를 통해 메시지를 처리하며, 필요에 따라 상태를 변경하거나 응답을 보낼 수 있습니다.

  4. 중단 (Stopping): 액터가 context.stop 또는 poisonPill 메시지를 받으면 중단 단계로 들어갑니다. 이 단계에서 postStop 메서드가 호출되어 자원을 해제하거나 종료 작업을 수행합니다. 액터는 더 이상 메시지를 받지 않으며, 액터 시스템에서 제거됩니다.

  5. 재시작 (Restarting): 예외가 발생할 경우, 액터는 Supervisor Strategy에 따라 재시작될 수 있습니다. 재시작 시 preRestart 메서드가 호출되어 기존의 상태를 정리하고, postRestart 메서드가 호출되어 새 상태로 초기화합니다. 이로써 액터는 예외 상황 이후에도 지속적으로 메시지를 처리할 수 있게 됩니다.

이러한 라이프 사이클을 통해 Akka 액터는 안정성과 회복성을 보장하며, 복잡한 상태 관리와 비동기 메시지 처리를 효율적으로 수행할 수 있습니다.


more detail : https://www.ficode.co.uk/blog/akka-actor-lifecycle-explained





  • No labels