- GAE for Java 개발 환경
- GAE에 회원 가입
- GAE에서 Application 생성
- Eclipse 개발 환경 설정
- GAE Application 개발
- JSP 사용 환경 설정
- Eclipse에서 GAE 실행
- 개발 환경에서 GAE 실행
- GAE/J 개발 환경 설정
- GAE/J 개발 환경 개요
- appengine-web.xml
- HTML
- jQuery
- SiteMesh
- Freemarker
- Velocity
- Struts2
- Apache Common
- JSON Simple
- Spring
- DWR
- PHP 개발 환경
- RESTfull
- 참고 문헌
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
"Window -> Preferences -> Google -> App Engine" 메뉴가 생성됨
GAE Application 개발
Eclipse에서 Application 생성
파란 g 아이콘(App Engine for Java 프로젝트 작성 마법사)을 눌러 GAE Application을 생성 한다.
Project name : GAE 프로젝트의 이름을 입력 한다.
Package : 사용할 패키지명을 입력 한다.
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 Application의 컴파일
"빨간 G 아이콘"을 눌러 GAE Application을 컴파일 한다.
Eclipse에서 Application을 GAE로 deploy
소형 제트기 아이콘(App Engine 프로젝트 deploy)을 누른다.
GAE에 deploy하기 위해 접속 Email과 Password를 입력한다.
GAE에서 등록한 "Application Identifier"를 등록 한다.
"App Engine project setting..."을 클릭 한다.
"Application ID"에 GAE에서 등록한 "Application Identifier"를 등록 하고 "OK" 버튼을 누른다.
"Deploy" 버튼을 누르면 GAE Application이 컴파일 되고 deploy 된다.
GAE Application 확인
http://smartyandroid.appspot.com/ 에 접속하여 서비스를 확인 한다.
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 실행
오른쪽 마우스를 누른다.
"Run As -> Web Application"메뉴를 선택 한다.
http://localhost:8888/ 로 접속하여 사용 한다.
http://localhost:8888/_ah/admin 로 관리자 콘솔에 접속할 수 있다.
개발 환경에서 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
runDemo.cmd 파일을 실행 한다.
종료를 원할 경우 Ctrl_C 를 누른다.
브라우저에서 개발 서버 접속
http://localhost:8080/ 으로 접속한다.
참고 문헌
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"|
jQuery 1.4.2 ([http://jquery.com/ 사이트])
FreeMarker ([http://freemarker.org/ 사이트])
|valign="top"|DWR ([http://directwebremoting.org/ 사이트])
Struts2 ([http://struts.apache.org/ 사이트])
Resource Bundle (다국어 지원)
|valign="top"|
Logging
File IO
Spring 3.0.4 ([http://www.springsource.org/ 사이트])
DI, AOP
|valign="top"|
Google App Engine ([http://code.google.com/intl/en/appengine/ 사이트])
Google Bigtable valign="top"
[[HTML5]], CSS3
JSP + Tag Library
Velocity ([http://velocity.apache.org/ 사이트])
commons-lang 2.5
|valign="top"|
|valign="top"|
|valign="top"|
iBatis ([http://ibatis.apache.org/ 사이트])
Google App Engine for Java : GAE와 호환되는 라이브러리를 설명 한다.
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
[GAE용 Struts 환경 설정](Struts.md#GAE용 Struts 환경 설정.md) 참조
참고 문헌
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 개발 환경
Java 기반의 PHP 인터프리터인 Quercus을 사용하여 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
JSR-311, Java Annotation API
Java API for RESTfull Web Services (2007 ~)
구현체
[http://www.restlet.org/ Restlet] : RESTful, 2010.1
JAX-RS Annotations
@Path : 리소스에 대한 접근 경로
@GET, @POST, @PUT, @DELETE : Http Request Method
@Produces : 반환하는 데이터의 미디어 타입 (XML, JSON)
@Consumes : 요청 데이터의 미디어 타입
URI matrix parameter
@QueryParam : http://localhost/member?no=12&name=kim
@MatrixParam : http://localhost/member;no=12;name=kim
@PathParam : http://localhost/member/no/12/name/kim
Parameter type
public static valueOf(String), public static fromString(String)
List
, Set , SortedSet
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() {
}
}
Restlet 설정
GAE/J(Google App Engine for Java)에 restlet 환경을 설정해 보자.
다운로드 사이트에서 restlet-1.1.10.zip 파일을 다운로드 한다.
restlet-1.1.10.zip 파일의 압축을 풀어 lib 디렉토리에 있는 jar 파일을 GAE/J 애플리케이션의 /war/WEB-INF/lib 디렉토리로 복사 한다.
참고 문헌
Implementing-REST : RESTful 형태의 API 를 구축할때 필요한 정보를 한데 모은 사이트
참고 문헌
Google App Engine for Java : IBM에서 만든 한글 파일
http://code.google.com/intl/ko-KR/appengine/docs/java/gettingstarted/
Developing Java Based Web Applications in Google App Engine : PDF 파일
다운로드