상단

Google App Engine의 Java 개발 환경 설정 방법을 정리 합니다.

GAE for Java 개발 환경


Google App Engine(GAE) for Java 개발 환경은 2009년 4월 Java 개발자에게 공개 되었다. 여기서는 Eclipse를 활용하여 GAE for Java 개발 환경을 구성하고 간단한 GAE Application을 작성해 배포해 보자.

 

GAE에 회원 가입

  • Google App Engine에서 가입 한다.

    • GAE 사이트에 접속 한다.

    • Google 계정으로 GAE에 가입 한다.

      • Google 계정이 있더라도 GAE에서 사용할 수 있도록 가입 절차를 수행 하여야 한다.

 
 

GAE에서 Application 생성

  • GAE로 로그인한 후 "Create an Application" 버튼을 누른다.
    ![600px](img/GAE install 002.png)

  • "Country and Carrier"를 "Other(Not Listed)"를 선택 한다.

    • "Mobile Number"에 자신의 핸드폰 전화 번호를 입력 한다. (예, +82 10 xxxx xxxx)

    • "Send" 버튼을 누른다.
      ![600px](img/GAE install 003.png)

  • "Enter Account Code"에 핸드폰으로 전송되어 온 인증 코드를 입력하고 "Send"를 누른다.
    ![600px](img/GAE install 004.png)

  • "Application Identifier"에 자신의 애플리케이션을 구분을 구분자를 입력 한다.

    • 새로 생성되는 애플리케이션은 여기에 입력한 이름의 URL을 가진다. (예, smartyandroid.appspot.com)

    • 위 URL을 향후 자신의 도메인에 있는 URL로 변경할 수 있다.

    • "Application Title"에 자신의 애플리케이션 제목을 입력 한다.

    • "I accept these terms."를 체크하고 "Create Application"을 누른다.
      ![600px](img/GAE install 005.png)

  • GAE 사이트에 로그인하면 아래와 같이 등록된 애플리케이션을 확인할 수 있다.
    ![600px](img/GAE install 006.png)

  • GAE 사이트에서 애플리케이션을 선택하면 아래와 같은 관리 화면이 표시 된다.
    ![600px](img/GAE install 007.png)

 

Eclipse 개발 환경 설정

  • Google Plugin for Eclipse 설치

    • Eclipse 3.5에서 "Help -> Install New Software..." 메뉴를 선택 한다.

    • "Work with:"에 http://dl.google.com/eclipse/plugin/3.5 주소를 입력하고 엔터키를 누른다.

    • 목록에 표시되는 것을 모두 선택하고 설치를 진행 한다.
      ![600px](img/GAE install 001.png)

    • Google Plugin for Eclipse 설치 확인, 메뉴 아이콘에서 확인

      • 파란 g 아이콘 : App Engine for Java 프로젝트 작성 마법사

      • 빨간 G 아이콘 : GWT 프로젝트 컴파일

      • 소형 제트기 : App Engine 프로젝트 deploy
        그림:GAE_install_008.png

    • "Window -> Preferences -> Google -> App Engine" 메뉴가 생성됨

    • 참조: Google Plugin for Eclipse 설치 가이드

 
 

