AKKA가 BSL라이센스로 변경되면서 AKKA는 더이상 무료가 아니지만~ 안정적으로 운영되다 전환된 버전을 오픈소스로 지원하네요
최신버전을 사용할수는 없지만 오히려 안정적인 버전을 오픈소스로 이용할수는 있게 되었습니다.
FORK를 딴버전이라 의존성및 import 경로변경 약간의 수고스러움만 하면 100%호환가능하며 지원 버전은 최신문서를 주시
- pekko에서 지원하는 의존 버전인 scala와 akka버전을 함께 체크해야합니다.
의존성
val scalaVersion = "2.13"
val akkaVersion = "2.7.0"
val pekkoVersion = "1.1.2" // 2.6.x 기능지원
// Akka
//implementation(platform("com.typesafe.akka:akka-bom_$scalaVersion:$akkaVersion"))
implementation(platform("org.apache.pekko:pekko-bom_$scalaVersion:$pekkoVersion"))
// Akka UnTyped Actor
//implementation("com.typesafe.akka:akka-actor_$scalaVersion:$akkaVersion")
//implementation("com.typesafe.akka:akka-stream_$scalaVersion:$akkaVersion")
implementation("org.apache.pekko:pekko-actor_$scalaVersion:$pekkoVersion")
implementation("org.apache.pekko:pekko-stream_$scalaVersion:$pekkoVersion")
// Akka Typed Actor
//implementation("com.typesafe.akka:akka-actor-typed_$scalaVersion:$akkaVersion")
implementation("org.apache.pekko:pekko-actor-typed_$scalaVersion:$pekkoVersion")
// Actor TestKit
//testImplementation("com.typesafe.akka:akka-testkit_$scalaVersion:$akkaVersion")
//testImplementation("com.typesafe.akka:akka-actor-testkit-typed_$scalaVersion:$akkaVersion")
testImplementation("org.apache.pekko:pekko-testkit_$scalaVersion:$pekkoVersion")
testImplementation("org.apache.pekko:pekko-actor-testkit-typed_$scalaVersion:$pekkoVersion")
// Actor Logging
//implementation("com.typesafe.akka:akka-slf4j_$scalaVersion:$akkaVersion")
implementation("org.apache.pekko:pekko-slf4j_$scalaVersion:$pekkoVersion")
Type vs Untyped
- 초기 Typed이 없던 버전이 Classic Actor 버전이며 ( prefix 없음 )
- Typed 제약이 부여된 액터버전이 -typed 가 페어로 붙게됩니다.
- 장점 : 메시지를 보내 받고를 Behavior라는 패턴을 이용 Typed로 정의되어야 하기때문에 엄격하지만 Safe한 개발을 할수 있습니다. Type제약없애려면 Any를 활용해도 됩니다.
- 단점 : 새로운 방식의 액터모델 정의에 적응해야하며 엄격하기때문에 , Type 제약이 없었기때문에 기존 만들어놓은 장치들의 변화가 필요할수도 있습니다. 혼용도 할수 있겟지만 시스템을 분리 작동시켜야합니다.
- 권장 : 다뤄야하는 이벤트의 종류가 복잡해지고 다양해지면 Typed를 권장합니다. 머릿속에 그릴수 있는만큼의 이벤트라고 하면 Untyped를 사용해도 무방하지만 복잡해질수록 작동방식을 코드를 통해 파악하기 어려울수 있습니다.
IMPORT
// AKKA import akka.actor.typed.ActorRef import akka.actor.typed.Behavior import akka.actor.typed.SupervisorStrategy import akka.actor.typed.javadsl.AbstractBehavior import akka.actor.typed.javadsl.ActorContext import akka.actor.typed.javadsl.Behaviors import akka.actor.typed.javadsl.Receive // PEKKO import org.apache.pekko.actor.typed.ActorRef import org.apache.pekko.actor.typed.Behavior import org.apache.pekko.actor.typed.SupervisorStrategy import org.apache.pekko.actor.typed.javadsl.AbstractBehavior import org.apache.pekko.actor.typed.javadsl.ActorContext import org.apache.pekko.actor.typed.javadsl.Behaviors import org.apache.pekko.actor.typed.javadsl.Receive
Config
application.conf
pekko {
loglevel = "INFO"
loggers = ["org.apache.pekko.event.slf4j.Slf4jLogger"]
logging-filter = "org.apache.pekko.event.slf4j.Slf4jLoggingFilter"
}
- akka 작동방식을 정의하는 conf 도 prefix명 변경~ 이외 설정은 동일
BSD VS BSL
BSD 라이선스와 BSL(Business Source License) 라이선스는 오픈소스 라이선스의 종류로, 각각 소프트웨어의 사용 및 배포와 관련된 권리와 제한 사항이 다릅니다. 주요 차이점을 비교하면 다음과 같습니다.
1. BSD 라이선스 (Berkeley Software Distribution License)
- 종류: BSD 라이선스는 여러 버전이 있지만, 가장 일반적인 것은 2-Clause BSD와 3-Clause BSD입니다.
- 자유도: 매우 자유로운 라이선스입니다. 소프트웨어의 상업적 사용, 수정, 배포가 자유롭습니다.
- 배포 요구사항: 소프트웨어를 수정하거나 재배포할 때 저작권 표기 및 원래 라이선스를 유지해야 합니다. 상업적 목적으로 사용하거나 배포할 때도, 원작자에게 크레딧을 주는 것 외에는 제한이 거의 없습니다.
- 특징: 라이선스가 매우 단순하고 사용에 거의 제한이 없기 때문에 오픈소스 커뮤니티에서 많이 사용됩니다.
2. BSL (Business Source License)
- 종류: BSL은 오픈소스 라이선스와 상업 라이선스의 중간 형태입니다.
- 제한된 자유도: BSL은 소프트웨어를 일정 기간 동안은 상업적 사용에 대해 제한을 두지만, 그 기간이 지나면 완전히 오픈소스(BSD 또는 다른 자유 라이선스로 전환)됩니다.
- 사용 및 배포: BSL은 주로 소프트웨어가 특정한 비즈니스 목적으로는 유료 또는 제한된 사용만 허용하고, 정해진 시간이 지나면 자유롭게 사용할 수 있도록 설계되었습니다. 즉, 일정 기간 동안은 소스 코드가 공개되더라도 사용에 제한이 있을 수 있습니다.
- 전환: 통상적으로 라이선스가 적용된 소프트웨어는 몇 년이 지나면 BSL에서 BSD 또는 다른 오픈소스 라이선스로 전환됩니다.
요약
- BSD 라이선스: 매우 자유롭고 제한이 거의 없음. 상업적 사용에도 제약이 없음.
- BSL: 일정 기간 동안 상업적 사용에 제한이 있으며, 시간이 지나면 자유 라이선스로 전환됨.
BSL은 주로 비즈니스적인 이유로 소프트웨어 개발사들이 선택하는 반면, BSD는 오픈소스 커뮤니티에서 널리 사용되는 보다 자유로운 라이선스입니다.