이전에도 Eclipse Plugin을 Eclipse에서 설치해서 사용하는 것에 대해서 설명한 적이 있다.
이이 Eclipse에 익숙한 개발자라면,

구글에서 제공하는 아래와 간은 정보를 이용해서 원하는 버전에 적합한 Plug-in을 설치할 수 있을 것이다.

  • The Google Plugin for Eclipse, for Eclipse 3.3 (Europa):
    http://dl.google.com/eclipse/plugin/3.3
  • The Google Plugin for Eclipse, for Eclipse 3.4 (Ganymede):
    http://dl.google.com/eclipse/plugin/3.4
  • The Google Plugin for Eclipse, for Eclipse 3.5 (Galileo):
    http://dl.google.com/eclipse/plugin/3.5

구글의 Plug-in은 위와 같이 Eclipse의 세가지 버전(3.3, 3.4, 3.5)을 지원한다.
이중 3.5버전인 Galileo는 최근에 구글에서 Plug-in을 제공하기 시작했다. (얼마전까지는은 Eclipse 3.5버전에서는 사용하지 못했다는 말이다.)
 
어떻게 설치하고, 환경을 만드는지는 "Google App Engine Java SDK 1.2.1 Released" 의 글을 참조하면 된다. (처음 Eclipse를 사용하는  사람은 "Google App Engine SDK 설치 및 실행"를 참조)

Eclipse 3.5인 Galileo는 이전 버전들과 Plug-in 설치 방식이 약간 달라졌다.
이전 3.4 버전에서 제공 하던 방식은 플러그인을 찾는 방식이 편하지 많은 않았다. 왜냐하면, 백그라운드에서 사용자가 입력한 플러그인 이름을 실시간으로 키 입력시마다 추천해 주는 방식을 제공했는데, 네트워크에서 대기하는 시간에 대한 부담을 사용자가 가져야 했기 때문이다. 3.5 버전에서는 이러한 것들이 개선되어 졌다.

아래는 Eclipse 3.5에 GAE 플러그인을 설치한 것들을 캡쳐한 화면이다.

Eclipse 3.5의 Help > Install New Software... 를 클릭하면 아래 화면이 나타난다.


위 화면에서 상단 오른쪽에 있는 "Add..." 버튼을 클릭하면 창이 나타나면 아래와 같이 "Name"과 "Location"을 입력하고 "OK"버튼을 누른다. (Name은 사용자가 원하는 이름을 넣으면 된다.)


입력한 주소(Location) 정보가 정확하면, 아래과 같이 설치 가능한 플러그인들 목록이 표시된다.
모두 설치를 할것이므로 아래처럼 모두 체크해서 선택하면 된다. 그리고 "Next"버튼을 클릭한다.


위에서 "Next" 버튼을 클릭하면, 아래와 같이 상세 정보들이 나타난다. 다시 "Next"버튼을 클릭한다.

설치할 플러그인들에 대한 Licese 정책에 동의 할 것인지를 묻는 창인데, 당연히 동의해야 한다.
만약 동의하지 않는다면, 설치가 안될테니까... ^^;;;

위에서 동의하고 "Finish"버트을 누루면, 아래와 같이 설치가 진행된다.

Posted by 행복상자
최근에 몸이 안좋다는 핑계로 이것 저것 하던 것들 다 손에서 내려 놓고, 아무것도 제대로 해보지 않은지 약 1달이 되었다. 이전에 Twiter4J 분석해서 여러가지를 테스트하고는 이를 GAE에 올리려고 하다가, 말았는데 그 이유는 새로 다운 받은 Eclipse 3.5 버전(Galileo)에서 돌아가는 GAE 플러그인이 제공되지 않았기 때문이 었다. 그 이후로 수 차례 GAE 사이트에 들어가서, 확인을 해 보았지만, 여전히 제공되지 않는 것을 확인하고는 잊고 있었다.

그러다가 최근에야 Eclipse 3.5 플러그인이 제공되는 것을 알게 되었다.
오늘은 GAE에 변경된 것들이 있는지 문서들을 읽어 보다가 web.xml 설정에 대한 제약들을 알게 되었는데, 어쩌면 당연한 것이라고 생각되는 것이었다.

아래의 내용인데,

App Engine supports the <load-on-startup> element for servlet declarations. However, the load actually occurs during the first request handled by the web server instance, not prior to it.

App Engine supports <mime-mapping> elements for specifying the MIME type to use for resources whose filenames end with certain extensions. However, MIME mappings only apply to servlets, not to static files. Static files use a fixed list of mappings of filename extensions to MIME types.

Some deployment descriptor elements can take a human readable display name, description and icon for use in IDEs. App Engine doesn't use these, and ignores them.

App Engine doesn't support JNDI environment variables (<env-entry>).

App Engine doesn't support EJB resources (<resource-ref>).

The <distributable> element is ignored.

Servlet scheduling with <run-at> is not supported.


읽어보면 Web Applicaton 시작시에 순서를 정해주게 되어 있는데, 이는 GAE에서는 별다는 의미를 부여하지 않는다는 것이다. 이를 사전에 처리하는 것이 아니라, 웹서버의 instance에 의해 첫번째 요청을 처리하는동안 load 되기 때문이다.

