오늘은 토요일.

예외없이 새벽 6시에 일어났다.

오랜 기간 등안 익숙해진 습관이 이제는 관성적으로 주말에도 지속이 된다.

 

무엇을 할까?

 

지난 11월 11일에 AilExpress에서 구매한 3인치짜리 TFT-LCD가 어제 도착하였다.

그래 오늘 아침을 그동안 못 만져 보았던, "Raspberry Pi를 가지고 놀아야겠다"라는

생각이 들었다.

 

기존에 설치되었던 Package들을 업데이트 & 업그레이드하는데 8GB짜리 SD카드가 용량이

모자라 File System일 깨져 버렸다.

 

복구할까? 새로 설치 할까? 사이에서 갈등을 하다가, 시간이 적게드는(?) 새로 설치로 방향을 잡았다.

 

그런데...

 

아차, 설치 방법을 잊어버렸다.

→ 물론 respberrypi.org에 모두 올려져 있다. 또는 국내 라즈베리 파이 커뮤니티인 "산딸기 마을"에 가보면

   자세한 설치내용과 응용에 필요한 정보들을 얻을수 있다.  

 

[설치 시작]

1. "라즈베리 파이" 홈페이지로 이동

- www.respberrypi.org

 

 

 

2. 웹사이트 상단의 Download 메뉴를 클릭하거나, 브라우져의 주소창에 다음을 입력하고

   https://www.raspberrypi.org/downloads/ 로 이동한다.

  

3. 화면 상단에 "NOOBS"와 "RASPBIAN" 두개의 기본 설치 이미지가 있는데, 여기서는
   NOOBS를 설치하도록 하겠다. (설치가 간단하다)

 

 

4. NOOBS를 클릭해서 이동하였다면, Download Zip을 클릭하여, 이미지 파이을 다운받도록 한다.

   필요한 설치 방법은 NOOBS setup   에 나와있다. (다운로드 하는동안 잠시 다녀오는 것도 좋다.) 

 

5. 윈도우와 맥/리눅스 버전으로 설치할 수 있는 방법이 있지만, 여기서는 윈도즈로 설치하는 방법에 대해서

   정리한다.

   SD 카드는 보통 8GB 이상이 좋은데, NOOBS로 설정하는 것이 쉬운 것은 위에서 받은 파일을 Format이 된

   SD 카드로 복사해 주면된다. 순서는 아래와 같다.

  

 

 NOOBS download → 압축을 푼다. → Format된 SD카드로 복사. 

        

 

6. 이제 라즈베리 파이에 SD카드를 삽입하고, 잠시 기다리면 설치할 OS를 선택하는 화면이 나오는데,
   Rasbian을 선택 하고 상단의 Install 버튼을 마우스로 실행시키면 설치가 진행된다.


7. 설치와 부팅이 정상적으로 이루어 지면, GUI 화면이 나타나게 된다. 

   지난 9월에 릴리즈된 Rasbian Jessie는 바로 GUI화면을 제공하고 있는것 같다. 

   이전 버전에서는 CLI 기반에서 제공하는 설정 툴인 raspi-conig에서 기본 설정을 하였는데, 

   이 부분이 달라졌다.  아이들에게는 배우기 쉬운 친화적인 방식이거라 생각된다.



이전보다는 약간 달라진 GUI이지만 좀 더 사용하기 쉽고, 접근성도 용이하다.

아직 라즈베리 파이에 언어 설정과 무선랜 설정이 안되어 있다. 이는 다음 기회에 정리하려고 한다.


  


 

 

 

 

 

 

 

'좋아하는 것 > Hardware' 카테고리의 다른 글

라즈베리 파이 설치  (0) 2015.11.28
NVIDIA의 ION(아이온) Platform에 대한 소개  (0) 2009.02.03
Posted by 행복상자
어제 우연히 Google Code 사이트에 들어가 보니, 새로운 세미나 동영상이 몇개가 어제 날짜로 추가되었다. 이 동영상은 그 중에 하나로 "Introduction HTML 5"라는 제목으로 올라와 있었다. 최근에 여러 경로를 통해서 HTML 5애 대해서 소개되고 있고, 관심이있는 주제라 나름 열심이 보았다.

