Akka

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

Akka는 스칼라와 자바를 위한 액터 기반의 동시성 프레임워크이다. 2006년 필리프 할러에 의해 스칼라의 일부로 처음 출시되었으며, 요나스 보네르가 얼랭의 동시성 모델에서 영감을 받아 개발했다. Akka는 메시지 기반 및 비동기 방식으로 동시성을 처리하며, 액터 모델을 구현하여 오류를 계층적으로 처리한다. Lightbend 플랫폼의 일부이며, 스프레이, 플레이 프레임워크, 아파치 스파크 등 다양한 라이브러리와 통합되어 사용된다. 2022년 Lightbend는 Akka의 라이선스를 아파치 라이선스 2.0에서 비즈니스 소스 라이선스(BSL)로 변경했다.

Akka - [IT 관련 정보]에 관한 문서
📚 더 읽어볼만한 페이지
  • 소프트웨어 개발 키트 - 퀵타임
    퀵타임은 1991년 애플에서 처음 출시된 멀티미디어 프레임워크로, 다양한 기능 업데이트를 거치며 발전했으나 애플의 소극적인 지원으로 쇠퇴하였고, 비디오 및 오디오 트랜스코딩, 코덱 지원 등의 특징을 가지며 퀵타임 플레이어를 통해 다양한 파일 형식을 재생할 수 있도록 지원했으나, 2016년 4월 윈도우 버전 지원이 중단되었다.
  • 소프트웨어 개발 키트 - 넷빈즈
    넷빈즈는 1996년 자바 IDE 학생 프로젝트로 시작되어 썬 마이크로시스템즈를 거쳐 아파치 소프트웨어 재단에 기증된 오픈 소스 통합 개발 환경(IDE)으로, 다양한 언어를 지원하고 GUI 디자인 도구, 프로파일러 등 기능을 제공하며 자바 VM 운영체제에서 동작한다.
  • 자바 개발 도구 - GNU 컴파일러 모음
    GNU 컴파일러 모음(GCC)은 리처드 스톨먼이 1987년 처음 출시한 자유 소프트웨어 컴파일러 시스템으로, C, C++, Fortran, Ada, Go 등 다양한 프로그래밍 언어를 지원하며 여러 명령어 집합 아키텍처와 플랫폼에서 널리 사용된다.
  • 자바 개발 도구 - J 샤프
    J#은 마이크로소프트에서 개발한 .NET Framework 기반의 프로그래밍 언어로, 자바와 유사한 문법을 가지며 기존 자바 코드의 .NET 플랫폼 이전 및 .NET 언어와의 상호 운용성을 지원했으나 현재는 개발이 중단되었다.
  • 스칼라로 작성된 자유 소프트웨어 - 스칼라 (프로그래밍 언어)
    스칼라는 마틴 오더스키가 설계한 객체 지향 및 함수형 프로그래밍 언어이며, 자바 플랫폼에서 실행되고 자바 코드와 상호 운용이 가능하며, 아파치 스파크 등 다양한 곳에서 활용된다.
  • 스칼라로 작성된 자유 소프트웨어 - 아파치 스파크
    아파치 스파크는 대규모 데이터 처리를 위한 오픈 소스 분산 처리 시스템으로, 빠른 속도와 다양한 API 지원을 통해 빅데이터 분석, 머신 러닝, 스트리밍 처리 등 여러 분야에서 활용되며 아파치 소프트웨어 재단의 핵심 프로젝트 중 하나이다.

2. 역사

2006년 7월, 필리프 할러가 작성한 액터 구현이 스칼라 2.1.7의 일부로 출시되었다. 2008년 스칼라는 복잡한 서버 애플리케이션에 사용되어 주목받았지만, 동시성은 여전히 스레드-공유 메모리와 락(lock)을 필수적으로 사용하여 싱크를 맞추는 전형적인 방식으로 이뤄지고 있었다. 이러한 접근 방식의 어려움을 인식하고 얼랭 프로그래밍 언어의 라이브러리가 지원하는 고도의 동시성 쓰기, 이벤트 주도 애플리케이션으로부터 영감을 얻어, 요나스 보네르가 스칼라와 자바에 유사한 기능을 도입하기 위해 Akka를 만들었다. 보네르는 2009년 초부터 Akka를 작업하기 시작했고, 그 해에 그것에 대한 그의 비전을 작성했다. 첫 공식 릴리즈는 Akka 0.5로, 2010년 1월에 발표되었다. Akka는 현재 Play 프레임워크, 스칼라 프로그래밍 언어와 함께 Lightbend 플랫폼의 일부이다.