그리고, MIME mapping은 Servlet에 맵핑할때만 사용될뿐, 정적파일에는 사용되지 않는다. 정적 파일들에 대한 맵핑은 Fixed 된 파일을 통해서 정의해서 사용한다.

그리고,
- JNDI 환경변수를 지원하지 않는다.
- App Engine은 EJB 환경 변수를 지원하지 않는다.
- <distribution>은 무시한다.
- <run-at>태그를 이용한 Servlet의 스케즐링도 지원하지 않는다.
        (==> 기존의 다른 WAS상의 run-at 태그의 이용에 대한 것은 다음의 링크를 참조하면 된다.
        http://www.caucho.com/resin-3.0/servlet/run-at.xtp )



Posted by 행복상자
어제와 오늘은 스프링 프레임워크를에서 제공하는 코드를 이용하여, 몇가지를 테스트를 하였다.
Spring MVC를 이용하여, Sample코드를 작성해보았는데, 정상적으로 동작하지 않았다.
Springframework에서 제공하고 있는, MOC테스트도 정상적으로 동작하고, Controller에서 log를 찍어 보아도, 정상적으로 표시가 되는데, 꼭 View에서 값을 표시할 수 없다는 것이었다.

아래의 코드는 Controller의 코드로, 현재 시간을 String형으로 View에 전달되는 코드이다.
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        String now = (new Date()).toString();
        logger.info("Returning hello view with " + now);
        System.out.println("Returning hello view with..2 " + now);
        return new ModelAndView("/WEB-INF/jsp/hello.jsp", "now", now);
    }

View(hello.jsp)의 코드는 아래와 같다. JSTL과 EL을 이용해서, Controller에서 전달한 값을 찍어주는 코드이다. 그러나 내가 원하는 값(현재 시간) 대신 "${now}" 라고 화면에 찍어준다.
<%@ include file="/WEB-INF/jsp/include.jsp" %>
<html>
  <head><title>Hello :: Spring Application</title></head>
  <body>
    <h1>Hello - Spring Application</h1>
    <p>Greetings, it is now <c:out value="${now}"/></p>
  </body>
</html>

위의 코드를 테스트 하기가 그렇게 쉽지는 않았다. 왜냐하면, JSTL의 문제일 것이라는 생각은 있었지만 어떤식으로 전달되는 값을 테스트 할지는 생각하기 쉽지 않고, 에러 메시지도 전혀 없었기 때문이다.
그래서, 값의 전달에 문제가 있을 거라 생각하고, 다음과 같은 코드를 넣어 보았다.

<%@ include file="/WEB-INF/jsp/include.jsp" %>
<html>
  <head><title>Hello :: Spring Application</title></head>
  <body>
  <%
       out.println(request.getAttribute("now"));
  %>

    <h1>Hello - Spring Application</h1>
    <p>Greetings, it is now <c:out value="${now}"/></p>
  </body>
</html>

위와 같이 했을 때, 임시로 넣어준 테스트 코드인 "request.getAttribute("new"))" 는 정상적으로 Controller에서 전달한 값들이 표시해 주었다. 이제 문제는 JSTL과 EL의 문제인데, 엄밀하게 이야기하면, JSTL의 문제는 아니고, EL의 문제인데, 건드릴 수 있는 부분은 자바 코드는 전혀없기 때문데, 결국 시스템의 설정을 건드려 주어야 한다.

그래서, googling과 이전에 사서 보곤했던 "Head first"시리즈로 나왔던 "Server & JSP"책을 찾아보았다.
결국 답을 찾았는데, 답은 web.xml의 설정이 잘못되었기 때문이다.

아래는 처음에 web.xml에 설정했던 것이다.
<web-app xmlns="http://java.sun.com/xml/ns/javaee" version="2.5">

위의 것을 아래과 같이 설정을 변경하였더니, EL이 정상적으로 잘 동작하였다.
<web-app version="2.4"
         xmlns="http://java.sun.com/xml/ns/j2ee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
         http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" >

현재 Servlet versing 2.5가 최신의 것인데, 위에서는 2.4버전으로 설정한 것을 예로 보여주고 있다. 만약 2.5 버전을  사용하고 싶다면, 아래의 것을 사용하면 된다.

<web-app
  xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
  id="WebApp_ID" version="2.5">


Goolge App Engine은 JSTL을 기본적으로 제공하고 있기 때문에, JSTL을 지원하기 위해서, "jstl.jar"과 "standard.jar" 파일을 Class path에 포함 시킬 필요는 없다.

위와 같이 web.xml의 설정을 변경하면, 아래와 같은 결과를 볼수가 있다.

이를 해결하기까지, 생각보다 시간이 많이 걸렸다.



Posted by 행복상자
지난주에 Google App Engine SDK가 새로 Release되었다.
이번 Release는 Java 언어를 지원하고, 처음 제공되는 Release로 많은 버그들이 수정되었고, 새로운 기능들을 추가하기 위해서 제공한다고 한다.

추가 및 변경된 주요 기능은 아래과 같다.