새로운 것에 관심을 갖는 것은 내 개인적인 성향이지만, 새로운 것이기 때문에 반드시 써야 한다고 고집하지는 않는다. HTML 5는 HTML 4가 발표되고 사용된지 10년이 지난 후에 나온 것이지만, 완전히 새로운 기술은 아니고, 이미 사용되고 있는 기술들이다. 단지 이는 기존 기술들을 좀도 표준화하고 정규화 함에 지나지 않을 수도 있지만, 이를 통해서 우리가 표현하고자 하는 것들일 서로 다른 브라우져에서 동일하게 표현될 수 있다는 점에서 큰 의미가 있을 것이다. 하지만 이를 위해서는 좀더 시간이 필요할 것 같다. 새로운 기술 또는 표준이 온전히 쓰이기 위해서는 양보와 타협이 선행되어야 하는데, 브라우져 개발사 마다 자신들에게 유리한 기술과 스펙을 표준으로 삼기위해 보이지 않는 싸움이 계속되기 있기 때문이다.

이 비디오는 한국어 자막도 없이 진행되기 때문에 이해하기 어려운 점이 많을 수 있지만, Presentation화면과 데모 동영상을 보면 대부분을 쉽게 이해할 수 있을 것이다.



동영상은 약 42분 정도로 진행되고, 최근에 제작된 동영상이라 화질과 음색이 좋다.

열심히 공부하고 열심히 배워서, 좋은 개발자가 되자. ^^

Posted by 행복상자
요즘은 생각만큼 바쁘게 사는 것인지, 틈틈히 영화를 보고 그 때의 감흥을 되새기면서 글을 쓰는 것을 잊고 있다. 아니 실제로는 바쁜 것보다 마음의 여유가 없어서 일지도 모른다. 그동안 몇개의 영화를 보았는데, 하나도 손을 대지 않고 지나쳐 버렸다. 지나고 보니 아쉬움만이 남는데, 약간의 변화를 주기 위해서 다시 글을 쓴다.

이 영화는 약 2주전에 내가 본 영화이다.
한국인 배우가 나온다고, 개봉전부터 사람들의 관심을 끌기 시작하였는데, 말을 안해도 이미 누가 나오는지는 잘 알거라 생각한다. 맞다 우리가 월드스타의 반열을 올랐다고 생각하는 배우가 몇명 있는데, 그 중의 한명인 "이병현"씨이다.

내가 이 영화를 보게 된 것은 "국가 대표"와 "해운대"가 흥행을 하는 시점에서, 지금 보지 않으면, 곧 상영관에서 내려올지도 모른다는 불안감에서 보게 되었는데, 그래도 주된 이유는 한국인 배우가 나온다는 것이었다.

영화는 블록 버스터를 좋아하는 나에게는 어떤 면에서는 맞을 지도 모르지만, 정체 불명의 단체와 시대에 맞지 않는 과학기술과 테크날로지는 영화를 보는데, 반감 또는 어색함을 주었지만, 영화를 즐기는데는 큰 어려움이 없다.

영화의 구성과 시나리오를 볼때는 몇가지 반전 사항들이 있었지만, 이는 왠만큼 영화를 즐겼던 사람들에게는 식상할 만큼 반전요소들이다.

영화는 다양하고 특이한 캐릭터들을 선보이는데, "이병헌"씨의 캐릭터는 누구보다도 눈에 잘 들어온다. 이 영화는 잘 알려진 배우들이 등장하지는 않지만, 그가 우리에게 잘 알려진 배우이기 때문일 수도 있다. 그러나 무엇보다도 그의 연기력 때문이라고 생각한다.그의 정제된 연기는 극에서 분위기와 인물을 잘 살려주고 있다.

영화 속에서 나오는 한국어는 역시 어색하다. 그러나 영화나 미국 드라마에서 한국어의 사용이 늘어나는 것운 어느 정도 우리나라의 위상이 올라가고 알려지기 때문인듯하다.

영화속에서 동양은 한국, 일본 그리고 중국이 혼재되어 있는 것으로 표현되어 졌는데, 인물들의 한국어를 사용하지만, 일본풍의 건축물과 중국의 주방과 음식물들이 보이고, 소림사를 연상케하는 연무장의 풍경등은 나에게는 이질적이다. 그러나 외국인(서양인)의 눈으로 보면 다 똑같아 보일런 지도 모른다. 