2022년 9월, Lightbend는 Akka의 라이선스를 오픈 소스 라이선스인 아파치 라이선스 2.0에서 독점 소스 사용 가능 라이선스인 (BSL)로 변경한다고 발표했다. BSL 하의 새로운 코드는 3년 후에 아파치 라이선스로 사용 가능하게 된다.

2.1. 초기 개발

필리프 할러가 작성한 액터 구현은 2006년 7월에 스칼라 2.1.7의 일부로 출시되었다. 2008년 스칼라는 복잡한 서버 애플리케이션에서의 사용에 대해 주목받았지만, 동시성은 여전히 스레드-공유 메모리와 락(lock)을 필수적으로 사용하여 싱크를 맞추는 전형적인 방식으로 이뤄지고 있었다. 이러한 접근 방식으로 생겨나는 어려움을 인식하고 얼랭 프로그래밍 언어의 라이브러리가 지원하는 고도의 동시성 쓰기, 이벤트 주도 애플리케이션으로부터 영감을 얻어, 요나스 보네르가 스칼라와 자바에 유사한 기능을 도입하기 위해 Akka를 만들었다. 보네르는 2009년 초부터 Akka를 작업하기 시작했고, 그 해에 그것에 대한 그의 비전을 작성했다. 첫 공식 릴리즈는 Akka 0.5로, 2010년 1월에 발표되었다.

2.2. 라이선스 변경

2022년 9월, Lightbend는 Akka의 라이선스를 오픈 소스 라이선스인 아파치 라이선스 2.0에서 독점 소스 사용 가능 라이선스인 (BSL)로 변경한다고 발표했다. BSL 하의 새로운 코드는 3년 후에 아파치 라이선스로 사용 가능하게 된다. 이러한 변화는 Akka 커뮤니티 내에서 논쟁을 불러일으켰으며, 일부 사용자들은 오픈 소스 모델에서 벗어나는 것에 대한 우려를 표명하였다.

2.3. 기술 리더십 변화

2011년 9월, 빅토르 클랑이 Akka 프로젝트의 기술 리더가 되었다. 2012년 12월 빅토르가 Lightbend의 엔지니어링 이사가 되면서, 롤랜드 쿤이 Akka의 기술 리더가 되었다.

3. 특징

Akka 액터 기반 애플리케이션은 다음과 같은 특징을 갖는다:

* 메시지 기반 비동기 동시성: Akka는 액터 모델을 구현하여 동시성을 처리한다. 일반적인 동시성 프로그래밍과 달리, 변경 가능한 데이터를 공유하거나 동기화 기본 요소를 사용하지 않는다. 대신, 액터들은 메시지를 주고받으며 비동기적으로 작업을 처리한다.

* 위치 투명성: 액터는 동일한 호스트에 있든, 분산된 여러 호스트에 있든, 직접 통신을 하든, 라우팅 채널을 이용하든, 여러 스레드에서 실행되든 상관없이 동일한 방식으로 상호작용한다. 이러한 세부 사항은 배포 시점에 구성 메커니즘을 통해 변경할 수 있으며, 프로그램 수정 없이 스케일-업(더 성능이 뛰어난 서버 사용)하거나 스케일-아웃(더 많은 서버 사용)할 수 있도록 돕는다.

* 계층적 오류 처리: 액터들은 프로그램 오류에 따라 계층적으로 분류되며, 오류는 해당 액터의 supervisor에게 이벤트로 전달된다. Akka는 얼랭과는 다르게 부모 감독(parental supervision)을 강조하여, 각 액터가 부모 액터에 의해 생성되고 감독받도록 한다.

