본문 바로가기

프로그래밍 이야기

Google App Engine + Jersey를 사용하여 REST 서비스 구축하기

지난 포스트(2011/07/21 - Jersey 라이브러리로 REST서버를 만들어보자!)에서는

톰캣을 이용하여 서버를 구축하는 방법에 대해 알아보았습니다.


톰캣 서버 구축하는 것은 그리 어려운 일이 아니지만,

실제로 서비스를 구축하려면 서버를 계속 유지해야 하기에 추가비용이 들지요.

하지만 Google App Engine을 이용하면 비용 부담없이 서비스를 구축할 수 있습니다.

물론 무료로 제공되는 한도 안에서만 서비스를 제공할 수 있다는 단점이 있지만,

추가로 서버를 구축할 필요가 없고, 사용자가 적은 서비스의 경우 충분히 지원이 가능해 단점을 보완해줍니다.



AppEngine에 애플리케이션 등록하기


AppEngine 콘솔로 접속하면 등록된 애플리케이션들을 관리하는 페이지가 표시됩니다.

하단의 Create Application 버튼을 누르면 애플리케이션 생성 페이지로 넘어갑니다.


Application Identifier는 애플리케이션의 고유 ID를 의미합니다.

중복되지 않는 것으로 지정하시면 되고, Application Title은 말 그대로 앱 이름을 넣어주면 됩니다.

인증 관련 설정은 본 강좌에서는 기본값을 그대로 사용합니다.




Storage Options는 기본값을 그대로 사용합니다.

Create Application을 누르면 애플리케이션이 생성되고,

애플리케이션 관리 콘솔에 애플리케이션이 표시됩니다.



애플리케이션 등록이 끝났으니, 이제 개발환경을 설정할 차례입니다.


Google Plugin for Eclipse 다운로드


개발을 진행하기 위한 플러그인 설치를 위해 플러그인 다운로드 페이지로 이동합니다.

자신의 이클립스 버전에 맞는 업데이트 사이트 주소를 선택하여 이클립스의 Software Update 사이트에 추가합니다.

다음. 목록에서 다음과 같이 Google Plugin for Eclipse와 SDKs 를 선택하여 설치합니다.



플러그인 설치가 완료된 후,

메뉴의 File > New > Other..를 선택한 후 Google 에서 Web Application Project를 선택합니다.




New Web Application Project에서 애플리케이션 이름과 패키지를 지정한 후,

Google SDKs에서 Use Google Web Toolkit 와

Generate project sample code는 체크 해제한 후 Finish를 눌러 프로젝트를 생성합니다.





Jersey 라이브러리 적용


Java Jersey 1.13 라이브러리를 다운로드한 후 압축을 해제합니다.

Jersey 페이지에서 다운로드할 수도 있고, 여기를 눌러 바로 다운로드할 수도 있습니다.


압축 해제한 Jersey 라이브러리의 /lib 폴더를 보면 여러 jar 파일들이 들어있습니다.


위의 /lib 폴더에 있는 jar 파일들을 모두 /war/WEB-INF/lib 폴더에 복사합니다.




다음, 빌드패스에 해당 라이브러리들을 추가합니다.

/lib 폴더에 우리가 추가한 것과 기존에 있던 것이 섞여있으므로

Jersey 라이브러리에 있던 것만 골라서 잘 추가해야 합니다.





REST 서비스를 위핸 서블릿 등록하기


서블릿을 등록하기 위해 /war/WEB-INF/web.xml을 열어 REST 서비스에 필요한 서블릿을 추가합니다.

SystemServiceServlet은 앱엔진에서 사용하는 것으로 그대로 두면 됩니다.


중간에 com.sun.jersey.spi.container.servlet.ServletConatiner의 두번째 param-value에 REST 서비스를 위한 서블릿이 있는 패키지를 지정하고, 아래의 servlet-mapping에서 이 서블릿들에 접근할 루트 경로를 지정하면 됩니다.

여기에서는 /apis 로 지정하였습니다.


[web,xml]

<?xml version="1.0" encoding="utf-8" standalone="no"?><web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.5" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  
	<servlet>
		<servlet-name>Sample REST</servlet-name>
		<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
		<init-param>
			<param-name>com.sun.jersey.config.property.packages</param-name>
			<param-value>com.androidhuman.example.appenginerest</param-value>
		</init-param>
		<load-on-startup>1</load-on-startup>
	</servlet>
	<servlet-mapping>
		<servlet-name>Sample REST</servlet-name>
		<url-pattern>/apis/*</url-pattern>
	</servlet-mapping>
 <servlet>
  <servlet-name>SystemServiceServlet</servlet-name>
  <servlet-class>com.google.api.server.spi.SystemServiceServlet</servlet-class>
  <init-param>
   <param-name>services</param-name>
   <param-value/>
  </init-param>
 </servlet>
 <servlet-mapping>
  <servlet-name>SystemServiceServlet</servlet-name>
  <url-pattern>/_ah/spi/*</url-pattern>
 </servlet-mapping>
</web-app>


다음, REST 서비스용 서블릿을 작성합니다.

여기에서는 간단하게 'Hello,[이름]'을 출력하는 예제를 작성합니다.

여기에서는 Jersey 라이브러리의 사용법에 대한 내용은 자세히 다루지 않겠습니다.

자세한 내용이 궁금하신 분들은


2011/07/21 - Jersey 라이브러리로 REST서버를 만들어보자!

를 참조해주세요.


[SampleREST.java]

package com.androidhuman.example.appenginerest;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

@Path("/sample")
public class SampleREST {
	
	@GET
	@Path("/hello/name={name}")
	@Produces(MediaType.TEXT_HTML)
	public String hello(
			@PathParam("name")final String name){
		return "Hello, "+name;
	}
}


이제 실행 버튼을 누르면 로컬 서버가 시작되며 구현된 웹 애플리케이션을 테스트할 수 있게 됩니다.

콘솔 출력에 서버 주소가 표시되므로, 이를 참고하면 됩니다.


만들어진 REST API를 테스트해보았습니다.

잘 작동됩니다 :)




AppEngine 서버에 배포하기


실제 서버에 우리가 개발한 것을 올리려면 'Deploy' 과정이 필요합니다.

이를 위해 프로젝트 속성 > Google > App Engine에서 Application Id와 버전을 설정하면 됩니다.




Application ID를 설정했다면, 이제 앱엔진 서버로 올릴 준비가 모두 끝났습니다.

툴바에서 Deploy to AppEngine...을 누르면 앱엔진 서버에 우리가 개발한 것을 배포하게 됩니다.



앱엔진 서버에 배포하면 http://[자신의 애플리케이션 ID].appspot.com 주소를 사용하면 됩니다.

만약 애플리케이션 ID가 android이고, 위의 예제를 테스트하고 싶다면


http://android.appspot.com/apis/sample/hello/name=android


를 입력하면 되겠죠?!

구글 앱엔진과 Jersey 라이브러르릴 사용한 REST 서비스 구축,

어렵지 않죠? ㅎㅎ