- Support for unindexed datastore properties of arbitrary types
- Embedded UTF-8 characters in JSPs now render correctly
- Increase in response size limit from 1MB to 10MB
- Support for Thread.setContextLoader()

전체적인 수정된 항목들은 다음의 링크를 통해서 알수 있다.

위 내용들을 살펴보면, 현재 제공하고 있는 기능들을 사용하는 것이 만만치 않음을 알 수 있다. 아직까지는 최종 버전으로 제공되기에는 개발자들의 시행 착오를 필요로한다는 것이다. 그래도 해 볼만한 가치는 있다고 본다. 이렇게 빨리 버그들의 수정과 기능의 변경들이 이루어 지고 있으니 말이다.
만약 SDK를 이용하여 개발하고 있다면, 위의 세부 내용들을 한번씩 살펴보는 것도 시행착오를 줄이는 좋은 방법이다.
생각보다 많은 버그들은 아니므로, 한 시간 정도 투자하면 모든 것들을 살펴 볼 수 있을 거라 생각된다.

새로 제공되는 SDK는 구글에서 여기에서 다운을 받아서 설치 할수있다.
그러나 Eclipse의 plugin을 업데이트 하는 방법이 더 간단하므로, 여기서는 이를 이용하여 설치 하는 방법을 간략하게 알아보겠다.

Eclipse의 Software Updates and Add-ons 창을 열어서, 새로운 Plugin을 찾아보면, 아래와 같이 구글에서 제공하는 App Engine을 위한 Plugin과 SDK를 쉽게 찾을 있을 것이다.


위와 같이 선택을 하고 우측 tkd에 있는 "install..." 버튼을 클릭하여 다음 단계를 진행하면 된다.
이어서 아래의 화면이 나오는데, "NEXT" 버튼을 이용하여 다음 단계로 이동하면 된다.
  
위 화면에 이어서, 라이센스에 동의하는 화면에서 사용자가 동의하면 설치가 진행하게 된다.
설치가 마쳐지면, Eclipse를 다시 시작하면, SDK의 Update 작업은 끝나게 된다. 이미 Eclipse를 사용하고 있는 개발자라면 이는 매운 간단한 작업이 될 것이다.



자 여기가 끝이 아니다, 한거지 더 해야 할 작업이 있다.
지금까지는  SDK를 새로 설치한 것이 아니라, 단지 기존의 것을 업그레이드 하기 위한 준비 작업을 진행하였을 뿐ㅇ이다.  Eclipse에서 이것이 자동으로 설정들이 변경되고, 등록되었으면 좋겠지만, Google에서는 그렇게 제공하지 않고 기존에 설치했던 SDK를 제거하였기 때문에, 기존에 잘 동작하던 프로젝트의 클래스들 마져 Build Error가 일어나는 것을 볼수 있다. (사실 이부분은 나도 전혀 예상하지 못했던 부분이다.)

이를 해결 하기 위해서는 "Java Build Path"의 설정을 수정해 주면 된다. 이해하기 쉽게 말하면, 기존의 것을 참조하고 있던 것을 새로 설치한 SDK의 Path로 설정을 변경하면 된다.

먼저, Eclipse에서 "Alt + Enter"키를 눌러서 아래의 화면을 호출하거나, Eclipse의 window 메뉴의 서브 메뉴인 Preferences 메뉴를 마우스를 클릭하여 아래의 창을 띄운다. 그리고, 왼쪽의 메뉴 트리에서 "Java Build Path"를 클릭하고 "Libraries"템을 클릭한다. (아래 그림 참조)


Google SDK의 새버전으로 변경하기 위해서는,  위 화면의 오른쪽 리스트 창에서 "App Engine SDK..." 항목을 선택하고 오른쪽에 있는 "Edit"버튼을 클릭한다.


아래와 같은 화면이 나타나면, 새로 설치되어 있는 "1.2.1" 버전으로 설정을 변경하고 "OK"버튼을 눌러주면 설정이 모두 끝마치게 된다.

위와 같이 Build Path의 변경이 마쳐지면, Eclipse는 정상적으로 프로젝트를 빌드하고, 동작하게 될것이다.
자, 이제부터 즐거운 프로그래밍 시작이다.

Posted by 행복상자
Google App Engine에 Java버전 SDK를 다운받고, Springframework을 이용하여, 간단한 MVC모듈을 이용하여 테스트해보고, Google 서버로 테스트해보고 그동안 아무로 작업을 하지 못했다.
개인적으로 여러가지 좋지 않은 일들이 있었기도 하고, 그리고 주말을 제외하면 나만의 관심사들을 깊이 있게 공부하기에는 시간들이 부족하기도 하고, 음.. 변명거릴 찾으려니, 구차하기까지 하다.

오늘은 잠시 스타벅스에 들러서, 잠시 "Google App Engine Java"에 대한 자료들을 살펴보고 있는 중이다.
그리고 살펴보고 있는 자료를 간략하게 나마 정리하고 있는 중이다.

