48
GAE/J PROJECT MANAGEMENT [email protected] @devtainer

N02 app engineseminar

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: N02 app engineseminar

GAE/J PROJECT MANAGEMENT

[email protected]@devtainer

Page 2: N02 app engineseminar

목차• Google App Engine SDK for Java• Google App Engine 개발 툴 지원• STEP 1. GAE/J 프로젝트의 프레임웍 통합 이슈• STEP 2. 라이브러리 의존성 관리 방식 적용

Page 3: N02 app engineseminar

Google App Engine SDK for Java

Page 4: N02 app engineseminar

Google App Engine 다운로드• http://code.google.com/intl/ko-KR/appengine/down-

loads.html– Google App Engine SDK for Python– Google App Engine SDK for Java– Google Plugin for Eclipse– Google App Engine Documentation– Google App Engine Button

Page 5: N02 app engineseminar

GAE/J SDK• GAE/J 를 위한 로컬 개발 환경

– Jetty 6.1 기반 (Java 5.0 이상 )– SDK 는 Eclipse 플러그인에 내장– appcfg.sh

• 웹 애플리케이션 배포을 위한 쉘– dev_appserver.sh

• 로컬 개발 서버 관리 쉘

Page 6: N02 app engineseminar

GAE/J SDK Command – bin/appcfg.sh• <GAE_HOME>\bin\appcfg.sh [options] <action> <war-loca-

tion>– GAE/J 의 환경 설정 및 배포를 담당– Option

• --email• --passin

– Action• update• update_indexes• vaccum_indexs• update_queues• update_dos• update_cron• request_logs

– Example• <GAE_HOME>/bin/appcfg.sh update myapp/war• <GAE_HOME>/bin/appcfg.sh update_indexes myapp/war• <GAE_HOME>/bin/appcfg.sh vaccum_indexes myapp/war• <GAE_HOME>/bin/appcfg.sh update_dos myapp/war

Page 7: N02 app engineseminar

bin/appcfg.sh – uploading applica-tiondevtainer:bin devtainerkim$ ./appcfg.sh update ../demos/helloorm/warReading application configuration data...2011. 3. 22 ???? 2:48:02 com.google.apphosting.utils.config.AppEngineWebXmlReader readAppEngineWebXml????: Successfully processed ../demos/helloorm/war/WEB-INF/appengine-web.xml2011. 3. 22 ???? 2:48:02 com.google.apphosting.utils.config.AbstractConfigXmlReader readConfigXml????: Successfully processed ../demos/helloorm/war/WEB-INF/web.xmlBeginning server interaction for devtainerdemo...0% Creating staging directory5% Scanning for jsp files.25% Initiating update.

Email: [email protected] for [email protected]: 28% Cloning 23 application files.40% Uploading 1 files.61% Initializing precompilation...90% Deploying new version.95% Will check again in 1 seconds.99% Will check again in 4 seconds.99% Will check again in 8 seconds.99% Closing update: new version is ready to start serving.99% Uploading index definitions.

Update completed successfully.Success.Cleaning up temporary files...devtainer:bin devtainer$

Page 8: N02 app engineseminar

GAE/J SDK Command – bin/dev_appserver.sh• <GAE_HOME>\bin\dev_appserver.sh [options] war-location

– GAE/J 의 로컬 서버 구동 : defalt port: 8080– Option

• --port• --address• --sdk_root• -disable_update_check

– Example• <GAE_HOME>/bin/dev_appserver.sh myapp/war

– URL• http://localhost:8080/_ah/login• http://localhost:8080/_ah/admin

– Local DataStore 초기화• 데이터베이스 파일명 : local_db.bin• 위치 : <GAE_PROJECT>/WEB-INF/appengine-generated• 데이터베이스 파일 삭제

Page 9: N02 app engineseminar

Google App Engine 개발툴 지원

Page 10: N02 app engineseminar

Eclipse Plugin- Google Plugin 설치• Eclipse Plugin Site

– http://dl.google.com/eclipse/plugin/3.6 (Helios)– http://dl.google.com/eclipse/plugin/3.5 (Galileo)– http://dl.google.com/eclipse/plugin/3.4 (Ganymede)

Google Plugin 주요 기능• App Engine 에 배포 가능• Local GAE SDK 서버 구동

• Running&Debuggig• 입력과 동시에 유효성 확인• 프로젝트 생성• JDO 클래스 Enhance

