GAE/Java8 시도(그 1: 「Java8로 Web 앱 만들어 배포」)

13426 단어 GAEgcpjava8

제목



GAE(Google App Engine)를 이해하기 위해, 실제로 스스로 앱 만들어 태워 본다.
지난번은 GAE의 구조와 특징을 간략하게 요약했다.
이번에는 Java8에서 App Engine용으로 미리 준비된 Maven 아키타입으로 프로젝트를 만들어 GAE에 배포하는 곳까지.

개발 환경



#OS


$ cat /etc/os-release 
NAME="Ubuntu"
VERSION="17.10 (Artful Aardvark)"

# Java


$ java -version
java version "1.8.0_181"
Java(TM) SE Runtime Environment (build 1.8.0_181-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.181-b13, mixed mode)

# Maven


$ mvn --version
Apache Maven 3.5.0
Maven home: /usr/share/maven
Java version: 1.8.0_181, vendor: Oracle Corporation
Java home: /usr/lib/jvm/java-8-oracle/jre
Default locale: ja_JP, platform encoding: UTF-8
OS name: "linux", version: "4.13.0-46-generic", arch: "amd64", family: "unix"

전제



  • 표준 환경 에서의 개발로 한다.
  • GCP 프로젝트가 생성되었습니다.


  • 실천



    01) App Engine용 SDK 획득






    이후, 아래에 따라 사용할 수 있도록 설정
    h tps : // c ぉ d. 오, ぇ. 코 m/아펜기네/도 cs/s 단지 rd/그럼 ゔ아/도 w응아 d? hl = 그럼

    02) Maven 프로젝트 생성



    적절한 GitHub 리포지토리 만들기



    로컬로 얻은 위의 리포지토리에 Maven 프로젝트 만들기


    $ cd java-webapi-for-gae-study/
    $ mvn archetype:generate -Dappengine-version=1.9.54 -Djava8=true -Dapplication-id=【プロジェクトID】 -Dfilter=com.google.appengine.archetypes:
    [INFO] Scanning for projects...
    
    Choose archetype:
    1: remote -> com.google.appengine.archetypes:appengine-flexible-archetype (A basic Java application with Google App Engine flexible.)
    2: remote -> com.google.appengine.archetypes:appengine-skeleton-archetype (A skeleton application with Google App Engine)
    3: remote -> com.google.appengine.archetypes:appengine-standard-archetype (A basic Java application with Google App Engine Standard)
    4: remote -> com.google.appengine.archetypes:endpoints-skeleton-archetype (A skeleton project using Cloud Endpoints Frameworks with Google App Engine Standard)
    5: remote -> com.google.appengine.archetypes:guestbook-archetype (A guestbook application with Google App Engine)
    6: remote -> com.google.appengine.archetypes:hello-endpoints-archetype (A simple starter application using Cloud Endpoints Frameworks with Google App Engine Standard)
    7: remote -> com.google.appengine.archetypes:skeleton-archetype (Archetype with a README about Google App Engine archetypes)
    Choose a number or apply filter (format: [groupId:]artifactId, case sensitive contains): : 3
    
    Choose com.google.appengine.archetypes:appengine-standard-archetype version: 
    1: 0.1.0
    2: 0.1.1
    3: 0.2.0
    4: 0.3.0
    5: 0.4.0
    6: 1.0.0
    7: 1.0.1
    8: 1.0.2
    Choose a number: 8: 
    
    Define value for property 'groupId': com.example.sky0621
    Define value for property 'artifactId': sky0621
    Define value for property 'version' 1.0-SNAPSHOT: : 
    Define value for property 'package' com.example.sky0621: : 
    
    Confirm properties configuration:
    groupId: com.example.sky0621
    artifactId: sky0621
    version: 1.0-SNAPSHOT
    package: com.example.sky0621
    CloudSDK_Tooling: true
    appengine-version: 1.9.54
    application-id: 【プロジェクトID】
    java8: true
    service: default
    useAppEngineApi: false
    useEndpoints1: false
    useEndpoints2: false
    useJstl: true
    useObjectify: false
     Y: : Y
    
    [INFO] ------------------------------------------------------------------------
    [INFO] BUILD SUCCESS
    [INFO] ------------------------------------------------------------------------
    [INFO] Total time: 03:05 min
    [INFO] Finished at: 2018-10-02T01:24:06+09:00
    [INFO] Final Memory: 19M/193M
    [INFO] ------------------------------------------------------------------------
    

    ※Maven에 대해서는 아래 참조
    ㅜㅜㅜㅜㅜㅜㅜ 아파치. 오 rg/구이데 s/갓찐 g-s r d/ まゔぇ-인-후우ゔぇ-미누테 s. HTML
    ※Maven을 사용한 GAE용 Java 프로젝트 작성에 대해서는 아래 참조
    htps : // c ぉ d. 오, ぇ. 코 m / 아펜 기네 / 도 cs / s 단지 rd / 그럼 ぁ / 와 ls / 뭐? 아우테세 r = 1 & hl =

    03) 로컬 환경에서 빌드 및 동작 확인



    빌드


    $ mvn clean install
    

    동작 확인


    $ mvn appengine:run
    

    ================================================

    「http://localhost:8080」





    ================================================

    04) GAE에 배포



    배포


    $ mvn appengine:deploy
    [INFO] Scanning for projects...
    [WARNING] The project com.example.sky0621:sky0621:war:1.0-SNAPSHOT uses prerequisites which is only intended for maven-plugin projects but not for non maven-plugin projects. For such purposes you should use the maven-enforcer-plugin. See https://maven.apache.org/enforcer/enforcer-rules/requireMavenVersion.html
    [INFO] 
    [INFO] ------------------------------------------------------------------------
    [INFO] Building sky0621 1.0-SNAPSHOT
    [INFO] ------------------------------------------------------------------------
    
      〜省略〜
    
    [INFO] GCLOUD: Services to deploy:
    [INFO] GCLOUD: 
    [INFO] GCLOUD: descriptor:      [/work/src/java/github.com/sky0621/java-webapi-for-gae-study/sky0621/target/appengine-staging/app.yaml]
    [INFO] GCLOUD: source:          [/work/src/java/github.com/sky0621/java-webapi-for-gae-study/sky0621/target/appengine-staging]
    [INFO] GCLOUD: target project:  [【プロジェクトID】]
    [INFO] GCLOUD: target service:  [default]
    [INFO] GCLOUD: target version:  [20181002t014521]
    [INFO] GCLOUD: target url:      [https://【プロジェクトID】.appspot.com]
    [INFO] GCLOUD: 
    [INFO] GCLOUD: 
    [INFO] GCLOUD: Beginning deployment of service [default]...
    [INFO] GCLOUD: #============================================================#
    [INFO] GCLOUD: #= Uploading 18 files to Google Cloud Storage               =#
    [INFO] GCLOUD: #============================================================#
    [INFO] GCLOUD: File upload done.
    [INFO] GCLOUD: Updating service [default]...
    [INFO] GCLOUD: .done.
    [INFO] GCLOUD: Setting traffic split for service [default]...
    [INFO] GCLOUD: ........done.
    [INFO] GCLOUD: Deployed service [default] to [https://【プロジェクトID】.appspot.com]
    [INFO] GCLOUD: 
    [INFO] GCLOUD: You can stream logs from the command line by running:
    [INFO] GCLOUD:   $ gcloud app logs tail -s default
    [INFO] GCLOUD: 
    [INFO] GCLOUD: To view your application in the web browser run:
    [INFO] GCLOUD:   $ gcloud app browse
    [INFO] ------------------------------------------------------------------------
    [INFO] BUILD SUCCESS
    [INFO] ------------------------------------------------------------------------
    [INFO] Total time: 01:04 min
    [INFO] Finished at: 2018-10-02T01:46:13+09:00
    [INFO] Final Memory: 22M/269M
    [INFO] ------------------------------------------------------------------------
    

    ================================================

    「http://【프로젝트 ID】.appspot.com」





    ================================================

    ================================================

    「https://【프로젝트 ID】.appspot.com」





    ================================================

    GCP 콘솔에서 확인








    자동 생성 프로젝트의 내용



    이하가 된다. 이들 모두 자동 생성에 의한 것. 편리.
    김에 말하면, tree 커멘드도 편리.
    $ tree
    .
    ├── README.md
    └── sky0621
        ├── README.md
        ├── nbactions.xml
        ├── pom.xml
        ├── sky0621.iml
        ├── src
        │   ├── main
        │   │   ├── java
        │   │   │   └── com
        │   │   │       └── example
        │   │   │           └── sky0621
        │   │   │               └── HelloAppEngine.java
        │   │   └── webapp
        │   │       ├── WEB-INF
        │   │       │   ├── appengine-web.xml
        │   │       │   ├── logging.properties
        │   │       │   └── web.xml
        │   │       └── index.jsp
        │   └── test
        │       └── java
        │           └── com
        │               └── example
        │                   └── sky0621
        │                       └── HelloAppEngineTest.java
        └── target
            ├── appengine-staging
            │   ├── WEB-INF
            │   │   ├── appengine-generated
            │   │   │   └── app.yaml
            │   │   ├── appengine-web.xml
            │   │   ├── classes
            │   │   │   ├── com
            │   │   │   │   └── example
            │   │   │   │       └── sky0621
            │   │   │   │           └── HelloAppEngine.class
            │   │   │   └── source-context.json
            │   │   ├── lib
            │   │   │   ├── _ah_compiled_jsps-0000.jar
            │   │   │   ├── jstl-1.2.jar
            │   │   │   ├── org.apache.taglibs.taglibs-standard-impl-1.2.5.jar
            │   │   │   ├── org.apache.taglibs.taglibs-standard-spec-1.2.5.jar
            │   │   │   ├── org.eclipse.jdt.core.compiler.ecj-4.4.2.jar
            │   │   │   ├── org.eclipse.jetty.apache-jsp-9.3.18.v20170406-nolog.jar
            │   │   │   ├── org.mortbay.jasper.apache-el-8.0.33.jar
            │   │   │   └── org.mortbay.jasper.apache-jsp-8.0.33.jar
            │   │   ├── logging.properties
            │   │   ├── min-quickstart-web.xml
            │   │   ├── quickstart-web.xml
            │   │   └── web.xml
            │   ├── __static__
            │   ├── app.yaml
            │   └── index.jsp
            ├── generated-sources
            │   └── annotations
            ├── generated-test-sources
            │   └── test-annotations
            ├── maven-archiver
            │   └── pom.properties
            ├── maven-status
            │   └── maven-compiler-plugin
            │       ├── compile
            │       │   └── default-compile
            │       │       ├── createdFiles.lst
            │       │       └── inputFiles.lst
            │       └── testCompile
            │           └── default-testCompile
            │               ├── createdFiles.lst
            │               └── inputFiles.lst
            ├── sky0621-1.0-SNAPSHOT
            │   ├── META-INF
            │   ├── WEB-INF
            │   │   ├── appengine-web.xml
            │   │   ├── classes
            │   │   │   └── com
            │   │   │       └── example
            │   │   │           └── sky0621
            │   │   │               └── HelloAppEngine.class
            │   │   ├── lib
            │   │   │   ├── appengine-api-1.0-sdk-1.9.54.jar
            │   │   │   ├── jstl-1.2.jar
            │   │   │   ├── org.apache.taglibs.taglibs-standard-impl-1.2.5.jar
            │   │   │   └── org.apache.taglibs.taglibs-standard-spec-1.2.5.jar
            │   │   ├── logging.properties
            │   │   └── web.xml
            │   └── index.jsp
            ├── sky0621-1.0-SNAPSHOT.war
            ├── surefire-reports
            │   ├── TEST-com.example.sky0621.HelloAppEngineTest.xml
            │   └── com.example.sky0621.HelloAppEngineTest.txt
            └── test-classes
                └── com
                    └── example
                        └── sky0621
                            └── HelloAppEngineTest.class
    
    48 directories, 47 files
    

    요약



    Maven과 App Engine 플러그인을 사용하면 명령 한 번에 https 액세스 가능한 도메인도 준비된 상태에서 웹 앱으로 배포됩니다.
    매우 편합니다. 앞으로는 이 프로젝트에 GAE의 각종 기능을 시험할 수 있는 양념을 해 나갈 것이다.

    좋은 웹페이지 즐겨찾기