일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 26 | 27 | 28 | 29 | 30 |
- Actor
- 이더리움
- 파이썬 데이터분석
- 스위프트
- 주키퍼
- 스칼라
- 플레이프레임워크
- 파이썬 동시성
- Play2 로 웹 개발
- Akka
- CORDA
- Play2
- 스칼라 동시성
- 블록체인
- akka 강좌
- 하이퍼레저 패브릭
- 엔터프라이즈 블록체인
- 스칼라 강좌
- 파이썬
- Golang
- hyperledger fabric
- 안드로이드 웹뷰
- Hyperledger fabric gossip protocol
- Adapter 패턴
- play2 강좌
- 파이썬 머신러닝
- 하이브리드앱
- play 강좌
- 파이썬 강좌
- 그라파나
- Today
- Total
HAMA 블로그
스칼라 강의 (45) 빌드(build) & 디플로이 (deploy) 하기 [번역] 본문
스칼라 강의 (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에 대한 몇 가지 새로운 자습서를 작성하려고 합니다.
'Scala' 카테고리의 다른 글
스칼라 vs 코틀린 : 더 나아진 자바를 목표로 경쟁하는 2개의 언어. [번역] (0) | 2017.11.10 |
---|---|
스칼라 강의 (46) 리프팅(lifting) 이란? (0) | 2017.11.09 |
스칼라 강의 (44) - 리플렉션 (0) | 2017.11.06 |
스칼라 강의 (43) - 고급 타입관련 주제들 (0) | 2017.03.26 |
스칼라 강좌 (42) 고급 타입 다루기 - F-bounded polymorphism / recursive types (0) | 2017.03.26 |