달력

11

« 2020/11 »

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  •  
  •  
  •  
  •  
  •  
이전에도 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 행복상자

댓글을 달아 주세요

  1. Kevin 2009.06.06 21:54  댓글주소  수정/삭제  댓글쓰기

    보통 DD는 그냥 쓰던것 복사해서 쓰는 경우가 많아서,
    저도 예전에 web.xml 뼈대부분만 그냥 복사해서 썼다가
    같은 현상으로 좀 짜증 났었던 기억이 나네요. :)
    그래도 그덕에 해결방법을 아주 다양하게 알게 됐죠.

    역시 제일 좋은 방법은 포스트에 언급하신 namespace와 schema를 제대로 설정하는것인거 같구요.

    다른 방법으로는 jsp 파일에
    <%@page isELIgnored="false" %>
    를 추가해 주는 방법이 있습니다만, 너무 삽질 같구요...ㅡ_ㅡ;
    (XML 스타일이면
    <jsp:directive.page isELIgnored="false" />)

    아니면 DD안에
    <jsp-config>
    <jsp-property-group>
    <url-pattern>*.jsp</url-pattern>
    <el-ignored>false</el-ignored>
    </jsp-property-group>
    </jsp-config>
    이렇게 설정해주는 방법도 있구요.
    근데 이럴바에는 역시 namespace와 schema 설정을 해주는게 훨씬 좋겠죠.

    뭐 요즘이야 Eclipse와 M2Eclipse를 써서 web-app plug-in이 알아서
    DD를 생성해 주니 저런 문제 생길일은 별로 없지만,
    저런건 한번 설정해서 쓰면 크게 신경 안쓰는 부분이라서,
    이전에 쓰던 파일 한번 잘못 복사했다가
    "뭐야? 왜 전에 잘 되던게 안되지?" 하는식으로 골칫거리를 낳기 쉬운거 같습니다.

  2. 행복상자 2009.06.08 23:14 신고  댓글주소  수정/삭제  댓글쓰기

    감사합니다. 자세히 여러가지 알려주셔서...
    사실 Google App Engine의 Eclipse Plugin이 만들어 주는 Web.xml이 너무나 심플해서 생겨난 문제 였습니다.

    말씀하신 대로, Eclipse에서 자동으로 생성해 주는 다른 Plugin은 별 문제가 없었거든요. 그래서 무의식적으로 확인할 생각을 하지 않고, 지나쳤는데 이번에 제대로 공부하는 기회가 되었습니다.

    감사합니다.

    • Kevin 2009.06.09 02:11  댓글주소  수정/삭제

      헉, 별말씀을요.
      게을러서 제가 포스팅 하긴 힘들고,
      다른분이 좋은글 써놓은것에 정보 공유 차원에서
      몇마디 한건데요. 사실 묻어가기죠...ㅡ_ㅡ;;;

      그나저나 Google App Engine Eclipse Plugin은
      써본적이 없어서 몰랐는데, 그게 또 그렇게
      심플하게 생성하는군요.
      좋은 정보 고맙습니다. 아직 사용은 안 해봤지만,
      저도 Google App Engine에 관심이 있어서
      조만간 사용해 볼까 했는데,
      알려주신덕에 plugin이 생성한 web.xml 때문에
      발생하는 문제는 모면했네요.

      역시 정보는 다른이와 나누면 더 크게 돌아오는군요...^^

    • 행복상자 2009.06.13 01:30 신고  댓글주소  수정/삭제

      Kevin님의 블로그를 방문했는데, 좋은 자료들이 많이 있더군요. 또 찾아 주셔서 감사합니다.

  3. 강신 2011.05.21 18:46  댓글주소  수정/삭제  댓글쓰기

    저기 궁금해서 그러는데요.. 혹시 SpringMVC의 ViewResolver는 어떤걸 사용하셨나요??

  4. 강신 2011.05.21 18:46  댓글주소  수정/삭제  댓글쓰기

    저기 궁금해서 그러는데요.. 혹시 SpringMVC의 ViewResolver는 어떤걸 사용하셨나요??

  5. 강신 2011.05.21 18:46  댓글주소  수정/삭제  댓글쓰기

    저기 궁금해서 그러는데요.. 혹시 SpringMVC의 ViewResolver는 어떤걸 사용하셨나요??

지난주에 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 행복상자

댓글을 달아 주세요