다음 자료를 참고함.
 
 
App Engine Jave Overview
    - Java 표준 기술
        : Java의 표준 기술들로 web applicaions을 개발하고, 이를 구글의 확장성 있는 Infrastucture위에서
          구동 가능하도록 함.
        : 이를 위해서 Java은 Java 6 JVM환경과 Java Servlets interface, 그리고 표준 Interface를 통해 
          App Engine의 확장가능한 Datastore와 Serviece에 제공한다.
            .JDO, JPA, JavaMail 그리고 JCache 등
   
    - Google Plugin for Eclipse
        : Eclipse를 통해서 제공되는 Plugin은 개발을 새로운 프로젝트를 생성하고, 디버그를 도와준다.
        : 이는 Google Web Toolkit을 통해 Cross plotform에서 개발을 용이하도록 도와준다. 
        : 다음 the Java Getting Started Guide 를 통해서 Google App Engine에서 소개 자료를 찾아 볼수 있다.
 
    - The Java Runtime Environment
        : App Engine은 Java 5 JVM상에서 Appliction을 동작시킨다.
        : App Engine SKD는 Java 5와 그 이상의 버전을 지원한다.
        : App Engine 은 Web Application을 위해서 Java Servlet 표준을 사용한다.
            . Java Server Pages, static files and data files 그리고 web.xml과 같은 설정 파일이 
              Standard WAR 디렉토리 구조 안에정의됨.
        : JVM은 보안적인 측명에서 별도로 Appliaciond의 서비스를 지원하도록 분리되어 동작한다.
        : 제약사항으로 App은 Threads를 생성학나 local file system에 데이터를 쓰거나,
          임의로 네트워크 커넥션을 만들수 없다.
        : 더 많은 내용들은 Servlet Environment 를 참조한다.
 
    - The Datastory, the Services and the Standard Interfaces
        : App Engine은 확장성 있는 서비스들을 제공하는데,
            . Application들이 persistant data를 저장하고,
            . 네트워크를 통해서 리소스에 접근하고,
            . 이미지 데이터들을 처리할 수 있도록 해준다. 
        : Datastore은 2가지 표준 자바 Standard Inteterface를 제공한다.
            . Java Data Objects (JDO) 2.3
            . Java Persistence API (JPA) 1.0
        : 위 두개의 Interface는 DataNucleus Access Platform 를 사용할 수 있도록 구현되어져 있다.
        : App Engine은 Memcache를 제공한다. 이는 Datastrore의 Query들과 계산 결과를 캐싱해서
            전달할 있도록 한다. 
            . Java Interface는  JCache (JSR 107)을 구현하였다.
        : URL Fetch 서비스는 다른 웹의 Resource에 접근할 수 있도록 도와준다.
            . Http/Https를 이용하는 다른 서버와 통신이 가능하다.
            .  java.net.URLConnection 를 사용한다.
        : Mail Service
            .  JavaMail Interface를 이용하여 email 메시지를 전송할 수 있음.
        : Image Service
            . Applications에서 이미지를 변환할 수 있도록 서비스를 제공함.
            . 이미지의 크기를 변환하거나 다른 포멧으로 변환이 가능토록 함.
         : Authentication
            . Google Account를 이용한 인증이 가능함.
            . Google Account는 사용자의 계정을 생성하거나, Sign-in할 수 있음.
            . 이미 사용자가 Google의 Account를 가지고 있다면, 이를 Application에 사용할 수 있음.
            
    - Sheduled Tasks
        : Application은 특정한 주기로 Task를 시작할 수 있도록 설정해서 실행할 수 있다.
        : 이는 Unix와 Linux의 Cron Jobs와 유사한다. 다음의 Cron Jobs 를 참조.
    - Java Tools
        : App Engine Java SDK는 몇가지 툴을 포함하고 있다.
            . Test Application
            . Uploading the Application files
            . Downloading log data
            . Apache Ant
            . Google Web Toolkit (GWT)
        : Development server
            . Local에서 application의 개발과 테스트가 가능하도록 도와줌
            . Server는 App Engine의 Data store와 service 그리고 Sandbox를 시뮬레이션을 도와준다.
            . 개발 서버는 data store의 인덱스와 쿼리를 Application에서 테스트 할 수 있도록 도와준다.
        : AppCfg
            . 이 툴은 Command-line인터페이를 제고하여 application을 Google App Engine에서 실행할 수
                있게 도와준다.
            . Application을 Upload하고 index의 구성를 수정하고, Application의 로그를 다운로드 해준기도 한다.
            . 세부 내용은 다음의 "AppCfg"의 내용을 참고한다.
 
간단하게 읽는다는 것이 정리를 하게되니 쉽지가 않다.
하지만 정리하진 않은면, 기억에서 금방 사라지기 때문에, 어쩔수 없다.
Posted by 행복상자

어제는 근로자의 날이라서 출근하지는 않았었다. 그리고 전날은 부부동반 모임이 있어서, 늦에 들어온 것을 핑계삼아 간만에 게으름도 피우고 그랬다. 아니 사실은 게으름을 피운 것운 것이 아니라, 감기인지 못살인지 몸이 좋지 않아서 누워서 오전을 보냈다. 선천적으로 늦잠을 좋아하지 않는 관계로 시간이 무척 아까웠다.