Page 11: N02 app engineseminar

Eclipse GAE/J Project Layout

Page 12: N02 app engineseminar

Eclipse Compile & Deployment Depen-dency

Compile

Deployment

Page 13: N02 app engineseminar

Eclipse Google Plugin 주요 기능

Update URL: http://dl.google.com/eclipse/plugin/3.6

Page 14: N02 app engineseminar

IntelliJ 의 GAE 프로젝트 지원

Page 15: N02 app engineseminar

IntelliJ 의 GAE 프로젝트 지원

Page 16: N02 app engineseminar

IntelliJ 의 GAE 프로젝트 지원

Page 17: N02 app engineseminar

IntelliJ 의 GAE 프로젝트 배포지원

Page 18: N02 app engineseminar

NetBeans – Google Plugin 설치• http://kenai.com/projects/nbappengine/pages/Home

– Update Center• http://http://kenai.com/downloads/nbappengine/NetBeans69/up-

dates.xml

Page 19: N02 app engineseminar

NetBeans – Google Plugin 설치

Page 20: N02 app engineseminar

NetBeans – Google App Engine 등록

Page 21: N02 app engineseminar

NetBeans – GAE 프로젝트 지원

Page 22: N02 app engineseminar

NetBeans - GAE 파일 편집

Page 23: N02 app engineseminar

NetBeans : GAE 배포지원

Page 24: N02 app engineseminar

ㄹㄹㄹ

STEP 1. GAE/J 프로젝트의 프레임웍 통합 이슈

Page 25: N02 app engineseminar

REST• REST

– REpresentational State Transfer– Roy Fielding 의 박사학위 논문에서 처음 제안

• Architectural Styles and the Design of Network-based Software Architectures

• http://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm

– 아키텍처 스타일– RESTful WebService: REST 스타일에 따른 웹 서비스 구현

• REST 본래 의미– 웹과 같은 대규모 네트워크 시스템을 위한 원칙들의 모음

• REST 최근 경향– XML 과 HTTP 를 사용하는 단순한 웹 기반 인터페이스를 지칭– REST 의 원칙을 따르는 Web Services

Page 26: N02 app engineseminar

REST 디자인

Data Action HTTP Method

Create POST

Retrieve GET

Update PUT

Delete DELETE

URL ( 명사형 ) Method body

http://localhost/employee get 無http://localhost/employee/001 get 無http://localhost/mentees post JSON or XML

http://localhost/mentees PUT JSON or XML

http://localhost/mentees/001 DELETE 無

Page 27: N02 app engineseminar

프로젝트에 적용해야 할 REST 특성

• REST 는 아키텍처 스타일– Client/Server 아키텍처

– Stateless

• 각 Request 독립성 보장

– 캐쉬 시스템을 지원

– 일관성 있는 접근 방식

• 각 자원은 유일한 URL 을 갖아야 함

• HTTP 프로토콜의 일관성 유지

– 확장성을 위하여 레이어 아키텍처를 지원

Page 28: N02 app engineseminar

REST 애플리케이션 디자인

Convert Layer

RESTFul Resource Layer

Database Ac-cess Layer

Business Resource Layer

Page 29: N02 app engineseminar

REST 애플리케이션 디자인

Convert Layer

RESTFul Resource Layer

Database Ac-cess Layer

Business Resource Layer

URL

Resource

Representation

Cache

Net-work Cache

Layered ArchitectureClient

Page 30: N02 app engineseminar

REST 애플리케이션 디자인 : 프레임웍 맵핑

POJO XML, JSONJAXB

JAX-RS(JSR-311) RIJersey

JPA, JDO, Memcache

BigTable

Springframework

Google App Engine

Page 31: N02 app engineseminar

REST 프로젝트 결정 사항• 기본 IDE: Eclipse• WAS: Google App Engine 1.4.2• 의존성 프레임웍

– Jersey 1.6-ea01– Springframework 3.0.5 Release– Junit 4.8.1– SLF4J 1.6.1

Page 32: N02 app engineseminar

STEP 1. 라이브러리 추가 • 28 개 라이브러리를 /war/WEB-INF/lib 디렉터리에 복사

Page 33: N02 app engineseminar

STEP 1. 파일 편집 및 라이브러리 등록

클래스 패스 추가

