Akka
Akka는 오픈 소스 툴킷으로, JVM 상의 동시성과 분산 애플리케이션을 단순화하는 런타임이다. Akka는 동시성을 위한 여러 프로그래밍 모델을 지원하지만, Erlang으로부터 영향을 받아 actor 기반의 동시성이 두드러진다. 자바와 스칼라 언어 모두로 작성이 가능하다.
Actor Model
액터 모델은 “모든 것은 액터다(Everything is an actor)”라는 기본 철학을 가지고 갑니다. OOP에서의 “모든 것은 객체다(Everything is an object)”라는 철학과 비슷하지만, 객체 지향 소프트웨어는 기본적으로 순차적 실행을 하지만 액터 모델은 본질적으로 동시성을 제공하는 점이 다릅니다.
그러면 액터(Actor)란 무엇이냐 라는 질문이 나올 수 있습니다. 액터는 비동기적으로 메세지를 처리할 수 있는 computational entity로 다음과 같은 특징이 있습니다:
- 다른 액터에게 유한한 개수의 메세지를 보낼 수 있습니다.
- 유한한 개수의 새로운 액터를 만들 수 있습니다.
- 다른 액터가 받을 메세지에 수반될 행동(behavior)을 지정할 수 있습니다.
실제 사람과의 커뮤니케이션을 상상하면 좀 더 이해하기 편합니다. 사람들은 초능력이 존재하지 않기에 타인과 머릿속 생각을 직접 공유하지 못하고, 대화(message)를 통해 대화를 주고받습니다.
액터 또한 똑같습니다. 메세지를 주고받아 다른 액터와 상호작용을 합니다. 액터가 차지하는 메모리 공간은 독립적이며, 다른 스레드나 액터가 접근할 수 없습니다. 다시 말하면, 메모리 공유 없이 메세지 전달만을 사용하기에 공유 메모리로 인한 교착 상태 등의 골치 아픈 상황들을 피할 수 있습니다.
이러한 액터 모델을 구현한 라이브러리 중에서 대표적으로 Akka가 있습니다. Akka는 JVM 상에서 동작하며 JAVA와 Scala 언어를 사용하는 고도의 동시(concurrent) 및 분산(distributed) 응용 프로그램을 빌드하기 위한 툴킷 및 런타임입니다. 또한 Akka.NET에 액터 모델에 대한 기초부터 스스로 배울 수 있도록 좋은 강의를 배포하고 있습니다. 그 강의를 이수하며 배운 내용을 주제로 포스트를 작성 해보겠습니다.
참고 블로그
https://blog.rajephon.dev/2018/11/25/akka-00/
'개발이론' 카테고리의 다른 글
맥 터미널 python 명령어 버전 수정하기 (0) | 2020.06.02 |
---|---|
객체 지향 프로그래밍 (0) | 2020.05.29 |
좋은 코드란 (윤성우의 열혈C프로그래밍에서) (0) | 2020.05.12 |