무엇을 할까 고민하다가, Google App Engine에 스프링으로 간단한 페이지를 한번 올려봐야지라는 생각이 들었다.
최근에 Google의 Eclipse 플러그인과 SDK는 이미 설치해서 간단한 것들은 적용해 본 상태여서, Google의 App Engine의 인증만 남은 상태이므로 남은 작업은 정말 간단하다.

만약 Eclipse에 Google App Engine Plugin과 SDK를 설치 하지 않았으며,
이전에 블로그에 올렸던 다음의  글을 "Google App Engine SDK 설치 및 실행" 를 참조 하기 바란다.

위와 같이 Google App Engine을 위한 기본 환경을 만들었으면, Spring Framework를 다운 받아야 한다.
이미 Spring Framework를 이용하여 개발한 경험이 있는 개발자라면, 기존에 가지고 있던 Library들을 그대로 사용하면 되지만, 그렇지 않은 개발자라면 www.springframework.org 에서 다운 받아야 한다.
                      - Spring Framework 2.5 Dependency Version Download

지금은 SpringFramework 3.0M3가 공개되고 있지만, 정식 Release된 2.5.5버전을 예제 작성에 사용할 것이다.
(물론 다른 버전을 사용해도 큰 영향은 없을거라 생각된다. 환경만 잘 맞추어 주면 말이다.)

자 이제 본론으로 들어가서, Google App Engine의 Eclipse Plugin을 정상적으로 설치하게 되면, Eclipse의 상단 메뉴텝에 다음과 같이 3개의 아이콘들이 생겨난 것을 볼수 있을 것이다.

   



위에 첨부한 메뉴 이미지 중에서 왼쪽에 있는 메뉴 아이템을 클릭하여 "New Web Application Project"창을 아래와 같이 띄운다.

위의 창에 생성할 프로젝트 이름을 입력하고, 기본적으로 생성할 패키지명도 입력한다. 만약 Google Web Toolket를 사용하기 원하지 않으면 체크박스에서 체크 표시를 지워주고 하단에 있는 "Finish"버튼을 클릭하면 된다.

프로젝트를 생성하면 기본적인 Servlet을 예제로 제공한다. 자 일단 테스트를 위해서 이를 실행해 보자.
아래와 같이 "Debug As" 메뉴의 서브 메뉴인 "Web Application" 를 실행시키면 웹서버가 실행된다.



이를 확인하기 위해서는 웹브라우져의 주소창에 "http://localhost:8080" 입력하여 실행하면 된다.

정상적으로 동작하는 것을 확인하면, 이제 스프링을 실행할 수 있는 환경을 만들어 보겠다.
예제는 아는 사람들에게는 잘 알려져 있는 "step-by-step" 를 예제로 작업할 것이다. 환경을 만들어 주기 위해서는 이전에 다운 받은 Springframework에서 Spring.jar, Spring-mvc.jar 그리고 common-log.jar 파일을 WEB-INF/lib 디렉토리 아래로 복사한다. (아래  그림 참조)

common-log.jar 파일은 Google에서 제공하는 logging 패키지를 이용해도 되지만, Spring의 "DispatcherServlet"을 로딩할때 에러가 나기 때문에 넣어준 것이다. 위의 "step-by-step" 예제를 따라하면, 기본적인 웹페이지를 작성할 수 있을 것이다. 다만, "Ant Build"에 관한 내용과 "Unit Test"에 관한 부분은 크게 신경 쓰지 않아도 된다.

Spring의 "DispatcherServlet"을 이용한 기본적인 예제는 큰 에러 없이 작성될거라 믿는다. 만약 에러가 난다면, Google의 SDK없이 만들어서 돌려보기 바란다. 기본적인 개념을 익히는데 큰 도움이 될거라 믿는다.

일단 http://localhost:8080 을 이용해서 무리가 없으면,



위 이미지의 메뉴중(붉은 박스로 안에 있는)에 세번째 아이템(비행기 모양의 버튼)을 클릭을 하여 "Deploy Project to Google App Engine" 윈도우를 띄운다. 



위와 같은 창이 뜨면, 입력할 값들을 입력박스에 채워 넣고 Deploy를 실행하면 되는데, 이를 위해서는 Google App Engine의 인증이 필요하다. 인증을 위해서는 이미 구글의 Account가 있어야 하고, 이를 이용하여 Deplore를 진행할 수 있다.

아래의 이미지는 서버에서 서비스할 application을 위한 기본적인 정보인데, 간단하게 필요한 내용을 입력하면 된다.


위 화면의 "Applicatiion Identifier"는 자신이 원하는 App Engine상의 sub 도메인 역할을 하는 것이고, "Appication Title" 은 적절한 이름을 넣어주면 된다. 인증 관련된 부분은 특별한 설정 없이 그래도 놓은면, 누구다 다 접속이 가능하고, 별도의 추가 설정이 필요하면 "Edit" 링크를 눌러서 추가 설정을 해주면 된다. (자세한 내용은 구글에서 제공하는 가이드를 참고하기 바란다.)
 
설정을 마쳤으면 "Save" 버튼을 클릭하면 서버상의 설정을 마쳐지게 된다.

내가 작성한 셈플 프로그램은 여기에 있다.
    Sample Progrom 링크 : http://happyzoo2009.appspot.com/hello.htm