GAE Application 개발

  • Eclipse에서 Application 생성

    • 파란 g 아이콘(App Engine for Java 프로젝트 작성 마법사)을 눌러 GAE Application을 생성 한다.

      • Project name : GAE 프로젝트의 이름을 입력 한다.

      • Package : 사용할 패키지명을 입력 한다.
        그림:GAE install 009.png

  • GAE Application의 컴파일 환경 조정

    • Google App Engine은 JDK 1.5 버전 이상을 지원 합니다. 컴파일 오류가 발생할 경우 아래와 같이 작업 합니다.

    • 좌측의 "Package Explorer"에서 방금 생성한 GAE Application을 선택하여 오른쪽 마우스를 누른다.

    • "Properties ->Java Compiler"를 선택 한다.

    • "Enable project specific settings"을 체크 한다.

    • "Compiler compliance level"에서 "1.5" 또는 "1.6"을 선택 한다.
      그림:GAE install 010.png

  • GAE Application의 컴파일

    • "빨간 G 아이콘"을 눌러 GAE Application을 컴파일 한다.

     
  • Eclipse에서 Application을 GAE로 deploy

    • 소형 제트기 아이콘(App Engine 프로젝트 deploy)을 누른다.

    • GAE에 deploy하기 위해 접속 Email과 Password를 입력한다.
      그림:GAE install 011.png

    • GAE에서 등록한 "Application Identifier"를 등록 한다.

      • "App Engine project setting..."을 클릭 한다.

      • "Application ID"에 GAE에서 등록한 "Application Identifier"를 등록 하고 "OK" 버튼을 누른다.
        그림:GAE install 012.png

    • "Deploy" 버튼을 누르면 GAE Application이 컴파일 되고 deploy 된다.
      그림:GAE install 013.png

  • GAE Application 확인

 

JSP 사용 환경 설정

  • 오류 메시지

    • Your Web Application Project must be configured to use a JDK in order to use JSPs.

    • 원인 : JSP를 사용하기 위해서는 JDK에 포함되어 있는 javac를 사용할 수 있어야 한다. 그러므로 JRE 대신에 JDK를 사용하도록 변경 하여야 한다.

     
  • 조치 방법

    • "Window -> Preferences -> Java -> Installed JREs" 메뉴를 선택 한다.

    • 등록된 JRE를 선택하고 "Edit..." 버튼을 누른다.

    • JRE 폴더를 JDK 폴더로 변경 한다.

 
 

Eclipse에서 GAE 실행

 
 

개발 환경에서 GAE 실행

위 "Eclipse에서 GAE 실행"을 권장 합니다. 

 

GAE for Java 애플리케이션 개발을 위해서 매번 GAE로 deploy하여 테스트 하는 것은 여러가지 면에서 불편하다. GAE for Java를 위한 개발 환경을 로컬 환경에서 구현해 보자.

 

Google App Engine의 Google Plugin for Eclipse를 설치하면, Eclipse 설치 디렉토리 아래 $ECLIPSE_HOME/plugins/com.google.appengine.eclipse.sdkbundle.[버전]/appengine-java-sdk-버전/ 폴더에 appengine-java-sdk가 설치 된다. (예, D:/appl/eclipse/plugins/com.google.appengine.eclipse.sdkbundle.1.3.3_1.3.3.v201004231111/appengine-java-sdk-1.3.3.1) appengine-java-sdk 아래 bin/dev_appserver.cmd 에 애플리케이션의 war 폴더 위치를 전달하여 실행하면 GAE 개발 서비가 실행 된다.

 
  • 개발 서버 실행 및 종료

    • 아래와 같은 내용으로 runDemo.cmd 파일을 생성 한다.

      • appengine-java-sdk 아래의 bin/dev_appserver.cmd를 실행하고 인수로 실행하고자 하는 애플리케이션의 war 폴더를 전달한다.

 
 set APPENGINE_HOME=D:/appl/eclipse/plugins/com.google.appengine.eclipse.sdkbundle.1.3.3_1.3.3.v201004231111/appengine-java-sdk-1.3.3.1
 set APPLICATION_HOME=C:/www_project/eclipseWorkspace/SmartyAndroid
 
 %APPENGINE_HOME%/bin/dev_appserver.cmd %APPLICATION_HOME%/war
 
 
 
 

GAE/J 개발 환경 설정


[[Google App Engine]] for Java에서 Java에서 많이 사용하는 Spring framework를 설정하는 방법을 정리 합니다.

 

GAE/J 개발 환경 개요

