오늘 날자로 따끈한 소식이 "Google: Upgrade now to Android 1.5 "Cupcake" SDK" 라는 타이틀로 ZDnet에 떴다.
드디어 Google에서 Android 1.5 정식 버전이 릴리즈 되었다. 물로 이에 대해 관심 있는 개발자라면, 다른 여러 경로를 통해서 들었을 것이다.

최근에 Apple에서는 iPhone SDK 3.0 베타를 공개했고, 이어서 6월에는 정식 버전이 공개될 예정이다.
이로 인하여 모바일 디바이스 개발자들이 양분될지도 모르지만, 이는 우려일거라 생각된다. 현재 Apple은 10억 다운로드를 전면에 내세우며, 비지니스 모델의 우월함과 개발자들의 절대적인 지지을 받고 있다.

이에 구글은 올해를 모바일 플랫폼의 입지를 세우는 중요한 해가 될거라 예상하고 있고, 최근 한국의 삼성전자는 6월에 Google Phone을 출시하려는 계획을 가지고 있고, 며칠전에 여러 신문사들이 이에 대한 기사를 다루었다.
다음은 동아일보에 나와 있는 "삼성 '구글폰' 6월 유럽 출시"라는 기사이다.
    기사 링크: http://www.donga.com/fbin/output?f=k__&n=200904280062

그리고, 구글폰이 미국에서 100만대가 팔렸다는 기사도 접할 수 있다. 이에 대한 기사는 여기를 참조하기 바란다.

안드로이드 SDK 1.5버전의 릴리즈는 중요한 시점에 발표되었고, 이를 통해서 새로운 방향을 모색할 수 있으리라 본다.
하지만, 이를 통해 개발하기 위해서는 기본적인 시뮬레이터와 개발을 위한 디바이스의 확보가 필수적인데, 아직까지는 국내에서 언제쯤 출시될지는 미지수이다.

자바 개발자들에게는 안드로이드는 또 다른 의미로 다가 올수 있기 때문에, 새로운 기회를 모색하고 있는 자바 개발자라면, 반드시 관심을 갖을 필요가 있을 거라 생각된다. 개인적인 생각일지 모르겠지만, 이러한 기회들을 지난 20년동안 그리크게 많지 않았다. 다만 머저 앞서갔던 사람들은 그 만큼 많은 기회를 얻었다는 것이다. 왜냐하면, 초반에는 희소성의 원칙이 지배하기 때문이다. 그리고 더 많은 패러다임의 변화를 체득한 사람들은 그렇지 않은 사람보다 여유로울 수 밖에 없다. 특히 개발에 대한 애정밖에 없는 순수한 개발자라면 더더욱 그렇다. 조만간 국내에서도 안드로이드 SDK를 이용하여 개발이 가능한 환경이 찾아 올것이다.

애플이든 구글이든 한 업체가 전체 시장을 다 먹을 수는 없을 거라 생각된다.
애플이 빠르게 시작하였지만, 아직까지는 시장이 만들어지는 단계이기 때문에(단지 하드웨어만 판다고 하면 이는 전혀다르다.), 향후의 행보는 쉽게 예측하기 어렵다. 다만 애플이 App Store를 통한 비지니스 모델이 성공하면서, 기업끼리의 경쟁에서 "개인과 개인" 또는 "개인과 기업"의 경쟁 구조로 Echo System을 만들어 버렸다. 이것이 언제까지 지속될지는 알수 없지만, 지식 노동자의 개인에게 기회를 제공했다는 점에서 큰 의미를 부여할 수 있다.