추가적인 사항으로는 Google App Engine에서 제공하는 DB는 공식적으로는 없다. 다만 Google App Engine의 Datastory를 이용이 가능하다. 하지만 이 역시도 Google에서 제공하는 Library를 통해서 JPA와 JDO틀 통한 이용이 가능하다. 이를 이용해서 Persistance 데이터들을 관리해서 사용해야 한다. 이의 사용은 기존의 관계형 DB와는 차이가 있다. 때문에 제대로 이용하기 위해서는 역시 공부하고, 분석하는 시간들이 필요하다.

하지만, 관계형 DB의 사용도 가능하나 역시 제약이 뒤 따른다. HSQLDB를 이용하여 in-memory상에서 동작을 시키는 경우이다. (이런 경우는 Hibernate의 이용이 가능하다. ) 
 
이제는 데이터를 어떤식으로 다룰지에 대한 고민들이 남아있다.
한가지 한가지씩 배워나가는 즐거움이 있는 장남감이다. SprignSource에선 Groovy와 Grails을 이용한 예제를 벌써 내 놓았다. 아직은 이들을 적용하고 싶은 생각은 없지만, 조만간 한번을 이들에 대해서도 공부하고 알아야 겠다는 생각은 늘상 가지고 있다. 일단은 Jruby를 먼저 적용해 보고 싶은 생각이 크다.





Posted by 행복상자
오늘을 맘 먹고 Google App Engine SDK를 설치하고 프로그램을 돌려보았다.
물론 셈플 생성하고, 실행시켜 보니 잘 돌아간다. 여느 자바 웹 프로그램과 다를것이 없다. 그러나 아직 Google 서비스로는 돌려 보지 못하였다.