Page 34: N02 app engineseminar

STEP 1. 로컬 배포 및 테스트

Page 35: N02 app engineseminar

현재 프로젝트의 문제점 ?• STEP 1 완료 시점에서는 어떤 문제점이 있을까요 ?

Page 36: N02 app engineseminar

STEP 2. 라이브러리 의존성 관리 방식 적용

Page 37: N02 app engineseminar

GAEJ 툴 : Apache Ant• http://code.google.com/intl/ko/appengine/docs/java/tools/ant.ht

ml• No-Dependency Management

Page 38: N02 app engineseminar

GAEJ 툴 : Apache Maven Plugin• 이클립스 Google Project 와 통합성이 떨어짐

Page 39: N02 app engineseminar

빌드 시스템의 추세 • IVY 는 Apache Ant 의 서브 프로젝트• Maven Repository 기반의 의존성 관리 방식을 Ant 에 적용

ANT ANT+IVY Maven

자유도 강점

의존성 관리 표준화

표준화 강점

Page 40: N02 app engineseminar

Google Project 의 의존성 관리

Spring3.0.5Jersey 1.6SLF4J

의존성 추가

Page 41: N02 app engineseminar

의존성 관리 필요성

Page 42: N02 app engineseminar

GAE Project 의 의존성 관리• IVY 를 이용한 라이브러리 의존성 관리 방식 적용• IVY 설정을 이용하여 Ant Task 로 Install-Dependency

구동

Page 43: N02 app engineseminar

IVY 설정 : ivysettings.xml<?xml version="1.0" encoding="ISO-8859-1"?><ivysettings>

<settings defaultResolver="javanet.jboss.ibiblio" overwrite-Mode="true" /><resolvers>

<chain name="javanet.jboss.ibiblio"> <ibiblio name="java-net-maven2" root="http://download.java.net/maven/2/" m2compatible="true" /> <ibiblio name="jboss-maven2" root="http://repository.jboss.org/maven2/" m2compatible="true" /> <ibiblio name="ibiblio" m2compatible="true" />

</chain></resolvers>

</ivysettings>

Page 44: N02 app engineseminar

IVY 설정 : ivy.xml (I)<?xml version="1.0" encoding="UTF-8"?><ivy-module version="1.4"> <info organisation="devmentor.gae" module="session2" status="integration" >

</info> <configurations>

<conf name="runtime"/> <conf name="compile"/> <conf name="test"/>

</configurations> <dependencies>

<dependency org="com.sun.jersey" name="jersey-server" rev="1.6-ea02" conf="compile->default"/><dependency org="com.sun.jersey.contribs" name="jersey-

spring" rev="1.6-ea02" conf="compile->default" /><dependency org="com.sun.jersey" name="jersey-json" rev="1.6-ea02" conf="compile->default" />

Page 45: N02 app engineseminar

IVY 설정 : ivy.xml (II)<dependency org="org.slf4j" name="slf4j-api" rev="1.6.1" conf="compile->default" /><dependency org="org.slf4j" name="jcl-over-slf4j" rev="1.6.1" conf="runtime->default" /><dependency org="org.slf4j" name="slf4j-log4j12" rev="1.6.1" conf="runtime->default" /><dependency org="log4j" name="log4j" rev="1.2.16" conf="runtime->default" /><dependency org="org.springframework" name="spring-context" rev="3.0.5.RELEASE" conf="compile->default" > <exclude org="commons-logging" /></dependency><dependency org="org.springframework" name="spring-web" rev="3.0.5.RELEASE" conf="runtime->default" /><dependency org="junit" name="junit" rev="4.8.1" conf="test->default" /><dependency org="org.springframework" name="spring-test" rev="3.0.5.RELEASE" conf="test->default" />

</dependencies> </ivy-module>

Page 46: N02 app engineseminar

Ant Build Task : Dependency 구성<property name="project.target" value="${basedir}/target" />

<target name="install-dependency" depends="install-ivy"> <ivy:retrieve

pattern="${project.target}/[conf]-libs/[artifact]-[revi-sion].[ext]" /

</target>

Page 47: N02 app engineseminar

Ant Build Task : Dependency 구성• Web Application 배포를 위한 라이브러리 설정

– Deploy-prepare: compile & runtime 라이브러리를 war/WEB-INF/lib 에

Page 48: N02 app engineseminar

Q&A