Akka
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
Akka는 스칼라와 자바를 위한 액터 기반의 동시성 프레임워크이다. 2006년 필리프 할러에 의해 스칼라의 일부로 처음 출시되었으며, 요나스 보네르가 얼랭의 동시성 모델에서 영감을 받아 개발했다. Akka는 메시지 기반 및 비동기 방식으로 동시성을 처리하며, 액터 모델을 구현하여 오류를 계층적으로 처리한다. Lightbend 플랫폼의 일부이며, 스프레이, 플레이 프레임워크, 아파치 스파크 등 다양한 라이브러리와 통합되어 사용된다. 2022년 Lightbend는 Akka의 라이선스를 아파치 라이선스 2.0에서 비즈니스 소스 라이선스(BSL)로 변경했다.
2006년 7월, 필리프 할러가 작성한 액터 구현이 스칼라 2.1.7의 일부로 출시되었다.[41] 2008년 스칼라는 복잡한 서버 애플리케이션에 사용되어 주목받았지만, 동시성은 여전히 스레드-공유 메모리와 락(lock)을 필수적으로 사용하여 싱크를 맞추는 전형적인 방식으로 이뤄지고 있었다. 이러한 접근 방식의 어려움을 인식하고 얼랭 프로그래밍 언어의 라이브러리가 지원하는 고도의 동시성 쓰기, 이벤트 주도 애플리케이션으로부터 영감을 얻어, 요나스 보네르가 스칼라와 자바에 유사한 기능을 도입하기 위해 Akka를 만들었다. 보네르는 2009년 초부터[42] Akka를 작업하기 시작했고, 그 해에 그것에 대한 그의 비전을 작성했다.[43] 첫 공식 릴리즈는 Akka 0.5로,[44] 2010년 1월에 발표되었다.[45] Akka는 현재 Play 프레임워크, 스칼라 프로그래밍 언어와 함께 Lightbend 플랫폼의 일부이다.
Akka 액터 기반 애플리케이션은 다음과 같은 특징을 갖는다:
2. 역사
2022년 9월, Lightbend는 Akka의 라이선스를 오픈 소스 라이선스인 아파치 라이선스 2.0에서 독점 소스 사용 가능 라이선스인 (BSL)로 변경한다고 발표했다. BSL 하의 새로운 코드는 3년 후에 아파치 라이선스로 사용 가능하게 된다.[9]
2. 1. 초기 개발
필리프 할러가 작성한 액터 구현은 2006년 7월에 스칼라 2.1.7의 일부로 출시되었다.[41] 2008년 스칼라는 복잡한 서버 애플리케이션에서의 사용에 대해 주목받았지만, 동시성은 여전히 스레드-공유 메모리와 락(lock)을 필수적으로 사용하여 싱크를 맞추는 전형적인 방식으로 이뤄지고 있었다. 이러한 접근 방식으로 생겨나는 어려움을 인식하고 얼랭 프로그래밍 언어의 라이브러리가 지원하는 고도의 동시성 쓰기, 이벤트 주도 애플리케이션으로부터 영감을 얻어, 요나스 보네르가 스칼라와 자바에 유사한 기능을 도입하기 위해 Akka를 만들었다. 보네르는 2009년 초부터[42] Akka를 작업하기 시작했고, 그 해에 그것에 대한 그의 비전을 작성했다.[43] 첫 공식 릴리즈는 Akka 0.5로,[44] 2010년 1월에 발표되었다.[45]
2. 2. 라이선스 변경
2022년 9월, Lightbend는 Akka의 라이선스를 오픈 소스 라이선스인 아파치 라이선스 2.0에서 독점 소스 사용 가능 라이선스인 (BSL)로 변경한다고 발표했다. BSL 하의 새로운 코드는 3년 후에 아파치 라이선스로 사용 가능하게 된다.[9] 이러한 변화는 Akka 커뮤니티 내에서 논쟁을 불러일으켰으며, 일부 사용자들은 오픈 소스 모델에서 벗어나는 것에 대한 우려를 표명하였다.
2. 3. 기술 리더십 변화
2011년 9월, 빅토르 클랑이 Akka 프로젝트의 기술 리더가 되었다.[10] 2012년 12월 빅토르가 Lightbend의 엔지니어링 이사가 되면서, 롤랜드 쿤이 Akka의 기술 리더가 되었다.[10]
3. 특징
Akka는 액터를 제공하는 코어 모듈을 포함한 모듈 구조를 띄고 있다. 다른 모듈들은 액터의 네트워크 분산, 클러스터 지원, 명령과 이벤트 소싱, 다양한 서드 파티 시스템과의 통합(예, 아파치 카멜, 제로MQ), 심지어 퓨처, 에이전트 같은 다른 병렬성 모델을 지원하는 것과 같은 기능을 추가할 수 있다.
3. 1. 액터 모델
Akka는 액터 모델을 구현한다. Akka 액터 기반 애플리케이션에서 동시성은 메시지 기반 및 비동기식으로 이루어진다. 일반적으로 변경 가능한 데이터는 공유되지 않으며 동기화 기본 요소가 사용되지 않는다. 액터가 상호 작용하는 방식은 동일한 호스트 또는 별도의 호스트에 있는지, 직접 또는 라우팅 기능을 통해 통신하는지, 소수 또는 다수의 스레드에서 실행되는지 등에 관계없이 동일하다. 이러한 세부 사항은 구성 메커니즘을 통해 배포 시점에 변경할 수 있으며, 프로그램을 수정하지 않고도 확장(더 강력한 서버 사용) 및 확장(더 많은 서버 사용)할 수 있다.
액터는 프로그램 오류와 관련하여 계층적으로 정렬되며, 오류는 액터의 감독자가 처리해야 하는 이벤트로 처리된다(어떤 액터가 오류를 트리거하는 메시지를 보냈는지에 관계없이). 얼랭과 달리 Akka는 부모 감독을 강제한다. 즉, 각 액터는 부모 액터에 의해 생성되고 감독된다.
3. 2. 위치 투명성
액터는 로컬 또는 원격 시스템에 위치할 수 있으며, 동일한 방식으로 통신한다. 액터가 상호 작용하는 방식은 동일한 호스트에 있는지, 별도의 호스트에 있는지, 직접 통신하는지, 라우팅 기능을 통해 통신하는지, 소수의 스레드에서 실행되는지, 많은 스레드에서 실행되는지 등과 관계없이 동일하다. 이러한 세부 사항은 구성 메커니즘을 통해 배포 시점에 변경할 수 있으며, 프로그램을 수정하지 않고도 확장(더 강력한 서버 사용) 및 확장(더 많은 서버 사용)할 수 있다. 이는 애플리케이션을 분산 환경으로 쉽게 확장할 수 있게 한다.
3. 3. 계층적 오류 처리
Akka는 액터 모델을 구현하여 프로그램 오류를 계층적으로 처리한다. 각 액터는 부모 액터에 의해 생성되고 감독을 받으며, 오류는 액터의 supervisor에게 이벤트로 전달된다. Akka는 부모 감독(parental supervision)을 강조하여, 자식 액터에서 발생한 오류를 부모 액터가 처리하도록 한다. 이러한 방식은 시스템의 내결함성을 향상시키는 데 기여한다.[1]
3. 4. 모듈 구조
Akka는 액터 모델을 구현하는 코어 모듈과, 다양한 기능을 추가하는 확장 모듈로 구성된다. 코어 모듈은 액터 시스템의 기본 기능을 제공한다. 확장 모듈은 다음과 같은 기능을 추가할 수 있다.
Akka 액터 기반 애플리케이션의 주요 특징은 다음과 같다.
4. 프로젝트 구조
Akka 프로젝트 개발은 Lightbend에 고용된 핵심 팀[10]이 주도하며, 활발한 커뮤니티가 이를 지원한다.[11] 현재는 클러스터 지원 확장에 중점을 두고 개발이 진행되고 있다. 2011년 9월, 빅토르 클랑(Viktor Klang)이 Akka 프로젝트의 기술 리더가 되었으며, 2012년 12월 빅토르가 Lightbend의 엔지니어링 이사가 되면서 롤랜드 쿤(Roland Kuhn)이 Akka의 기술 리더가 되었다.
5. 다른 라이브러리와의 관계
여러 프레임워크와 도구들이 Akka를 중심으로 생태계를 형성하고 있다.
- ''eventsourced''[16] 라이브러리는 Akka 액터를 위한 이벤트 기반 아키텍처 (도메인 주도 설계 참조) 지원을 제공한다.
- Socko 웹 서버 라이브러리는 Akka 애플리케이션용 REST API 구현을 지원한다.[15]
- 아파치 플링크 (분산 스트림 및 배치 데이터 처리를 위한 플랫폼) RPC 시스템은 Akka[20]를 사용하여 구축되었지만 v1.14부터 격리되었다.[21]
5. 1. 스프레이(Spray)
스프레이 툴킷[12]은 Akka를 사용하여 구현되었으며, HTTP 서버와 RESTful API 생성을 위한 DSL과 같은 관련 기능을 제공한다.5. 2. 플레이 프레임워크(Play Framework)
플레이 프레임워크는 웹 애플리케이션 개발을 위해 Akka와의 통합을 제공한다.[13]5. 3. 아파치 스파크(Apache Spark)
1.6 버전까지 아파치 스파크는 노드 간 통신을 위해 Akka를 사용했다.[14]5. 4. 기타
Socko, 개틀링, 스칼라트라, 바딘, 아파치 플링크, 라곰 등 다양한 프레임워크 및 도구들이 Akka와 통합되거나 Akka를 기반으로 한다.[15][17][18][19][20] GitHub에는 Akka를 사용하는 250개 이상의 공개 프로젝트가 등록되어 있다.[23]6. Akka 관련 출판물
Akka에 관한 서적과 웹 기사 등 다양한 자료가 출판되었다.[36][37][38][39]
6. 1. 서적
Akka의 상업적 사용법을 설명하는 웹 기사[36][37]와 Akka에 대한 개요 기사[38][39]도 있다.
6. 2. 기타 자료
Akka에 관한 여러 권의 책이 있다.- Akka Essentials[24]
- Akka 코드 예제
- Akka Concurrency[25]
- Akka in Action, 제2판[26]
- Akka in Action[27]
- Effective Akka[28]
- Java, Scala 및 Akka 코드 예제를 특징으로 하는 Akka 2.0을 사용한 Composable Futures[29]
Akka는 다음 책에도 등장한다.
- P. 할러의 "Actors in Scala"[30]
- N. 레이차우두리의 "Scala in Action"[31]
- D. 왐플러의 "Functional Programming for Java Developers"[32]
- A. 알렉산더의 "Scala Cookbook"[33]
- V. 수브라마니암의 "Programming Concurrency on the JVM"[34]
- M. 베른하르트의 "Reactive Web Applications"[35]
Akka의 상업적 사용법을 설명하는 많은 웹 기사[36][37] 외에도, Akka에 대한 개요 기사도 있다.[38][39]
참조
[1]
웹사이트
Akka 23.10 Released
https://akka.io/blog[...]
2023-12-27
[2]
웹사이트
Scala Actors Introduction
https://doc.akka.io/[...]
2018-09-17
[3]
웹사이트
The Scala Actors Migration Guide
http://docs.scala-la[...]
2013-03-13
[4]
웹사이트
Scala Version History - Older versions
http://www.scala-lan[...]
scala-lang.org
2009-02-16
[5]
웹사이트
init project setup
https://github.com/a[...]
github.com
2009-02-16
[6]
웹사이트
Akka Actor Kernel
http://permalink.gma[...]
2017-07-13
[7]
웹사이트
v0.5
https://github.com/a[...]
github.com
2009-07-12
[8]
웹사이트
Introducing Akka - Simpler Scalability, Fault-Tolerance, Concurrency & Remoting through Actors
http://jonasboner.co[...]
jonasboner.com
2010-01-04
[9]
웹사이트
Why We Are Changing the License for Akka
https://www.lightben[...]
2022-09-07
[10]
웹사이트
Akka team
http://akka.io/team/
akka.io
2013-06-06
[11]
웹사이트
Akka contributors list
https://github.com/a[...]
github.com
2013-06-06
[12]
웹사이트
Spray toolkit
http://spray.io/
spray.io
2013-06-06
[13]
웹사이트
Play framework documentation: Integrating with Akka
http://www.playframe[...]
playframework.com
2013-06-06
[14]
웹사이트
Spark project sources
https://github.com/a[...]
github.com
2013-06-06
[15]
웹사이트
Socko Web Server
http://sockoweb.org/
sockoweb.org
2013-06-06
[16]
웹사이트
eventsourced library
https://github.com/e[...]
eligosource
2013-06-06
[17]
웹사이트
Gatling stress test tool
https://github.com/e[...]
github.com
2013-06-06
[18]
웹사이트
Akka - Scalatra
https://scalatra.org[...]
scalatra.org
2022-10-06
[19]
웹사이트
Vaadin in Akka
https://vaadin.com/b[...]
Vaadin.com
2014-04-26
[20]
웹사이트
Apache Flink - Akka for the win !
https://cwiki.apache[...]
flink.apache.org
2015-12-02
[21]
웹사이트
Apache Flink: Scala Free in One Fifteen
https://flink.apache[...]
2022-02-22
[22]
웹사이트
Lagom - Integrating with Akka
https://www.lagomfra[...]
[23]
웹사이트
Akka actor project corpus at GitHub
http://actor-applica[...]
cs.illinois.edu
2013-06-06
[24]
서적
Akka Essentials
http://www.packtpub.[...]
Packt Publishing
[25]
서적
Akka Concurrency
Artima
[26]
서적
Akka in Action, Second Edition
Manning Publications
[27]
서적
Akka in Action
Manning Publications
[28]
서적
Effective Akka
O'Reilly Media
[29]
서적
Composable Futures with Akka 2.0
Micronautics Research
[30]
서적
Actors in Scala
Artima
[31]
서적
Scala in Action
Manning Publications
[32]
서적
Functional Programming for Java Developers
https://archive.org/[...]
O'Reilly Media
[33]
서적
Scala Cookbook
O'Reilly Media
[34]
서적
Programming Concurrency on the JVM: Mastering Synchronization, STM, and Actors
https://archive.org/[...]
Pragmatic Bookshelf
[35]
서적
Reactive Web Applications: Covers Play, Akka and Reactive Streams
Manning Publications
[36]
웹사이트
Juniper networks signs on with Scala
https://web.archive.[...]
gigaom.com
2012-06-25
[37]
웹사이트
Scaling the Klout API with Scala, Akka and Play
http://corp.klout.co[...]
2013-06-08
[38]
웹사이트
Open source Java projects: Akka
https://www.infoworl[...]
2013-05-08
[39]
웹사이트
Java Magazin 6.13
https://jaxenter.de/[...]
jaxenter.de
2013-06-08
[40]
웹인용
The Scala Actors Migration Guide
http://docs.scala-la[...]
2013-03-13
[41]
웹인용
Scala Version History - Older versions
http://www.scala-lan[...]
scala-lang.org
2009-02-16
[42]
웹인용
init project setup
https://github.com/a[...]
github.com
2009-02-16
[43]
웹인용
Akka Actor Kernel
http://permalink.gma[...]
2013-03-03
[44]
웹인용
v0.5
https://github.com/a[...]
github.com
2009-07-12
[45]
웹인용
Introducing Akka - Simpler Scalability, Fault-Tolerance, Concurrency & Remoting through Actors
http://jonasboner.co[...]
jonasboner.com
2010-01-04
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com