간략하게 설명하면, Google에서 제공하는 문서들을 읽고나서 아래의 순서대로 실행하면 된다.
(먼저 읽기: http://code.google.com/intl/ko/appengine/docs/java/gettingstarted/)

1. Eclipse JEE 버전으로 다운로드 받고,
    - Eclipse IDE for Java EE Developers (163 MB)
    (웹 개발을 위해서는 위 버전을 설치하는 것이 여러 모로 편리하다.)



2. Eclipse Plugin을 설치한다.
   - 위 1번의 것을 설치하였다면, 현재는 Eclipse 3.4 버전일 것이다.
      플러그인 설이를 위해서 Help > Software Updates... 메뉴를 클릭하여, 창이 나타나면 "Available Software"
      텝을 클릭한후 "Add Site"버튼을 눌러서 다음 사이트를 등록한다.
   - http://dl.google.com/eclipse/plugin/3.4  <== Eclipse 3.4버전의 경우는 이 링크 주소를 사용한다.
   - http://dl.google.com/eclipse/plugin/3.3  <== Eclipse 3.3버전의 경우는 이 링크 주소를 사용한다. 



3. 그리고 아래의 동영상과 같이 실행해보고 따라하면 된다.


구글에서 제공한 SDK를 설치하는 것은 Eclipse의 Plug-in Update 기능을 이용하기 때문에 별로 어렵지 않을 것이다. 물론 Java와 Eclipse에 익숙한 사람이람면 말이다.

간단하에 서블릿을 작성하는 셈플코드가 생성하는 프로젝트와 더블어 제공이 된다. 아까도 이야기 했지만 이코드는 아주잘 동작한다. 다만 임의로 JSP를 코드를 생성할때 주의해야 하는데, Class Path에 설정되어 있는 것이 JRE패스로 되어 있으면, JDK경로로 바꿔 주라는 것이다. (만약 없다면 다운로드해서 설정해야 한다.) 이것이 싫다면, 관련된 Jar 파일들을 찾아서 경로를 설정해 주어야 한다. 이것은 개발자 마음이다.

내가 Google App Engine에 관심을 갖게 된것은 최근에 Java를 지원하기 시작했기 때문이고, Ruby를 배우다 보니 자연스럽게 JRuby를 설치해서 사용하게 되었기 때문이다.

최근에 Toby(일민)이가 블러그를 통해서 셈플을 실행해보고, 스프링을 한번 적용해 보겠다고 했는데, 아직 어디까지 진행하고 있는지는 모르겠다.

오늘을 JSP 설정까지 마쳤으니 내일을 Spring위에서 한번 실행시켜 보려고 한다.
 
 
그런데,
Posted by 행복상자
이번 주에는 Google App Engine에 feel이 꽂히는 바람에 몇가지 작업들을 해보았다.
그중에 하나는 우연히도 Eclipse에서 JRuby 환경을 남들고, 기존에 만들었던 Rails 프로그램이 실행이 가능하다는 사실을 알았다. 사실 이는 Eclipse의 기본 플러그인으로 바로 사용하는 것보다는 RedRails의 설치로 인하여 생기 긍정적인 Side Effect이다.
RedRails Plug-in을 설치할때, JRuby실행을 위한 Plugin또한 같이 설치되었기 때문에, 몇가지 작업과 몇가지 환경 구성을 위한 작업을 해주면 된다.

간략하게 순서를 설명하고, 진행 사항은 화면 캡쳐한 이미지를 이용하여 다시 설명하도록 하겠다.
(여기서 설명하는 방법은 기본적으로 RedRails 1.0 이상 버전이 설치되어 있다고 가정한다.)

- 진행 순서-
1. RedRails가 설치되어 있는, Eclipse에서 사용할 VM을 JRuby VM을 설정을 변경한다.
2. 관련된 플러그인들을  설치한다.
3. DB과련된 Plugin들을 gem을 이용하여 설치한다. (설명은 sqlite를 예로 하였음)

- 설 명 -
먼저 Eclipse를 실행하고, "Ctrl + 3" 키를 눌러서 빠른 찾기 창을 띄우고 "Preperences"를 창 상단에 있는 입력창에 입력한다. 그리고나서 "Preferences"창을 띄운다. (또 다른 방법으로는 Eclipse 메뉴의 Window 메뉴의 하위 메뉴인 "Preferences"메뉴를 클릭해서 창을 띄울수 있다.)

Preferences 창이 나타나면, 왼쪽 상단의 입력창에, "Installed Interpreter"라고 입력을 하거나, 직접 Ruby 설정 Tree 아래에 있는 "Installed Interpreters"를 찾아서 클릭을 한다.  

위 화면에서 보면, Ruby와 JRuby에 대한 VM을 선택할 수 있는 체크박스가 있는데, 여기서 "JRuby VM"을 선택한다. 위에서는 "org.jruby_1.1.6..."으로 표시되어 있는 것을 선택하면 된다.

그리고 조금만 기다리면, 아래와 같은 창이 RedRais(Eclipse)에 나타나는데, 이는 JRuby의 설치 경로가 기존에 설치되어 있는 Ruby의 경로와 다르기 때문이므로, 화면 아래에 있는 "Install"버튼을 눌러 그대로 진행 시킨다.


그러면 Rails를 위한 플러그인들과 라이브러리들의 설치가 아래와 같이 진행될 것이다.


플러그인들이 설치가 완료되고, 기존에 만들어 둔 Rails 프로젝트를 RedRails에서 열어, 서버를 실행을 시킨다.



서버가 Start되어 정상적으로 구동이되면, 웹브라우져에서 "http://localhost:3000" 를 입력하여 서버에 접속을 시키면 정상적으로 연결되는 것을 볼수 있을 것이다.

하지만, 기존에 만들어둔 프로그램이 정상적으로 동작하지 않는 것을 보게되는데, 이경우에는 몇가지 플러그인들을 더 설치해 주어야 한다.
나의 환경은 sqlite3를 이용하여 데이터베이스를 생성하고 어플케이션의 데이터를 저장하기 때문에 sqlite3 플러그인을 설치하는 것을 예로 들겠다.

먼저 다음 두개의 플러그인들을 gem을 이용해서 설치한다.
"jdbc-sqlite3"와 "activerecord-jdbcsqlite3-adapter" 플러그인을 설치하기 위해서는 아래와 같이 명령창에서 실행한다. RedRails가 설치되어 있으면, "Rails Shell"에서 실행하면 된다. 
    - Gem 실행 -
   1. gem install jdbc-sqlite3
   2. gem install activerecord-jdbcsqlite3-adapter

만약 정상적으로 위 명령이 실행이 되지 않는다면, Eclipse를 다시 실행하도록 한다.
버그인지는 모르겠지만, 새로 설치된 플러그인과 환경들이 정상적으로 메모리에 로딩되지 않았기 때문이다.

여기까지 따라왔으면, 한가지 더 수정할 것이 있다. 다름아닌 database 설정에 대한 것이다.
"config/database.yml" 파일을 열어서, adapter 를 sqlite3에서 jdbcsqlite3 로 변경해 주면된다. (아래 설정 예 참조)

- database.yml 설정 예- 
 development:
  adapter: jdbcsqlite3
  database: db/development.sqlite3
  pool: 5
  timeout: 5000

위와 같이 설정을 변경하고, 서버를 재 실행하고 테스트 하면 된다.  다음과 같이 Rails Shell에서 실행하면 된다. 이미 잘 알고 있으리고 생각하지만, script/server 라고 타이핑하고 실행하면된다.
아니면, Eclispe에서 Severs View를 열고, 여기서 실행한다.

짤지만, 많은 부분을 달려왔다. 한가지 언급하지 못한 부분이 있는데, gem 명령을 실행해서 update와 Install이 정상적으로 이루어 지지 않고 다음과 같은 메시지가 뜬다면, 현재 로그인 계정에 한글이 들어 있는지 의심해 보아야 한다.

- 에러 메시지 -
 ERROR:  While executing gem ... (Errno::ENOENT)
    No such file or directory - No such file or directory - C:/Documents and Settings/???
 
JRuby의 문제인지 RedRails의 문제인지 정확하게 알지는 못하지만, 한글 계정으로 윈도우를 실행해서 작업을 할 경우에 나타나는 문제인데, google을 통해서 찾아본 바로는 Unicode에 대한 문제였다. (으~~ 이것 땜시 새벽 늦게 까지 테스트 했다니....)
gem을 캐싱하기 위해서 임시로 만들어 놓는 디렉토리(.gem)인것 같은데, 아직 정확한 문제점을 확인하지 못하고 있다. 몇몇의 설정 파일들과 소스들을 찾아서 검토하고 있는데 정확히 어떤 위치인지 잘 모르겠다. 윈도우즈의 환경변수를 통해서 사용자 계정과 위치를 가져오는 것 같기도 한데, 이 역시 정보가 부족해서, 좀더 찾아와야 할 것 같다.
최근에 JRuby 1.2.0 버전이 올라왔다. 내가 설치한 것은 1.1.6 버전인데, 이 버전에서 해결이 되었으면 좋으련만....

 

Posted by 행복상자
지난 한 주동안 인터넷상에서 가장 관심 있는 뉴스를 뽑으라면, 나는 Google의 Google App Engine라고 서스럼 없이 이야기 할 것이다.

요즘 여러 곳에서 화두가 되고 있는, Clouding Computing으로 이야기 되는 서버 팜이 이기도 한, Google의 이 거대한 개발자들을 위한 장난감은 그 규모로 볼때는 Apple의 App Store와 유사한 밥법으로 개발자들을 유혹하고 있다. 개발자들로 하여금 자신들의 서버와 리소스를 이용하여 서비스를 올리도록 Echo 시스템을 제공하고, 잘되면 돈을 받겠다는 정책이다. 이전에는 Account를 받기위해서는 허가가 떨어질때까지 기다려야 했는데, 지금은 신청하는 즉시 무료 서비스를 이용할 수 있다.

Google App Engine는 개발자들이 구글의 서버를 500MB까지 무료로 사용할 수 있도록 하고, 하루에 수백만 페이지 뷰를 서비스 할 수 있다. 더군다나, 지난 주에는 Python에 이어서 Java를 지원할 수 있는 Language로 제공한다고 블러그를 통해서 발표했다. (블러그의 내용은 여기를 참조 바람) 
구글의 Java의 원할한 지원을 위해서 벌써 Eclipse의 Plug-in역시 무료로 제공하고 있다.

아래는 최근에 제공하기로 한 Java 언어와 Eclipse상에서 SDK를 이용하여 개발하고 있는 동영상으로 Google에서 제공하고 있는 동영상이다.
 

이것이 이슈가 되고 있는 또 하나의 이유는 JVM위에 포팅되고 있는 여러가지 Dynamic Language들로 개발한 프로그램이 구동이 가능하다는 것이다.
그동안 200여종이 넘는 우리가 모르는 Language들이 이 JVM위에 포팅되어 왔다. 그 중에 Ruby쪽에 유명한 프로젝트는 JRuby와 Groovy가 있다. 이들 역시 크게 반기는 분위기이다.
Sprin Framwork를 개발하고 있는 SpringSouce 역시 재 빠르게 블러그를 통해서, Google App Engine팀과 공조하고 있을을 발표했다.

지난 주말에 인터넷을 뒤져가면서, 내가 알아낸 사실들이 여러가지가 있지만, Google App Engine의 ClassLoder와 DB에 대한 접속 방법이 이전에 사용하던 Lagacy 시스템과 많은 차이를 가지고 있다는 점이다.
(때가 되면 이 부분에 대해서 다시 이야기 하려고 한다.)
오늘은 Eclipse에서 JRuby를 실행해 보았는데, sqlite쪽에서 문제가 있었다. jdbc지원에 대한 부분에 대한 라이브러리가 없어서 였는데, 이 역시 나중에 정리해 이야기 하려한다.

Wikidipia에는 아래과 같은 정보들이 있다. (이는 Java 지원을 발표하기 이전에 작성된 것이라, 관심있는 것과 다를 수도 있지만, 기초 지식을 얻는데 많은 도움이 될거라 생각된다.)

 
  • 1 Supported programming languages and frameworks
  • 2 Differences from other application hosting
  • 3 Differences between SQL and GQL
  • 4 Restrictions
  • 5 Downloading data from App Engine
  • 6 Quota rates
  • 7 Competition
  • 8 References
  • 9 External links

  • 개발자들을 위한 환경이 또 한번 만들어지고 있다.
    이전에 MS의 경우는 SDK를 제공하여 개발자들을 자신들의 품에 끌어 들였다며, 이제는 Echo System이라 불리우는 Platform을 개발자들에게 제공하고 있고, 1인 개발도 가능하도록 환경들을 만들어 주고 있다. 다시 말하면, 시스템과 리소스 관리에 개발자들은 더 이상 신경 쓰지 않아도 된다는 말이다. (100% 믿기 어려울거라 생각된다.)

    하지만 아직 정확한 방향없이 마케팅적이고 소모적인 구호가 될 가능성은 여전히 높다. 정확한 비전과 방향을 제시하지 못한다면, 정말 거대한 장난감이 될지도 모르지만, MS의 그거와는 방향과 구글이 지향하는 바가 확연히 다르다는 점을 확실히 밝혔다는 점에서 JAVA의 지원은 큰 의미가 있다고 생각이 된다. 

    정말 많은 것을을 배워야 하고, 배울 것들이 너무나 많다.
    즐거운 고민에 대한 비명들이 여기 저기서 들린다.

     
     
    Posted by 행복상자