관리 메뉴

HAMA 블로그

예제로 보는 아카(akka) - 17. 설치 ( Deploying ) 본문

Akka

예제로 보는 아카(akka) - 17. 설치 ( Deploying )

[하마] 이승현 (wowlsh93@gmail.com) 2016. 12. 26. 18:42


- Scala 2.11.8 기반 

- Akka 2.4.11 기반 

- Java 8  (akka 2.4 부터는 java 8 요구함) 


설치 ( Deploying )


모든 작업을 마치고 나면 실제 서비스를 위해 설치를 해야합니다.  Scala 기반의 Akka 에서는 어떻게 하는지 알아보겠습니다. 참고로 이렇게 하는방법 말고 다른 방식으로도 할 수 있습니다. 매우 다양한 방식이 도처에 흩날리고 있다는.. OTL.... 하지만 제가 소개하는  Sbt stage 방식이 Akka 나 Play 전개에 가장 좋은거 같네요.


* 우아하게 종료하는 부분에 대해서는 apache 데몬등을 이용해서 만들 수 있을 것 같습니다. 

* 서비스로서 만들기 위해서는 저는 그냥 실행스크립트를 init.d 에 넣어줘서 처리합니다. 다른 방법있으면 소개좀..





0. 기본 프로젝트 생성   


가장 기본적인 프로젝트를 하나 만듭니다. 아래와 같이 간단한 코드를 작성합니다. 


import akka.actor.{Actor, ActorLogging, ActorRef, ActorSystem, Props}
import scala.concurrent.duration._


class HelloWorld extends Actor with ActorLogging {

def receive = {
case msg: String =>
val hello = "Hello %s".format(msg)
sender() ! hello // 보낸 액터에게 되돌려주기
log.info("Sent response {}",hello)
}
}

class HelloWorldCaller(timer: FiniteDuration, actor: ActorRef)
extends Actor with ActorLogging {

case class TimerTick(msg: String) // 메세지용 케이스클래스

override def preStart(): Unit = {
super.preStart()
implicit val ec = context.dispatcher
context.system.scheduler.schedule(
timer, // 몇초 있다가
timer, // 몇초 간격으로
self, // 자신에게 보내라
new TimerTick("everybody")) // 이 메세지를
}

def receive = {
case msg: String => log.info("received {}",msg) //HelloWolrd 에서 받음.
case tick: TimerTick => actor ! tick.msg // HelloWorld 액터로 전송
}
}


object maintest extends App {

val system = ActorSystem("hellokernel")

val actor = system.actorOf(Props[HelloWorld])
val config = system.settings.config
val timer = config.getInt("helloWorld.timer")
system.actorOf(Props(
                    new HelloWorldCaller(
                    timer millis,
                    actor)))
}

-  일정시간 간격으로 HellowWorld 액터에게 메세지를 보내고 되받는 어플리케이션입니다.

 

1.  스탠드얼론 어플리케이션 만들기

 1-1. project/plugins.sbt 파일에 아래와 같이 추가합니다. (sbt-native-packager plugin 을 이용)

addSbtPlugin("com.typesafe.sbt" % "sbt-native-packager" % "1.0.0")

sbt-native-packager 는 Akka뿐만 아니라 어떤 타입의 어플리케이션에 대한 배포(distribution)를 만들기 위한 툴이다.


1-2. src/universal/ 폴더를 만들고 아래에 application.conf 와 logback.xml 을 추가.

          resources 아래에 있는 기존 파일의 내용을 그대로 복사/붙혀넣기 합니다.


1-3. build.sbt 파일에 아래 내용 추가

enablePlugins(JavaAppPackaging)

scriptClasspath +="../conf"


1-4. 프로젝트 root 폴더에서 sbt stage 실행 

- 위 처럼 universal 폴더가 생겼습니다.

- stage 아래의 bin 에 가보면  윈도우/리눅스에서 각각 실행 할수 있는 파일이 생겼습니다.


1-5. 프로젝트 실행 

윈도우 : HelloWorld.bat

리눅스 : ./HelloWorld 

실행하면 bin 폴더 아래에 logs 폴더가 생기고 로그가 메세지가 찍힐것입니다.  (로그부분은 이전 강좌를 참고) 

 


1-6. 프로젝트 백그라운드로 실행 

저렇게 putty 창에서 실행하면 창 닫으면 종료되기때문에

nohup ./HelloWorld &  식으로 실행한다.



* 먼가 안되면 항상 버전 체크를 해보세요. 자바나 스칼라나 아카나~



부록 : 우분투에 자바 설치 

1. repository 추가

1
$ sudo add-apt-repository ppa:webupd8team/java

2. repository index 업데이트

1
$ sudo apt-get update

3. JDK 설치

1
$ sudo apt-get install oracle-java8-installer


스칼라 설치는 안해도 됨.


참고:

Use-case and Deployment Scenarios


Comments