Akka는 액터를 제공하는 코어 모듈을 포함한 모듈 구조를 띄고 있다. 다른 모듈들은 액터의 네트워크 분산, 클러스터 지원, 명령과 이벤트 소싱, 다양한 서드 파티 시스템과의 통합(예, 아파치 카멜, 제로MQ), 심지어 퓨처, 에이전트 같은 다른 병렬성 모델을 지원하는 것과 같은 기능을 추가할 수 있다.

3.1. 액터 모델

Akka는 액터 모델을 구현한다. Akka 액터 기반 애플리케이션에서 동시성은 메시지 기반 및 비동기식으로 이루어진다. 일반적으로 변경 가능한 데이터는 공유되지 않으며 동기화 기본 요소가 사용되지 않는다. 액터가 상호 작용하는 방식은 동일한 호스트 또는 별도의 호스트에 있는지, 직접 또는 라우팅 기능을 통해 통신하는지, 소수 또는 다수의 스레드에서 실행되는지 등에 관계없이 동일하다. 이러한 세부 사항은 구성 메커니즘을 통해 배포 시점에 변경할 수 있으며, 프로그램을 수정하지 않고도 확장(더 강력한 서버 사용) 및 확장(더 많은 서버 사용)할 수 있다.

액터는 프로그램 오류와 관련하여 계층적으로 정렬되며, 오류는 액터의 감독자가 처리해야 하는 이벤트로 처리된다(어떤 액터가 오류를 트리거하는 메시지를 보냈는지에 관계없이). 얼랭과 달리 Akka는 부모 감독을 강제한다. 즉, 각 액터는 부모 액터에 의해 생성되고 감독된다.

3.2. 위치 투명성

액터는 로컬 또는 원격 시스템에 위치할 수 있으며, 동일한 방식으로 통신한다. 액터가 상호 작용하는 방식은 동일한 호스트에 있는지, 별도의 호스트에 있는지, 직접 통신하는지, 라우팅 기능을 통해 통신하는지, 소수의 스레드에서 실행되는지, 많은 스레드에서 실행되는지 등과 관계없이 동일하다. 이러한 세부 사항은 구성 메커니즘을 통해 배포 시점에 변경할 수 있으며, 프로그램을 수정하지 않고도 확장(더 강력한 서버 사용) 및 확장(더 많은 서버 사용)할 수 있다. 이는 애플리케이션을 분산 환경으로 쉽게 확장할 수 있게 한다.

3.3. 계층적 오류 처리

Akka는 액터 모델을 구현하여 프로그램 오류를 계층적으로 처리한다. 각 액터는 부모 액터에 의해 생성되고 감독을 받으며, 오류는 액터의 supervisor에게 이벤트로 전달된다. Akka는 부모 감독(parental supervision)을 강조하여, 자식 액터에서 발생한 오류를 부모 액터가 처리하도록 한다. 이러한 방식은 시스템의 내결함성을 향상시키는 데 기여한다.

3.4. 모듈 구조

Akka는 액터 모델을 구현하는 코어 모듈과, 다양한 기능을 추가하는 확장 모듈로 구성된다. 코어 모듈은 액터 시스템의 기본 기능을 제공한다. 확장 모듈은 다음과 같은 기능을 추가할 수 있다.

* 액터의 네트워크 분산
* 클러스터 지원
* 명령 및 이벤트 소싱
* 아파치 카멜, 제로MQ 등 다양한 타사 시스템과의 통합
* 퓨처 및 에이전트와 같은 다른 동시성 모델 지원

Akka 액터 기반 애플리케이션의 주요 특징은 다음과 같다.

* 동시성은 메시지 기반 및 비동기식으로 이루어진다. 일반적으로 변경 가능한 데이터를 공유하거나 동기화 기본 요소를 사용하지 않는다.
* 액터 상호 작용 방식은 동일 호스트, 별도 호스트, 직접 통신, 라우팅 기능, 스레드 수 등에 관계없이 동일하다. 이러한 세부 사항은 배포 시점에 구성 메커니즘을 통해 변경 가능하며, 프로그램 수정 없이 확장(더 강력한 서버 사용) 및 확장(더 많은 서버 사용)이 가능하다.
* 액터는 프로그램 오류와 관련하여 계층적으로 정렬되며, 오류는 액터 감독자가 처리하는 이벤트로 처리된다. 얼랭과 달리 Akka는 부모 감독을 강조하여, 각 액터는 부모 액터에 의해 생성되고 감독된다.