아래 링크는 위 블러그에서 참조 삼아 가져온 링크들이다. 이중에는 "Android 1.5 Version Notes"는 구글의 Adroid에 대해서 관심있는 개발자라면 한번 읽어 볼만하다. 

  • Top 5 features in Android 1.5 (Cupcake)
  • 1.5 Non-Working Apps List (as of 06apr2009)
  • Android 1.5 Version Notes
  • Flashing your Android Dev Phone with a Factory System Image
  • Planet Android
  • Follow Planet Android on twitter (@droidfeed)
  • 가끔씩은 기회를 기다릴수 있는 인내와 그리고 기회에게 먼저 다가갈 수 있는 용기가 필요하다.

    Posted by 행복상자

    베르나르 베르베르의 3부작 장편 소설인 "신 2"는 1부에 해당한다. 지난번에 1, 2편을 같이 신청해서 읽고 지난 주에야 2편을 읽었다. 벌써 주문한 3편을 도착했는데, 어제서야 읽기 시작했다. 최종편에 해당하는 4편은 지난 4월 22일에 발매되어서 판매되고 있다.

    3부작중에 1부의 마지막에 해당하는 "신 2"는 본격적인 신이 되기 위한 학습을 시작한다. 144명이었던 신 후보들은 어느세 100명 이하로 줄어들게 되는데, 신 후보들이 도와주어야 하는 각 부족들은 구별하기 편하도록 동물의 이름을 부족의 상징으로 사용하고 부족들이 발전하는데 영감을 얻고 있다.

    신 후보자드은 제 18의 지구의 각 민족과 부족의 부흥과 발전을 이끄는 게임의 지배자이자 신의 역할로 관여하게 된다. 하지만, 그들의 영감이 부족을 이끄는데 도움이 되지 않거나, 예외적인 상황으로 인하여 부족의 수가 기준보다 적어질때는 이들은 신 후보자의 자격을 잃게된다. 

    부족을 일으키고 흥하게 하는 방법을 여러가지가 있다.
    "쥐"부족이 택한 방법을 힘과 두려움을 이용하여 다른 부족을 정복하고, 이 들의 문물을 자기의 것으로 취하고, 인구수를 늘려가는 것이다. 약탈을 통한 힘을 키우는 것이 "쥐"부족의 방식이고, 이렇게 취한 힘과 기술을 이용하야 급 성장하고 있다. 이 부족은 극한의 경쟁을 통해서, 힘을 키우고 강력한 통치력을 가지게 된다.  이 책의 주인공인 "미카엘 팽송"이 이끄는 "돌고래"부족은 다른 방식을 취하고 있는데, 그가 선택한 방식은 다른 부족과의 평화적인 연합이었다. "돌고래"부족은 "개미" 부족과 연합하여, 서로의 장점과 물물을 공유한다. 이를 통하여 부족은 성장하고 많은 문물들을 만들어낸다.

    그 이외의 다른 부족들 역시 동물들의 이름의 통해서 부족들의 특성이 지워지며, 신 후보자들의 조정을 통해서 인구수를 늘이고 문명을 만들어가고 있다. 하지만 항상 변수는 있는법. 갑작스런 재난과 병페해는 순식간의 부족의 문명을 부수고 인구수를 줄어들게 만든다. 그리고 "쥐" 부족의 침략 역시, 이들이 그동안 만들어온 재산과 문명을 잃게 만들고, 인구수를 줄어들게 만든다. 이러한 재난에 대해서도 영감을 줄 수 있어야 하는 것 또한 "신 후보자"들의 역할이다.
    만약 잘못되어, 기준치 이하로 인구수가 줄어든다면, "신 후보자" 역시 게임에서 제외되는 책임을 져야 하기 때문이다.
     
    "미카엘 팽송"의 "돌고래"부족과 "개미"부족은 상호 협력안에서 발전을 하고 있지만, "쥐"부족의 침략을 이들 역시 피할수 없었고, 그 들을 막을 힘이 없었다. 그 들은 배를 타고 그들의 마을을 떠나게 멀리 다른 대륙으로 떠나게 되고, 그곳에서 새로운 문명을 건설하게 된다. 하지만 이들의 수는 극히 적었고, 힘도 약하였다. "미카엘 팽송"과 그의 스승인 "애드몽"은 한 밤중에 이들을 도와주기 위해서, 규칙을 어기고 부족들의 성장에 관여하게 된다. 부족을 급속도로 성장하지만, 이들의 부정이 발각되어서 "아프로 디테"는 이들이 사는 섬에 재앙을 내리고, 또다시 배를 타고 떠돌게 되는 신세가 된다. "미카엘 팽송"은 많은 아쉬움과 원망스런 마음을 "아프로디테"에게 가졌지만,  그녀를 사랑하는 그의 마음을 쉽게 버리지 못한다.  

    배를 타고 세계로 흩어져 버린, "미카엘 팽송"의 부족은 다양한 부족속으로 들어가 많은 영향을 키치지만, 이들의 삻은 결코 순탄하지 않았다. 부족의 생존을 위해서 많은 것을 주어야 하고, 기대치에 부합되는 것을 만들어 주어야만 했다.
    이는 현 지구의 어느 민족의 모습과도 비슷하다.
    "미카엘 팽송"의 마음은 누구보다도 아프고 상해있었다. "아프로디테"는 그에게 와서 "모든 것이 그를 위한 것임을 나중에 알거"라는 미묘한 뉴양스의 말로 위로하지마, 결코 쉽게 이해되지 않는 말이다.

    이 소설에는 또하나의 재미가 있는데, 그 것은 미카엘이 "수호천사"로 있을 때 그의 관리하에 있던, 3명이 다시 환생하여 태어났는데, 그 들중에 한명은 "은비"라는 이름의 재일 교포이다. "베르나르 베르베르"는 그녀을 통해서 한국에 대한 그의 생각과 지식을 드러낸다. 한국이 일본의 지배하에 있었던 적이 있었고, 일본이 저지른 만행과 "종군 위안부"에 대한 일본의 태도를 꼬집어 이야기 하고 있다. 그리고 재일교포들의 차별에 대한 이야기도 "은비"라는 어린이를 통해서 이야기 하고 있는데, 한국에 대한 저자의 애정을 읽을 수 있는 부분이다.
    "은비"는 강하고 똑똑한 아이이다. 어리지만, 사리를 분별할 수 있고, 그리고 그녀가 처했던 역경을 극복해 간다. 

    "미카엘 팽송"과 그의 친구들의 야간 탐험은 1편에 이어서도 계속 이어진다.
    신들의 세계에 어떠 비밀과 미스테리가 숨겨져 있는지, 계속되는 의문 속에서 이들의 탐험은 매일 밤 계속 이어진다. 이들은 어렵게 산에 올라서, 예기치 않은 장면을 보면서 2편이 마무리 되는데, 그 것이 무었인지는 3편을 열어보면 나온다. 그것은 거대한 눈이었다. 누구의 눈인지는 모를 거대한 눈이 그들을 지켜보고 있었다. 이에 대한 자세한 이야기는 3편을 다 읽은 후에 할 예정이다.

    개인적으로는 1편보다 2편이 더 흥미롭고, 독자를 빨아들이는 흡입력이 강했다고 생각한다.
    그래서 3편이자 2부인 "신들의 숨결"이 기대가 되는 이유이다.





     
     

    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 행복상자
    사실 이 영화를 본 것을 몇주 전이었다.
    영화는 슈퍼 히어로를 전 면에 내세웠지만, 절대적인 선과 절대적인 악만이 있는 일반적인 영웅물과는 전혀 다른 형태의 인물상을 가지고 있다. 인간이 가지고 있는 보이지 않는 내면 속에 잠재되어 있는 복잡성은 이 영웅들에게도 마찮가지이다.

    가장 선한 이미지의 영웅에게도 이념과 명분의 틀속에 음모를 만들고, 자신이 원하는 바를 이루기 위해서 남의 희생을
    강요하고, 이를 감추기 위해서 또 다른 희생을 만든다. 하지만 남들이 알지 못한다면, 이 역시도 숨겨진 역사일뿐 겉으로 드러난 이미지 대로 세상 사람들은 이해할 뿐이다.
    또한 가장 악한 이미지와 악당의 잔인함을 갖춘 영웅에게도 넘지 말아야할 도덕적인 잣대가 있는데, 개인과 사회라는 틀 속에서 이는 극히 이중적인 잣대로 보일지도 모른다.

    이 영화를 이해하기 어려운점이 바로 이렇다. 일반적인 영웅 이야기처럼, 위기와 어려움을 극복하고 마지막에는 해피엔딩으로 끝나야 하고, 수 많은 사람들이 이들의 공적을 찬양해야 할텐데, 이 영화는 세상의 평화는 보이진 않는 음모와 공작으로 이루어 졌다고 비웃고 있는지도 모르겠다. 요즘처럼 외부로 보이는 미디어와 방송으로 사실과 거짓을 구분하지 못하는 시대는 더욱 그러하리라고 생각된다.

    영화는 성인들을 위한 영웅물이라고는 하지만, 결코 영웅이야기가 아닌 인간의 근본적인 욕구를 채우기 위해 행동하는 평범한 사람들의 이야기에 사람들의 관심을 끌기 위해서 다양한 영웅들의 캐릭터와 애피소드들이 양념으로 들어가 있을 뿐이다.

    영화속의 액션을 조금은 볼만하다.
    중국의 무술들이 최근들어서 자연스럽게 사용되고 있다. 아마도 그동안 많은 홍콩의 영화인들이 미국으로 이주해 갔기 때문이라 생각된다. 영화속에 인물중에 "맨하턴"이라는 인물이 있는데, 그는 영화를 이끌어 가는 매개체 역할도 하지만, 영화를 모호하게 만들기도 한다. 그는 시간과 공간을 지배하는 절대적인 힘을 가진 영웅들 중에 한명으로 그려지고 있는데, 완벽하게 그려지기 때문인지 몇가지 행동들은 의아하기 만들고 이해가 안되기도 한다. 그러나 영화는 영화일 뿐.... 그를 묘사한 컴퓨터 그래픽은 별로 할리우드 답지 않다는 생각이 든다. 아마도 그래픽 당담자가 많은 고민을 했겠지만, 웬지 모르게 어색하다. 그래고 그의 모습을 보면서, 왜 이영화가 성인물인지 조금을 이해가 되었다.







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

    최근에 프로젝트에 ExtJS를 비록하여 몇가지 JavaScript 프레임워크를 검토한 적이 있다.
    내부적으로 ExtJS를 사용하고 있지만, 결코 주변의 다른 프로젝트를 진행하고 있는 사람들에게는 적극적으로 권하지 않는다. 왜냐하면, 한국은 HTML, CCS 그리고 JavaScript를 웹 프로그램의 한 부분으로 생각하지 않고 있을 뿐더러, 그렇다고 디자이너의 역할 중의 하나라고도 생각하지 않는다. 그렇게 때문에 HTML, CSS 그리고 JavaScript의 전문가를 찾아 보기가 쉽지 않다.

    ExtJS를 권하지 않는 이유는 처음 이를 사용할 때는 Windows에서나 제공할 수 있었던 많은 기능들이 컴포넌트화 되어 있어서, 사용하기 편할거라는 생각을 하는데, 이를 응용한 새로운 컴포넌트를 만들거나 제대로 기능을 사용하려면, 약 2달정도의 학습시간이 필요하기 때문이다. 개발 초기에 이를 감안한다면, 사용하는 것은 별 문제 없지만, 기존의 HTML과 CSS만을 이용할 때보다는 전체 개발시간이 늘어날 거라고 반드시 예상하고 개발 플랜을 잡아야 할 것이다.

    최근에 기존에 개발되어 있던 기능을 살펴볼 일이 있었다.
    개발자가 ExtJS의 코드를 그대로 가져다 써서 인지 사소한 버그가 있었다. ExtJS의 버그나 잘못은 아니라고 생각한다. Ajax와 ExtJS의 그리드 컴포넌트를 이용하였는데, 마지막 페이지에 있던 Rows를 모두 삭제하면 이전 페이지로 이동해야 하는데, 마지막 페이지 그대로를 표시하는 것이었다.

    그래서, 몇가지 자료를 찾아보았더니, 관련된 예제는 아래와 같은 Link에 있었다.
    그리드에 데이터 목록을 가져오고, 목록에 추가/수정/삭제에 대한 예제가 있다.

    예제: Tutorial:Using Ext grid form dialog to achieve paging list, create, edit, delete function 

    이중에서 delete에 대한 예제는 아래와 같았다. (아래 Delete Function 예제 참조)

     Delete function

    Delete function will get the selected id(s) and create JSON data and send JSON data to Java server-side for handle.

    /************************************************************
        * Action - delete
        *   start to handle delete function
        *   need confirm to delete
        ************************************************************/	
        function doDel(){
            var m = grid.getSelections();
            if(m.length > 0)
            {
            	Ext.MessageBox.confirm('Message', 'Do you really want to delete it?' , doDel2);	
            }
            else
            {
            	Ext.MessageBox.alert('Message', 'Please select at least one item to delete');
            }
        }     
     
        function doDel2(btn)
    	{
           if(btn == 'yes')
           {	
    			var m = grid.getSelections();
    			var jsonData = "[";
    	        for(var i = 0, len = m.length; i < len; i++){        		
    				var ss = "{\"id\":\"" + m[i].get("id") + "\"}";
    				//alert(ss);
    				if(i==0)
    	           		jsonData = jsonData + ss ;
    			   	else
    					jsonData = jsonData + "," + ss;	
    				ds.remove(m[i]);								
    	        }	
    			jsonData = jsonData + "]";
    			ds.load({params:{start:0, limit:myPageSize, delData:jsonData}});		
    		}
    	}

    And delete parameter to server side with JSON data like this: delData=[{"id":"5"},{"id":"6"}]


    위 예제를 보면, 서버로 데이터를 요청할 때, 파라메터로 start 값과 limit값을 보내줌을 알수 있다.
    상기 예제 소수의 하단을 보면,    ds.load({params:{start:0, limit:myPageSize, delData:jsonData}});
    라는 코드가 눈에 들어올 것이다. 이를 이용하여, 서버에서 DB에 쿼리를 수행해서 현재 페이지에서 필요로 하는 첫 번째 인텐스 값과 현재 페이지에서 표시할 수 있는 데이터의 갯수를 가져오는 것인데, 위 예제는 기본적으로 "0"번 인덱스를 서버로 보내서 매번 1페이지만 가져오는 것이다.

    만약 이를 해결하려면, 두가지 방법이 있는데

    첫번째는 위에서 사용했던 함수 ds.load({params:{start:0, limit:myPageSize, delData:jsonData}});
    의 start 파라메터에 이전 페이지의 첫번째 인덱스를 넣어주는 것이다. 이를 위해서는 전체 Total Counter를 이용하여 총 페이지 수와 인덱스를 찾는 로직이 필요한데, 이미 많이 사용되는 코드라 쉽게 찾고, 만들수 있을 거라 생각된다.

    두번째는 페이지 네이션을 모두 서버에서 담당하는 것이다. 이 경우는 동시에 사용자들이 수정 추가 삭제에 대해 부분도 충분히 고려되어 질 수 있다. 이에 필요한 계산 로직은 위의 첫번째 방법과 별로 다르지는 않고 단지 책임에 대한 부분만 책임을 지면된다. 이때는 서버에 현재 페이지의 첫번째 인덱스 번호를 서버로 보내주는 것이 바람직하다.
    이를 이용하여 서버에서는 전제 개수와 페이지를 계산하고 마지막 페이지가 존재하지 않는 경우 이전 페이지의 목록을 보내주면 되기 때문이다.
     

    Posted by 행복상자
    기본적으로 RIA라는 말은 "Rich Internet Application"이라는 full name에서와 같이 Rich라는 말에 주목하게된다.
    이는 기존의 인터넷 환경과 Resouce를 사용할 수 있는 환경이 좋지 않았다는 이유를 반증하기도 한다.

    인터넷상에서 우리가 사용할 수 있는 Application은 C/S Aplication 즉 Client & Server 기반의 애플리케이션과는 구분이 된다. 기본적으로 웹 브라우져를 사용한 다는 전제가 깔려 있기 때문이다. 하지만 이것 또한 과거의 빈약한 네트워크 환경과 인터넷 환경에서의 이야기 이다.

    현재의 대한민국의 인터넷 환경은 과거 10년전과 비교하면 엄청난 변화가 있다.
    10년 전의 인터넷은 기업체와 대학에서 사용하던 상용 인터넷 서비스를 제외하고는 PC방에서만 체감할 수 있을 만한 빠를 속도를 경험 할 수 있었다. 그리고는 ADSL이 나오면서 일반적인 가정에서 이를 경험할 수 있었다.
    지금의 인터넷 서비스는 집집마다 광으로 직접 연결되어 있다. 그리고 무선 인터넷 역시 많은 변화가 있었는데, 무선 인터넷의 빈약한 환경속에서 WAP으로 구현하거나 이와 유사한 형태로 데이터를 모바일 브라우져를 통해서 보았었는데, 어느샌가 우리는 WAP이외의 다른 브라우져을 더 많이 사용하고 있다.

    이러한 변화는 단지 네트워크 기술의 발전에 의해서만은 아니다. 하드웨어 기술적인 발전과 관련 소프트웨어와 사용자의 제품에 대한 관심들 많은 요소들이 복합적으로 변화되고 진보해 왔기 때문이다.

    과거의 RIA와 현재의 RIA를 바라보는 관점도 이에 맞추어서 달라져야 할 것 같다.
    과거의 제한적인 환경들이 현재에는 많은 부분 해결되었고, 이를 위해 기술적으로도 많이 발전했기 때문이다.
    하지만 우리가 Internet Application을 개발한다고 하면, 이는 곧 웹 브라우져를 기반으로 한 웹 프로그램을 개발한다는 말로 인식하기 때문에, 이는 기존의 방식과 별반 차이가 없어 보인다. 그러나 해결해야할 문제로 떠오르고 있는 것이 있다. 이전에는 우리의 인터넷 환경은 단지 마이크로 소프트사의 IE 6.0을 기준으로 웹 사이트를 만들고 CSS와 Javascript를 적용하는 것으로 호환성을 고객에게 제공한다고 생각하였다. 물론 이때는 지금의 javascript와는 다른 VBscript와 Jscript를 사용하기도 했다. 마이크로 소프트사의 90%가 넘는 절대적인 시장점유율이 불러온 결과로 웹을 이용한 서비스를 제공하는 포털과 개발자는 단지 IE에서 정상적으로 동작하는 웹 어플리케이션을 만들고 배포하면 그만이었다. W3C의 Web기술 권고안을 따르지 않고 IE의 시장 점유율에 지원하고자 하는 Web Browser를 쉽게 결정한 이유는 너무나도 단순하다. 개발비와 유지보수비를 줄이려는 욕구 때문이다. 때문에 대다수의 사용자가 사용하는 IE만 지원하면, 다른 브라우져와의 호환성 테스트와 개발 및 수정에 필요한 비용들 그리고 유지 보수에 대한 비용들을 추가적으로 지불하지 않아도 되기 때문이었다.

    그러나 현재의 상황을 다르다. 마이크로 소프트사가 웹 브라우져의 개발에 대한 지원이 몇년가 전무한 상태에서 Firefox와 사파리 브라우져는 깊게 갈린 칼로 무장하고 대중의 앞에 나섰고, 상당한 성과를 올리는 중이다.
    그리고, 새로운 기술과 기능들을 경쟁적으로 추가하고, 이를 구현한 새로운 버전의 브라우져를 사용자들에게 수시로 발표하고 있는 상황이다.

    문제는 새롭게 시장 점유율을 높여가는 브라유져와 새로운 기능들을 추가할 때마다 나오는 브라우져간의 호환성이 항상 유지되어야 하는데, 꼭 그렇지 많은 않다는 것이다.
    IE의 경우는 IE 6, IE7 그리고 얼마전에 발표된 IE 8 사이에서도 동일한 페이지를 전혀 다르게 표시를 해주고 있다.
    사파리 브라우저의 경우도 마찬가지이이다. Safari 2와 3가 혼재되어 사용되고 있고, Safari 4에 베타 버전 이야기도 최근이 심심치 않게 들리고 있다. Firefox의 경우는 어떠한가? 이 역시 버전 firefox 2와 3를 같이 사용하고 있는 것이 현실이다.

    최근 브라우져들은 속도를 개선하고 자기들이 가장 빠른 브라우져라고 자랑하고 있고, 사용자들은 최고의 브라우져를 골라서 사용할 수 있지만, 개발자 입장에서는 결코 행복한 상황만은 아니며, 새로운 고민에 빠져가고 있는 상황이다.
    거기다 모바일 브라우져를 지원해야만 하는 상황에서는 좀더 문제가 복잡해 진다.
    구현의 이슈를 뒤로하더라도, 이들 모두를 제대로 지원하기 위해서는 많은 시간과 추가적인 비용에 대한 문제가 있기 때문에 좀더 많은 고민들을 해야할 이유가 생겨나는 것이다.

    이러한 이유들로 Flash와 Silverlight와 같은 RIA 기술들을 사용해야 하는 하는 것이다.
    사실 이는 웹 표준과는 다른 기술들이고, 다른 방향에서 발전해 왔다. 하지만 Platform 독립적으로 동작할수 있도록 자신만의 컨테이너를 제공하기 때문에, 개발자에게는 동일한 실행 환경을 제공하게 되고, 이 위에서 개발을 진행하면 되기 때문이다.
      
    개발과 비용과 유지보수의 이슈는 RIA를 사용하고 도입해야할 또 하나의 이유를 주고 있다.
     
    Posted by 행복상자