영화는 스토리와 전체적인 진행으로 보면 적당한 흠도 있고, 무리한 측면도 있지만, 만화적이고 공상과학적인 측면으로 접근한다면, 2시간 내내 볼만한 흥미거리들이 가득차 있다.

아마도, 차기 작품을 예고하는듯한 앤딩장면은 2편이 계획되고 있음을 말해주고 있다.
블록버스터를 즐기는 방법은 깊게 생각하지 않고 장면 장면을 즐기는 것이다. 더불어 감동을 줄 수 있는 영화라면 더할 나위 없겠지만, 너무 많은 것을 바란다면 재미가 반감된다.

언제 나올지 모르는 속편이지만, 좀더 군더거기 없고 말끔한 스토리 전개로 이어졌으면 좋겠다.

Posted by 행복상자
미국 시간으로 지난 9월3일 (한국 시간으로 9월 4일)자로 Release 되었다. 이번에 릴리즈된 버전은 Java와 Python 버전으로 각각 제공되는데, 이는 XAPP를 지원하기 위한 것이다.
XMPP는 eXtensible Messaging and Presence Protocol (XMPP) 로 알려져있는 XML기반의 Real time Messaging 서비스이다.

아래의 링크에서 다운로드 하면된다.
- Download: http://code.google.com/p/googleappengine/downloads/list

이번 1.2.5 릴리즈에 포함된것은 그동안 이슈트랙커에 올라온 신규 기능들에 요청중에 많은 사람들의 우선적으로 지원해 주기를 바랬던 기능이었기 때문이이다.

이번에 제공되는 새로운 API들을 이용하면, XMPP기반의 네트워크 프레임워크 상에서 다른 사용자들과 메시지 교환이 가능해 진다. Google Talk와 Google Wave와 같은 Application 과도 마찮가지로 메시지를 교환할 수 있다.

다음 링크를 살려보면, Google App에 포함된 XMPP의 간략한 설명과 예제를 살펴볼수 있다. Java와 Python버전이 있다.

- Java: http://code.google.com/intl/ko-KR/appengine/docs/java/xmpp/
- Python: http://code.google.com/intl/ko-KR/appengine/docs/python/xmpp/

위 링크들을 따라가면, 예제를 살펴볼수 있는데, 코드와 이를 App Engine에서 사용하기 위해서 Config에 추가할 내용들이 있는데, 이는 간단하지만, 주의 깊게 살펴볼 필요가 있다.

그리고, 마지막으로 googlel app engine의 API들은 제약조건들이 있는데, 이것들을 잘 살펴보아야 한다.
예전에 Twitter의 Open API를 테스트하다 보니, 테스트 코드를 몇번 실행을 안했는데, 계속 서버에서 블록킹 되고 결과는 정상적으로 나오지 않았던 적이 있었다. 알고보니 트위터에서는 시간당 100개의 Request와 하루에 2000개의 Request를 사용할 수 있다는 제약이 있었다.

Quter와 제약에 대한 내요은 아래와 같다.

Each XMPP service request counts toward the XMPP API Calls quota.

Each outgoing XMPP chat message counts toward the following quotas:

  • XMPP Data Sent
  • XMPP Recipients Messaged
  • Outgoing Bandwidth (billable)

Each outgoing XMPP chat invitation counts toward the following quotas:

  • XMPP Data Sent
  • XMPP Invitations Sent
  • Outgoing Bandwidth (billable)

Each incoming XMPP message counts toward the following quotas:

  • CPU Time (billable) (50 ms/message)
  • Requests
  • Incoming Bandwidth (billable)

Computation performed in a request handler for incoming XMPP messages applies toward the same quotas as with web requests and tasks.

For more information on quotas, see Quotas, and the "Quota Details" section of the Admin Console.

In addition to quotas, the following limits apply to the use of the XMPP service:

Limit Amount
incoming message size 100 kilobytes
outgoing message size 100 kilobytes


Posted by 행복상자
이전에도 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 행복상자