4. 프로젝트 구조

Akka 프로젝트 개발은 Lightbend에 고용된 핵심 팀이 주도하며, 활발한 커뮤니티가 이를 지원한다. 현재는 클러스터 지원 확장에 중점을 두고 개발이 진행되고 있다. 2011년 9월, 빅토르 클랑(Viktor Klang)이 Akka 프로젝트의 기술 리더가 되었으며, 2012년 12월 빅토르가 Lightbend의 엔지니어링 이사가 되면서 롤랜드 쿤(Roland Kuhn)이 Akka의 기술 리더가 되었다.

5. 다른 라이브러리와의 관계

여러 프레임워크와 도구들이 Akka를 중심으로 생태계를 형성하고 있다.

* eventsourced 라이브러리는 Akka 액터를 위한 이벤트 기반 아키텍처 (도메인 주도 설계 참조) 지원을 제공한다.
* Socko 웹 서버 라이브러리는 Akka 애플리케이션용 REST API 구현을 지원한다.
* 아파치 플링크 (분산 스트림 및 배치 데이터 처리를 위한 플랫폼) RPC 시스템은 Akka를 사용하여 구축되었지만 v1.14부터 격리되었다.

5.1. 스프레이(Spray)

스프레이 툴킷은 Akka를 사용하여 구현되었으며, HTTP 서버와 RESTful API 생성을 위한 DSL과 같은 관련 기능을 제공한다.

5.2. 플레이 프레임워크(Play Framework)

플레이 프레임워크웹 애플리케이션 개발을 위해 Akka와의 통합을 제공한다.

5.3. 아파치 스파크(Apache Spark)

1.6 버전까지 아파치 스파크는 노드 간 통신을 위해 Akka를 사용했다.

5.4. 기타

Socko, 개틀링, 스칼라트라, 바딘, 아파치 플링크, 라곰 등 다양한 프레임워크 및 도구들이 Akka와 통합되거나 Akka를 기반으로 한다. GitHub에는 Akka를 사용하는 250개 이상의 공개 프로젝트가 등록되어 있다.

6. Akka 관련 출판물

Akka에 관한 서적과 웹 기사 등 다양한 자료가 출판되었다.

6.1. 서적

👆
좌우로 밀어서 보기
제목설명
Akka EssentialsAkka에 관한 책
Akka 코드 예제Akka에 관한 책
Akka ConcurrencyAkka에 관한 책
Akka in Action, 제2판Akka에 관한 책
Akka in ActionAkka에 관한 책
Effective AkkaAkka에 관한 책
Java, Scala 및 Akka 코드 예제를 특징으로 하는 Akka 2.0을 사용한 Composable FuturesAkka에 관한 책
P. 할러의 "Actors in Scala"Akka가 등장하는 책
N. 레이차우두리의 "Scala in Action"Akka가 등장하는 책
D. 왐플러의 "Functional Programming for Java Developers"Akka가 등장하는 책
A. 알렉산더의 "Scala Cookbook"Akka가 등장하는 책
V. 수브라마니암의 "Programming Concurrency on the JVM"Akka가 등장하는 책
M. 베른하르트의 "Reactive Web Applications"Akka가 등장하는 책

Akka의 상업적 사용법을 설명하는 웹 기사와 Akka에 대한 개요 기사도 있다.

6.2. 기타 자료

Akka에 관한 여러 권의 책이 있다.

* Akka Essentials
* Akka 코드 예제
* Akka Concurrency
* Akka in Action, 제2판
* Akka in Action
* Effective Akka
* Java, Scala 및 Akka 코드 예제를 특징으로 하는 Akka 2.0을 사용한 Composable Futures

Akka는 다음 책에도 등장한다.

* P. 할러의 "Actors in Scala"
* N. 레이차우두리의 "Scala in Action"
* D. 왐플러의 "Functional Programming for Java Developers"
* A. 알렉산더의 "Scala Cookbook"
* V. 수브라마니암의 "Programming Concurrency on the JVM"
* M. 베른하르트의 "Reactive Web Applications"

Akka의 상업적 사용법을 설명하는 많은 웹 기사 외에도, Akka에 대한 개요 기사도 있다.