관리 메뉴

HAMA 블로그

스칼라 강의 (45) 빌드(build) & 디플로이 (deploy) 하기 [번역] 본문

Scala

스칼라 강의 (45) 빌드(build) & 디플로이 (deploy) 하기 [번역]

[하마] 이승현 (wowlsh93@gmail.com) 2017. 11. 6. 18:13

 

스칼라 어플리케이션은 어떻게 빌드&디플로이 할까? [번역]

 

 

 

 

 

이봐요!  스칼라에 꽤나 익숙해 진 것 같군요. 당신이 이제 스칼라로 어플리케이션 개발을 할 수 있는것을 알겠습니다. 근데 코드의 주된 사명은 사람들이 문제를 해결 할 수 있도록 돕는 것이겠죠? 하지만 당신의 데스크탑에서만 로컬로 실행중인 경우 어떻게 이 작업을 수행 할 수 있을까요? 네~이 글에서는 Scala 애플리케이션을 배포하는 가장 쉬운 방법을 보여드리겠습니다.

 

스칼라 프로젝트 빌드하기

Scala 프로젝트를 "빌드" 한다고 말하면 무엇을 의미하나요? 그 의미는 당신의 IDE에서 로컬로 실행되는 프로젝트는 다른 환경 (Linux / Windows / Mac)에서 실행될 수 있게 "변형" 되어야합니다.Scala 프로젝트 샘플을 좀 살펴 보겠습니다. 정말 간단해야 겠죠? 그래서 사소한 akka-http 앱을 만들기로 결정했으며 구조는 다음과 같습니다.

중요한 파일을 강조하기 위해 녹색 화살표를 사용했습니다. 그리고 우리는 그 파일이 무엇을 포함하고, 무엇이 목적인지를 살펴볼 필요가 있습니다. 거의 모든 Scala 프로젝트는 build.sbt 파일에서 시작합니다. 원칙적으로 프로젝트에 대한 메타 정보가 포함되어 있습니다 : 이름, 버전, 의존성 ...

1
2
3
4
5
6
7
8
9
name := "sbt-build-example"
 
version := "1.0"
 
scalaVersion := "2.12.2"
 
libraryDependencies ++= Seq(
  "com.typesafe.akka" %% "akka-http" % "10.0.9"
)

 

위의 코드에서 종속성을 살펴보십시오. 보다 정확하게 말하면 단일 종속성을 살펴보십시오. 그런 다음 모든 "비즈니스 로직"이 시작되는 Main 클래스를 살펴볼까요.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
package com.example
 
import akka.actor.ActorSystem
import akka.http.scaladsl.Http
import akka.http.scaladsl.Http.ServerBinding
import akka.http.scaladsl.server.Directives._
import akka.stream.ActorMaterializer
 
import scala.concurrent.Future
 
object Main extends App {
 
  implicit val system = ActorSystem()
  implicit val ec = system.dispatcher
  implicit val materializer = ActorMaterializer()
 
  val routes = pathPrefix("ping") {
    get {
      complete("pong")
    }
  }
 
  val bindingFuture: Future[ServerBinding] = Http().bindAndHandle(routes, "127.0.0.1", 5000)
 
}

 

데모 응용 프로그램은 127.0.0.1/ping으로 GET 요청을 보내면 "pong"을 반환하는 엔드포인트 하나만 있는 간단한 프로그램입니다..그럼 이 앱을 빌드하는 방법 및 디플로이 가능하게 만드는 방법은 무엇일까요?
이 작업을 수행하려면 sbt-native-packager 플러그인을 프로젝트에 추가 해야하며 매우 간단합니다.
plugins.sbt 파일에 한 줄의 코드를 추가하면됩니다.

 

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

 

그리고 build.sbt 파일에 다음과 같이 추가합니다.

 

1
enablePlugins(JavaAppPackaging)

 

그리고 콘솔을 열고 프로젝트의 루트 폴더로 이동하여 다음 명령을 실행합니다.

 

1
sbt stage

 

이 명령은 프로젝트 디렉토리에 새 폴더를 생성합니다.

target/universal/stage/

 

stage 디렉토리에는 bin & lib라는 두 개의 폴더가 있을 것 입니다.첫 번째는 각 운영체제에서의 런처(Linux / Mac / Windows)를 포함합니다. 두 번째 것은 모든 종속성과 응용 프로그램 클래스가있는 jar를 포함합니다.그 다음은 무엇을 해야 할까요? 추측 하듯이, 단순합니다. 그냥 스테이지 디렉토리를 모두 서버로 옮기고 콘솔에서 다음 명령을 실행하여 시작하면 됩니다.

 

1
./bin/app-name
 

당연히 이 명령은 stage 폴더에서 실행해야하며 app-name은 build.sbt 파일에서 지정한 프로젝트 이름 (패키지 이름)에 따라 달라질 수 있다는것 쯤은 눈치채셨겠죠? 
이상 모든게 끝났습니다!!! 매우 쉽죠? ^^

 

요약 

 

보시다시피 sbt-native-packager는 Scala 프로젝트를 빌드하는 꽤 직접적인 방법을 제공합니다. 더 멋진 점은 Scala 앱을 위한 패키징 옵션이 훨씬 많다는 것입니다. 이 기사에서는 이 플러그인이 수행 할 수있는 기능의 5 % 만 설명했습니다. 따라서 앞으로 sbt-native-package에 대한 몇 가지 새로운 자습서를 작성하려고 합니다.

Comments