{|cellspacing="0" cellpadding="2" border="1" width="100%" bgcolor="#FFFFFF" align="center" 
|- |width="25%" valign="top" align="center" style="background-color:green; color:white;"|Browse |width="25%" valign="top" align="center" style="background-color:green; color:white;"|View |width="25%" valign="top" align="center" style="background-color:green; color:white;"|Control

|width="25%" valign="top" align="center" style="background-color:green; color:white;"|Model 
|- |valign="top"|

 
 

appengine-web.xml

  • 세션 사용 허용

    • [[FreeMarker]]와 Velocity에서 사용함

 
 true
 
  • 로깅 설정 파일 위치

 
   
     
   
 

HTML

 
 
 <html>
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
     <meta http-equiv="Content-Script-Type" content="JavaScript">
     <meta http-equiv="Content-Style-Type" content="text/css">
   </head>
 </html>
 
 
 
 <html lang="ko">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
     <meta http-equiv="Content-Script-Type" content="JavaScript">
     <meta http-equiv="Content-Style-Type" content="text/css">
   </head>
 </html>
 
  • JSP

 
 <%@ page language="java" pageEncoding="UTF-8" contentType="text/html;charset=UTF-8" %>
  
 <%@ taglib prefix="s"  		uri="/struts-tags"%>
 <%@ taglib prefix="c"  		uri="/WEB-INF/tld/c.tld"%>
 <%@ taglib prefix="fmt"  	uri="/WEB-INF/tld/fmt.tld"%>
 <%@ taglib prefix="fn"  	uri="/WEB-INF/tld/fn.tld"%>
 <%@ taglib prefix="sql"  	uri="/WEB-INF/tld/sql.tld"%>
 

jQuery

 
 
 

SiteMesh

  • [SiteMesh 2.4.2](Sitemesh.md#설치 가이드.md) 참조

    • sitemesh-2.4.2.jar

    • sitemesh-decorator.tld, sitemesh-page.tld

 
 

Freemarker

  • freemarker-2.3.16.jar

 
 	   
  		freemarker   
  		com.opensymphony.module.sitemesh.freemarker.FreemarkerDecoratorServlet  
   		
    		TemplatePath
    		/
   		
  		
   			default_encoding
   			UTF-8
  		
  		1
 		   
 
 	   
  		freemarker   
  		*.ftl   
 	
 
  • freemarker.core.TextBlock.java 재생성

  • Freemarker에서 JSP TagLibrary 사용 방법

    • struts2-core-2.2.1.jar 파일의 압축을 풀어 /META-INF/struts-tags.tld 파일을 /WEB-INF/tld/struts-tags.tld 로 복사 한다.

 
 <#assign s=JspTaglibs["/WEB-INF/tld/struts-tags.tld"]("/WEB-INF/tld/struts-tags.tld".md) />
 <#assign c=JspTaglibs["/WEB-INF/tld/c.tld"]("/WEB-INF/tld/c.tld".md) />
 <#assign fmt=JspTaglibs["/WEB-INF/tld/fmt.tld"]("/WEB-INF/tld/fmt.tld".md) />
 <#assign fn=JspTaglibs["/WEB-INF/tld/fn.tld"]("/WEB-INF/tld/fn.tld".md) />
 <#assign sql=JspTaglibs["/WEB-INF/tld/sql.tld"]("/WEB-INF/tld/sql.tld".md) />
 

Velocity

  • velocity-1.6.4.jar, velocity-tools-2.0.jar

 
 	   
   		velocity   
  		com.opensymphony.module.sitemesh.velocity.VelocityDecoratorServlet  
   		
    		TemplatePath
    		/
   		
  		
   			default_encoding
   			UTF-8
  		
  		1
 		   
 
 	   
  		velocity   
  		*.vm   
 	
 
  • /WEB-INF/velocity.properties

 
 

Struts2

 
 

Apache Common

  • commons-logging-1.0.4.jar

  • commons-fileupload-1.2.1.jar

  • commons-io-1.3.2.jar

  • commons-beanutils-1.8.3.jar

  • commons-collections-3.2.1.jar

  • commons-digester-2.0.jar

  • commons-lang-2.5.jar

 
 

JSON Simple

  • json_simple-1.1.jar

 
 

Spring

  • /WEB-INF/web.xml

 
 	
 		contextConfigLocation
 		
 			/WEB-INF/classes/spring-common.xml,
 			/WEB-INF/classes/spring-qrcode.xml
 		
 	
 
 	
 		org.springframework.web.context.ContextLoaderListener
 	
 

DWR

  • dwr.jar

  • /WEB-INF/web.xml

 
 	
 		dwr
 		org.directwebremoting.spring.DwrSpringServlet
 		
 			debug
 			true
 		
 		
 			crossDomainSessionSecurity
 			false
 				
 	
 	
 	
 		dwr
 		/dwr/*
 	
 
  • Spring 설정

 
 	
 		
 		
 	
 
 	
 				
 	
 
  • HTML에서 사용 방법

 
  
  
 
 
 
  • Java 프로그램

 
 package com.jopenbusiness.gae.qrcode.service;
 
 public class SampleDwrService {
 	public String hello(String name) {
 		return "Hello, " + name;
 	}
 }
 

PHP 개발 환경

 
 

RESTfull

  • REST (REspresentational State Transfer)

    • URI를 통해 Resource를 요청하고 이를 통해 표현 상태의 변경을 유발하는 통신 Architecture

    • REST 방식의 웹서비스는 세션을 사용하지 않습니다.

    • RESTfull : REST 개변에 충실하게 구현된 웹 Application과 구조
      {|cellspacing="0" cellpadding="2" border="1" width="100%" bgcolor="#FFFFFF" align="center" 
      |- 
      |width="20%" align="center" valign="middle" style="background-color:#eee;"|Resource 
      |width="20%" align="center" valign="middle" style="background-color:#eee;"|GET
      조회 
      |width="20%" align="center" valign="middle" style="background-color:#eee;"|PUT
      수정 
      |width="20%" align="center" valign="middle" style="background-color:#eee;"|POST
      등록 
      |width="20%" align="center" valign="middle" style="background-color:#eee;"|DELETE
      삭제 
      |- |align="center" valign="middle"|Collection URI
      http://localhost/resources 
      |align="center" valign="middle"|자료 목록 반환 |align="center" valign="middle"|전체 자료 수정 |align="center" valign="middle"|새로운 자료 생성 |align="center" valign="middle"|전체 자료 삭제 |- |align="center" valign="middle"|Element URI
      http://localhost/resources/123 
      |align="center" valign="middle"|지정한 자료 반환 |align="center" valign="middle"|지정한 자료 수정/생성 |align="center" valign="middle"|새로운 자료 생성 |align="center" valign="middle"|지정한 자료 삭제 |}

  • JAX-RS

     
  • JAX-RS Annotations

     
  • JAX-RS Sample

 
 @Path("widgets")
 @Produces("application/xml")
 public class WidgetsResource {
     @GET
     @Path("offers")
     public WidgetList getDiscounted() {
     }
 
     //--- Sub-resource Method, 요청을 직접 처리
     @GET
     @Path("offers/{id}")
     @Consumes("application/json")
     public Widget findWidget(@QueryParam("id") String id) {
     }
 
     @GET
     @Produces("text/html")
     public String getAsHtml() {
     }
 
     //--- Sub-resource Locator, 요청을 처리할 객체를 반환
     //--- @GET과 같은 Request Method 지정 어노테이션을 반드시 생략할 것
     @Path("offers/{id}")
     public WidgetResource findWidget(@QueryParam("id") String id) {
         return new WidgetResource(id);
     }
 }
 
 public class WidgetResource {
     public WidgetResource(String id) {
     }
 
     @Get
     public Widget getDetails() {
     }
 }
 
 
 

참고 문헌


 
 

분류: Google 
Cloud 
Java

최종 수정일: 2024-09-30 12:26:18

이전글 :
다음글 :