Upload
sun-jin-jang
View
1.097
Download
2
Embed Size (px)
DESCRIPTION
Citation preview
목차• Google App Engine SDK for Java• Google App Engine 개발 툴 지원• STEP 1. GAE/J 프로젝트의 프레임웍 통합 이슈• STEP 2. 라이브러리 의존성 관리 방식 적용
Google App Engine SDK for Java
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
GAE/J SDK• GAE/J 를 위한 로컬 개발 환경
– Jetty 6.1 기반 (Java 5.0 이상 )– SDK 는 Eclipse 플러그인에 내장– appcfg.sh
• 웹 애플리케이션 배포을 위한 쉘– dev_appserver.sh
• 로컬 개발 서버 관리 쉘
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
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$
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• 데이터베이스 파일 삭제
Google App Engine 개발툴 지원
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
Eclipse GAE/J Project Layout
Eclipse Compile & Deployment Depen-dency
Compile
Deployment
Eclipse Google Plugin 주요 기능
Update URL: http://dl.google.com/eclipse/plugin/3.6
IntelliJ 의 GAE 프로젝트 지원
IntelliJ 의 GAE 프로젝트 지원
IntelliJ 의 GAE 프로젝트 지원
IntelliJ 의 GAE 프로젝트 배포지원
NetBeans – Google Plugin 설치• http://kenai.com/projects/nbappengine/pages/Home
– Update Center• http://http://kenai.com/downloads/nbappengine/NetBeans69/up-
dates.xml
NetBeans – Google Plugin 설치
NetBeans – Google App Engine 등록
NetBeans – GAE 프로젝트 지원
NetBeans - GAE 파일 편집
NetBeans : GAE 배포지원
ㄹㄹㄹ
STEP 1. GAE/J 프로젝트의 프레임웍 통합 이슈
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
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 無
프로젝트에 적용해야 할 REST 특성
• REST 는 아키텍처 스타일– Client/Server 아키텍처
– Stateless
• 각 Request 독립성 보장
– 캐쉬 시스템을 지원
– 일관성 있는 접근 방식
• 각 자원은 유일한 URL 을 갖아야 함
• HTTP 프로토콜의 일관성 유지
– 확장성을 위하여 레이어 아키텍처를 지원
REST 애플리케이션 디자인
Convert Layer
RESTFul Resource Layer
Database Ac-cess Layer
Business Resource Layer
REST 애플리케이션 디자인
Convert Layer
RESTFul Resource Layer
Database Ac-cess Layer
Business Resource Layer
URL
Resource
Representation
Cache
Net-work Cache
Layered ArchitectureClient
REST 애플리케이션 디자인 : 프레임웍 맵핑
POJO XML, JSONJAXB
JAX-RS(JSR-311) RIJersey
JPA, JDO, Memcache
BigTable
Springframework
Google App Engine
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
STEP 1. 라이브러리 추가 • 28 개 라이브러리를 /war/WEB-INF/lib 디렉터리에 복사
STEP 1. 파일 편집 및 라이브러리 등록
클래스 패스 추가
STEP 1. 로컬 배포 및 테스트
현재 프로젝트의 문제점 ?• STEP 1 완료 시점에서는 어떤 문제점이 있을까요 ?
STEP 2. 라이브러리 의존성 관리 방식 적용
GAEJ 툴 : Apache Ant• http://code.google.com/intl/ko/appengine/docs/java/tools/ant.ht
ml• No-Dependency Management
GAEJ 툴 : Apache Maven Plugin• 이클립스 Google Project 와 통합성이 떨어짐
빌드 시스템의 추세 • IVY 는 Apache Ant 의 서브 프로젝트• Maven Repository 기반의 의존성 관리 방식을 Ant 에 적용
ANT ANT+IVY Maven
자유도 강점
의존성 관리 표준화
표준화 강점
Google Project 의 의존성 관리
Spring3.0.5Jersey 1.6SLF4J
의존성 추가
의존성 관리 필요성
GAE Project 의 의존성 관리• IVY 를 이용한 라이브러리 의존성 관리 방식 적용• IVY 설정을 이용하여 Ant Task 로 Install-Dependency
구동
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>
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" />
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>
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>
Ant Build Task : Dependency 구성• Web Application 배포를 위한 라이브러리 설정
– Deploy-prepare: compile & runtime 라이브러리를 war/WEB-INF/lib 에
Q&A