영화 "터미네이터 3"가 나온지 벌써 6년이 다 되어간다. 그리고 올해 "터미네이터 4"라는 제목으로 우리앞에 새로운 모습으로 다가왔는데, 6년 전만해도, 많은 사람들이 더 이상의 시리즈는 없을 거라고 예상하였고, 실제로 주연 배우였던 "아놀드 슈왈제너거"의 캘리포니아 주지사 당선으로 더 이상의 시리즈는 많들지 않을 거라고 확신하였었다.
하지만, 6년이 지난 지금, 우리 앞에 새로운 터미네이터 시리즈로 나타난 이영화를 과연 터

미네이터 시리즈로 보아야 하느냐? 라는 질문에는 선듯 대답하기를 주저할 수 밖에 없다. 먼저 "아놀드 슈왈 제너거"가 없는 터미네이터는 허전해서, 먼가를 생각나게 만든다. 그리고, 영화의 전개는 미래인 2018년에서 벌어지게 되는게, 기존 시리즈는 "존 코너"를 지키기 위해서 현재에서 "스카이 넷"이 보넨 로봇과 싸우지만, 영화는 미래에서 "스카이 넷"이 지배하는 세상에서 인간들이 싸우기 시작하는 시점이고, "존 코너"가  저항군들을 이끌기 시작하려는 때이다. 
그렇기 때문에, 시점 상으로 보면, 전혀 다른 영화라는 생각이 들고, 만약 "터미네이터"라는 제목을 붙이지 않았다면, 다른 영화라고 생각해도 무방할 정도로 이전과는 분위기나 스토리 전개도 무척 다르다.

사실 이러한 혼란들 피하기 위해서 제작사는 TV 시리즈인 "사라 코너 연대기"를 통해서, 시간적인 공백과 미래의 "존 코너"의 행적에 대한 이해를 도우려 했다.
과연 얼마나 많은 사람들이 이러한 제작사의 의도를 파악하고, TV 시리즈를 미리 보았을지는 모르겠지만, TV시리즈를 안 본다고 해서, 영화의 재미가 반감되지 않는다.

영화는 영화 나름대로 플롯을 가지고, 고객들의 흥미를 끌어 당기고, "아놀드 슈왈제네거"가 없는 터미네이터도 존재할 수 있다는 것을 보여주고 있다. 하지만, 시나리오의 맥락을 보면, "터미네이터와는 다른 새로운 영화를 만들수 있지 않았을까?" 라는 의문이 갖게 된다. 왜냐하면 영화속에는 나름대로 잘 다듬어진 캐릭터들이 존재하기 때문이다. 특정 캐릭터에 의존하지 않고, 비슷한 비중의 주연들을 여러명을 두는 현재 영화의 특징을 그대로 살릴 수도 있었을 텐데라는 아쉬움이 있다.

영화를 끌고 오던 캐릭터 였던 "마커스"를 "존 코너"라는 비중있는 인물을 죽어야 되는 상황에서 구하기 위해서, 그리고 이를 통해서 감동을 불러오려는 의도였는지, "남의 위한 희생"이라는 이름으로 너무나도 갑작스럽게 죽는다. (사실 감동적이지는 않았다.)
사실, "마커스" 그는 영화의 스토리를 이끌었다는 점에서는 오히려 주인공 "존 코너" 보다 더 중요한 역할이었다. 

영화속의 스토리에서 이상한 점은, 2018년의 "스카이 넷"은 어떻게 "존 코너"와 존 코너의 아버지로 과거로 시간 여행을 해서, "사라 코너"를 보호해야할 임무를 받은 "카일 리스"의 존재를 알고 있는냐는 것이다. 
사실, 시간 여행을 통해서 과거로 갈 수 있는 기술이 개발되는 때는 약 20년 후의 일이기 때문이다.

영화 속의 로봇 군단과의 전투는 "트랜스 포머"이후의 영화들과 마찮가지로, 자유로운 관절 움직임이 있는 로봇들과 대형 로봇들이 영화에서 현실감 있게 표현된다.  그리고, 이러한 로봇과의 전투씬과 추격씬은 블록버스터 영화다운 스케일을 보여주고 있다.
  
"터미네이터 4"는 처음 터이네이터 시리즈를 보는 사람들이 보아도, 크게 이해하는데 어렵지 않은 오락영화이고, 부담스럽지 않은 영화이다.

 

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 행복상자