달력

5

« 2024/5 »

  • 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
  • 31

'분류 전체보기'에 해당되는 글 216

  1. 2009.06.05 Google App Engine에서 JSTL 사용하기 7
  2. 2009.06.01 iPhone Application Life Cycle
  3. 2009.05.31 iPhone SDK Study
  4. 2009.05.25 Google App Engine Java SDK 1.2.1 Released
어제와 오늘은 스프링 프레임워크를에서 제공하는 코드를 이용하여, 몇가지를 테스트를 하였다.
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 행복상자
Application은 모두 시작과 끝을 가지고 있다, Object-C를 이용하여 만들어지는 iPhone용 Application 역시 main()함수를 실행하여, 이를 관리하게 된다.

iPhone Application의 main()함수는 최소한의 작업의 실행을 위해서 사용되어 지는데, 거기에는 3가지의 작업이 순서적으로 실행된다. (아래 그림 참조)


소스 코들 보면서, 설명을 하면,
#import <UIKit/UIKit.h>
int main(int argc, char *argv[])
{
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
    int retVal = UIApplicationMain(argc, argv, nil, nil);
    [pool release];
    return retVal;
}

위의 소소 코드를 보면, main()함수에서는 먼저, "Auto Release pool"을 만들고, 그리고 "UIApplicationMain"을 호출한다. 마지막으로 "Auto Release pool"에서 할당해서 관리하던 메모리들을 해제하는 작업이 진행되고, 프로그램이 종료된다.



'공부하는 것 > iPhone Application' 카테고리의 다른 글

어떤 iPhone을 살것인가?  (2) 2009.06.24
iPhone SDK Study  (0) 2009.05.31
:
Posted by 행복상자
2009. 5. 31. 08:08

iPhone SDK Study 공부하는 것/iPhone Application2009. 5. 31. 08:08

작년부터 iPhone Application을 만들어 보겠다고, 책도 사고, Study Group 비슷한 것도 만들어보고, 관련된 책들도 몇권을 사서 보았지만, 내가 연 초에 세운 계획중에 하나인 iPhone Application을 1개라도 만들어 보겠다는 계획은 아직 실행되지 못하고 있는 사항이다.

이는 개인적으로 여러가지 많은 일에 관심이 많은 탓이기에, 주 중에는 Web 관려 기술에만 집중하고, 주말에는 iPhone에 대해서 공부하겠다고 시간을 나주어 사용하기로 결심했지만, 주말에는 가족과 같이 하는 일에 우선 순위가 높아서 결국 손을 대지 못하고 있었다.

이미 iPhone SDK를 설치해 본 사람드은 알겠지만, Apple에서는 많은 개발 관련 Resource를 개발자들에게 제공한다. 문서와 동영상으로 만들어진 자료들은 개발자로 하여금, 어떻게 시작을 해야 하는지 무엇을 다루고 공부해야 하는 지를 알려준다. 아쉬운 점이 있다면, 모든 자료는 영어로 되어 있기 때문에 모국어로 영어를 사용하는 사람들보다는 익히기 힘들지 모르겠다, 하지만 아직 한국에는 Apple이 제공하는 환경에서 개발할 수 있도록 만들어진 책은 2권정도가 전부이기때문에, 현재는 다른 길은 없다.

아래는 Apple에서 제공하는 Xcode IDE을 실행했을 때, 볼 수있는 화면준에 하나로, IPhone SDK를 설치하면 볼수 있다. iPhone Application을 개발할 수 있도록 도와주는 Resource 들에 쉽게 접근 할 수 있다.  (Apple에서 화면캡쳐해서 글을 올리는 것은 처음이다.)


최근에 김정현 책임으로 부터, iPhone Application 개발을 위해서 무료로 볼수 있는 자료들에 대해서 들었었다. 스테포드 대핵에서 진행하는 코스로, 이를 동영상으로 마들어서 일반인들도 강의 내용을 볼수 있다는 것이 었다.
어제는 토요일 이어서, googling을 하면서, 관련된 자료를 찾아보고, 아이튠즈를 이용하여 강의를 다운로드 받아서 보았다.



관련된 강의자료는 16개의 Lucture로 구성되어 있고, 이는 "CS 193P iPhone Application Programming" 이라는 제목으로 진행된다.

- 링크 주소: http://www.stanford.edu/class/cs193p/cgi-bin/index.php
- RSS 주소: feed://www.stanford.edu/class/cs193p/cgi-bin/rss.php

관련된 동영상 강의 자료들은 "Stanford on iTunes U "에서 다운로드 받을 수 있는데, 강좌들은 iTunes를 이용해서 다운로드 할 수 있다.




'공부하는 것 > iPhone Application' 카테고리의 다른 글

어떤 iPhone을 살것인가?  (2) 2009.06.24
iPhone Application Life Cycle  (0) 2009.06.01
:
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 행복상자