AIR 환경은 여타 데스크탑 어플리케이션처럼 자동 업데이트의 구현 가능을 제공합니다. 하지만 플래시로 AIR 어플리케이션을 제작할 때는 자동 업데이트를 구현할 수 있는 컴포넌트가 플래시 내에 없기 때문에 플렉스 SDK의 컴포넌트들을 가져와야 합니다. 업데이트를 구현하기 위해 SDK에서 가져올 최소한의 컴포넌트는 ApplicationUpdaterUI이며 이 컴포넌트를 가져오는 방법은 아래와 같습니다.

  1. File > Publish Settings 선택
  2. 컴파일 세팅 패널에서 Flash탭 클릭
  3. Player: Adobe AIR 1.5  / Script: Action Script 3.0 선택
  4. Script 텍스트 창 옆에 [Settings...] 버튼 선택
  5. Library Path 탭 선택
  6. [+]버튼 (Add New Path) 선택하여 새 주소창 영역 만든 후 Browse to SWC file 버튼 클릭
  7. 파일 선택 패널로 컴포넌트 선택
    (Flex SDK가 있는 폴더)\frameworks\libs\air\applicationupdater_ui.swc



 이렇게 컴포넌트를 가져온 후에 사용하는 방법의 예는 아래와 같습니다.

import air.update.ApplicationUpdaterUI;
//그분 모셔오기

var exampleUpdater:ApplicationUpdaterUI = new ApplicationUpdaterUI();
// 업데이트 폼 객체 생성
var configFile:File = new File("app:/update-config.xml");
// 설정 정보를 담은 xml파일을 File 객체로 생성 

exampleUpdater.configurationFile = configFile;
// xml에 담긴 설정 정보를 업데이트 폼 객체에 적용
exampleUpdater.initialize();
//설정 정보에 맞춰 업데이트 폼 객체의 초기화





 업데이트 설정 정보를 담은 update-config.xml는 AIR  패키지를 생성할 때 함께 추가되어 배포될 것입니다. 이 xml 파일은 사용자의 컴퓨터에 설치되어 해당 어플리케이션이 업데이트 정보를 어떻게 확인하고 어디서 확인하는지에 대한 정보를 담고 있습니다. XML 구조는 아래와 같습니다.

<?xml version="1.0" encoding="utf-8"?>
<configuration xmlns="http://ns.adobe.com/air/framework/update/configuration/1.0" >
   <url>'update-descriptor.xml'이 있는 경로</url>
   <!-- 최신 업데이트가 있는지 확인할 수 있는 서버측 xml //-->
   <delay>1</delay>
   <defaultUI>
       <dialog name="checkForUpdate" visible="true" />
       <dialog name="downloadUpdate" visible="true" />
       <dialog name="downloadProgress" visible="true" />
       <dialog name="installUpdate" visible="true" />   
       <dialog name="fileUpdate" visible="true" />   
       <dialog name="unexpectedError" visible="true" />
       <!-- 상기 설정에 관한 자세한 정보는 검색을 이용 | 일단 모두 true 설정 //-->
   </defaultUI>
</configuration>



 이렇게 사용자 컴퓨터는 이 xml 설정 정보를 이용해 최신 업데이트가 있는지 확인합니다. 하지만 최신 업데이트가 있는지 확인할려면 서버측에도 업데이트 정보를 가지고 있어야겠지요? 이 역활을 해주는 것이 update-descriptor.xml입니다. 내용은 아래와 같습니다.

<?xml version="1.0" encoding="utf-8"?>
<update xmlns="http://ns.adobe.com/air/framework/update/description/1.0">
    <version>1.0</version>
    // 버전 설정 | 사용자 컴퓨터는 이 버전의 숫자로 파일의 버전을 식별
    <url>최신 업데이트용 패치 파일 *.air</url>
    <description><![CDATA[
        업데이트 내용을 서술하는 곳 | 릴리즈 정보로 나오게 됨
    ]]></description>
</update>



 이제 업데이트 구현을 위한 기본적인 구색은 갖춰졌습니다만 한가지 문제가 있습니다. 서버측에서 최신 버전을 확인하기 위해선 checkNow()라는 함수를 사용하는데 이것을 사용할 때는 initialize() 함수를 실행한 후 서버측 요청이 끝나야 사용가능하다는 것입니다. 쉽게 설명드리자면...

exampleUpdater.initialize();
exampleUpdater.checkNow();



 이렇게 하면 작동이 안된다는 것이지요. 이 문제를 해결하기 위해서는

  1. [업데이트 확인]이라는 버튼을 따로 만들어서 이 버튼을 클릭할 경우에 checkNow()를 실행시키거나 (이 버튼을 클릭할 때에는 이미 업데이트 객체의 initialize가 완료되어 있으므로)
  2. Timer객체를 이용하여 일정 시간 이후에 실행되거나

 둘중 하나를 선택해야할 것입니다.


 저 같은 경우엔 1분 간격으로 서버의 update-descriptor.xml에서 version정보를 주기적으로 읽어들여 사용자 컴퓨터의 버전 정보와 비교 후 같으면 checkNow() 함수가 실행되게 해놨습니다. 자세한건 설명드리 않겠습니다.(나도 먹고 살아야지;;) 한가지 힌트를 드리자면...

 NativeApplication.nativeApplication.applicationDescriptor를 이용해서 해당 어플리케이션의 버전과 이름 정보를 xml로 return 받을 수 있습니다. 여기서 버전 정보를 추출해 서버측 update-descriptor.xml의 버전 정보를 비교하면 되는 것이지요.

 건투를 빕니다.


참고 자료 : http://www.adobe.com/devnet/air/flash/quickstart/update_framework.html

저작자 표시 비영리 변경 금지
Posted by 정 영진

트랙백 주소 : http://www.weblind.com/trackback/101 관련글 쓰기

  1. Subject : 정영진의 생각

    Tracked from buckard's me2DAY 2009/07/21 14:57  삭제

    플래시 AIR 어플 자동 업데이트 기술 개발 완료~ 핵심 기술은 단돈 9원에 팝니다. “5원짜리 한개와 1원짜리 네개를 구하는 정성만 있으면 오픈”

댓글을 달아 주세요

↑ 메인화면 (영문)

↑ 목록 화면 (중문)

↑ 상세 화면

↑ 지도보기 화면

↑ 지도보기 선택화면

↑ 이메일 주소 입력기 화면

 전체적인 UI 수준은 제가 기대한 것 이하입니다. 개발 업무량을 잘못 선정하여 시간이 촉박한 상황 속에서 UI설계를 고민할 수 있는 시간적 여유가 부족했기 때문입니다. 지속적인 업데이트가 꾸준히 이루어질 예정이기 때문에 이후를 기대해주세요. 물론 저는 죽어나겠지만요. ㅋㅋ

 키오스크의 시연 동영상은 이곳을 참조하시길 바랍니다.
저작자 표시 비영리 변경 금지
Posted by 정 영진

트랙백 주소 : http://www.weblind.com/trackback/92 관련글 쓰기

댓글을 달아 주세요


 경주 관광안내 도우미(T.I.S)는 경주시의 다양한 관광지들과 문화재, 숙박시설, 음식점들의 정보를 손가락으로 화면을 누르며 확인할 수 있는 터치스크린(touch screen) 시스템입니다. 이 시스템이 제공하는 서비스는 아래와 같습니다.
  1. 분류 검색 서비스를 제공합니다. 사용자들은 이 서비스를 통해 자신이 원하는 형태의 관광자원만 정리해서 확인할 수 있습니다.

  2. 지도 검색 서비스를 제공합니다. 사용자들은 이 서비스를 통해 검색 대상의 대략적인 위치를 확인할 수 있고 주변의 여러 관광자원들의 위치도 파악할 수 있게 됩니다.

  3. 여행카트 서비스를 제공합니다. 모든 관광자원들은 여행카트에 담을 수 있고 사용자들은 이 여행카트에 담긴 관광자원들을 이용해 간단한 여행 일정표를 만들 수 있습니다.

  4. 4개국 언어환경 서비스를 제공합니다. 경주를 찾아 온 외국인들도 한국 사람들과 동일한 서비스를 제공 받습니다.

  5. 그외 각종 다양한 서비스들을 제공합니다. 경주시의 각종 행사 일정을 확인할 수 있을 뿐만 아니라 오늘의 날씨, 공공시설 위치 등 여행자들이 원하는 수많은 정보들을 제공합니다.

 이 시스템은 경주역과 안압지 입구에서 이용할 수 있습니다.


<여행도우미(키오스크) 조작화면>

 이번 키오스크 프로젝트는 저에게는 정말 큰 경험이었습니다. 웹 어플리케이션을 제작할 때 플래시를 사용해본 경험이 있으니 데스크탑 어플리케이션(플래시 AIR)도 쉽게 가능할 것이라 단정하고 이번 프로젝트에 임한 것은 정말 큰 실수였습니다. 생각해야할 것들이 너무 많았지요. 또한, 명확한 설계서 없이 진행되고 프로젝트 내내 새로운 컨텐츠가 추가되다보니 시간에 쫓기고 UX는 엉망이 되었 의도한대로 만들 수 없었습니다. 개인적으로는 최악의 프로젝트 중 하나로 기억될듯 합니다.

  1. 자원관리 : 데스크탑 어플리케이션은 웹환경과 달리 자원 관리가 굉장히 중요한 요소입니다. 포인트를 일일히 지정해서 메모르를 관리해야하는 C언어와 틀리게 플래시 플레이어의 가비지 컬렉션이라는 인공지능 모듈이 알아서 메모리를 관리해줍니다. Adobe측에선 이 기능을 대대적으로 홍보하고 있지만 실제 이 기능은 빚좋은 개살구나 마찬가지입니다. 가비지 컬렉션의 동작을 유도하는 것은 쉬운 일이 아니며 개발자 스스로가 메모리 관리를 할 방법도 없기 때문입니다. (이것에 대해선 차후에 다시 한번 포스팅할 예정입니다)

  2. 문서 : 프로젝트 도중에 수정사항이 들어오면 코딩은 산으로 가기 시작합니다. UX 설계는 말할 것도 없구요. 개발 전에 이루어지는 문서 정리 과정의 소중함을 다시 깨닫게 된 계기가 되었습니다.

  3. 설계 : TIMER객체를 이용한 옵저버 패턴으로 대부분의 이벤트를 처리했는데 이것이 코딩의 양이 방대해지니 문제를 일으키더군요. 각 리스너는 0.1초에 한번씩 이벤트를 살펴보는 구조로 되고 이런 구조는 소규모 어플리케이션에서는 안전하지만 대규모 어플리케이션에는 반드시 문제를 일으킵니다. (코딩의 양을 계산해보니 대략 7000줄 쯤 되는 것 같더군요) 그렇다고 TIMER객체의 시간 설정을 0.1초가 아니라 0.01초로 더욱 민감하게 만들어 놓으면 CPU 점유율이 올라갑니다. 진퇴양난입니다.;; 다른 개발자 분들은 어떻게 하시는지 모르겠지만 TIMER객체로 이벤트를 감시하는 구조는 가능한 자제하십시오.

  4. 컴포넌트 : 이번 키오스크는 터치스크린 구조입니다. 터치스크린은 손가락으로 조작하기 때문에 일반적인 마우스 조작과는 다른 환경입니다. 이 때문에 플래시에서 제공하는 우수한 UI컴포넌트들을 모두 버리고 직접 제작해야했습니다. ㅡㅡ;; UI컴포넌트를 사용할 수 있느냐 없느냐에 따라 프로젝트의 전체 일정도 상당한 차이를 일으키더군요. 일정이 자꾸 밀리기 시작했고 이 때문에 근 2달간 새벽에 퇴근해야했습니다.

 AS3.0 / 플래시로 데스크탑 어플리케이션을 제작할 때는 웹 어플리케이션 제작 일정의 2배로 잡아야 안전할 것입니다. 플래시 AIR를 제작하는 개발자 분들께 참조가 되었으면 좋겠군요.

저작자 표시 비영리 변경 금지
Posted by 정 영진

트랙백 주소 : http://www.weblind.com/trackback/91 관련글 쓰기

댓글을 달아 주세요

Flex/AIR Bible

책소개 2008/07/18 16:25
사용자 삽입 이미지
  배송받은지 일주일이 지난 오늘... 드디어 이 책을 다 읽었다. 출판사는 대림이다. 일전에 대림 출판사에서 출간한 [새롭게 시작하는 플래시 CS3 ActionScript 3.0]이란 책과 [Flex 3 Knowhow Bible]이란 책을 읽으면서 해당 출판사의 책만드는 수준은 익히 알고 있었기 때문에 책 상태는 크게 기대하지도 않았는데 역시나... 이 책은 나의 예상을 조금도(x3) 벗어나지 않았다. 맞춤법이 완전히 틀린 점은 이제 어느정도 적응이 되어 그러려니 하는데 책의 신뢰성에 악영향을 미치는 오타와 오제는 여전히 해결되지 않아서 나는 책 읽는 내내 스트레스 받아야만 했다.

 이런 형편없는 작문의 원인을 저자 탓으로 돌릴 수도 있겠지만 개발 전문가인 저자에게 작문실력까지 기대하는 것은 '오버'라고 생각한다. 저자의 작문실력을 보완하기 위해서 출판사가 존재하는 것 아닌가? 명색이 출판사라는 곳이 국문과 졸업생 직원 한명 없겠는가? 거기다 맨 뒤에 키워드 인덱스 부분을 빼버린건 무슨 센스인가? 국내 서적이 외국 서적에 비해 인덱스가 너무 빈약해서 유명무실하다는 것은 모두 알고는 있지만 인덱스를 아예 빼버린 "900페이지 짜리 기술 서적"은 난생 처음 본다. 이 출판사는 출판사가 마땅히 해야할 이런 작업을 전혀하지 않았고 저자의 명성과 실력에 기대어 돈만 챙긴 느낌이 강하다. "야~이~ 도둑 놈들아!"

 형편없는 재책 수준과 달리 책 내용은 상당히 훌륭하다. 일전에 내가 소개한 [Flex 3 Knowhow Bible]은 상당히 실제적이고 실무적이어서 마음에 들었다면 이 책은 플렉스의 근원적인 부분을 많이 다루고 있어서 개발자의 내공을 올려주어 높은 점수를 주고 싶다. 개인적으로 진정한 의미의 Bible 서적이 나온 것 같아서 무척 기쁘다.

 FDS에 관한 내용이 빠져 약간 아쉽지만 플렉스/AIR에 관련한 대부분의 기술들이 소개되었고 개념적인 부분을 부족함 없이 설명했다. 물론, 다른 기술서적과 다르게 개념적인 부분을 집중적으로 설명하다보니 책이 다소 지루하고 답답해보일 수도 있겠으나 개인적으로 이런 서술식의 글이 개념을 잡기에는 가장 좋은 방법이라고 생각하며(적절한 다이아그램만 더 있었어도) 항간에 유망자격증으로 알려진 ACE Flex 2 자격증 준비에도 아직 이것만큼 최적화된 책은 없다고 생각한다. (FDS는 따로 공부하세요.)

 객체지향과 이벤트 모델에 어느정도 익숙한 개발자가 읽어야할 책이며 특히 책 뒷부분의 RPC부분은 네트워크 설계에 관한 사전 지식 없이는 이해하기 힘들 것으로 생각한다. 프로그램 세계에 처음 입문하시는 분들은 C++이나 자바 기초 학습, 네트워크 학습을 충분히 하고 책을 읽어야 할 것이다.

  • 도서명 : Flex/AIR Bible
  • 가   격 : 37,000원
  • 저   자 : 윤 훈남
  • 출판사 : 대림
  • 수   준 : 중급

'책소개' 카테고리의 다른 글

Flex/AIR Bible  (4) 2008/07/18
바닐라로이 Flex 3 Knowhow Bible  (0) 2008/07/03
웹 사용성 중심의 웹 사이트 제작론  (0) 2008/03/20
Posted by 정 영진

트랙백 주소 : http://www.weblind.com/trackback/60 관련글 쓰기

댓글을 달아 주세요

  1. BlogIcon 열이아빠 2008/07/18 17:16  댓글주소  수정/삭제  댓글쓰기

    일주일만에 다 읽으시다니..대단하십니다.ㅁㅁ
    너무 두터워서 차마 손도 못대고 있다는..

  2. 도둑놈입니다 2008/07/24 13:42  댓글주소  수정/삭제  댓글쓰기

    우연히 검색하다 이 글을 보게 되었네요. 좋은 충고 감사합니다.
    사실 저도 이 책은 욕 얻어 먹을 생각을 하고 빨리 냈습니다. 액션스크립트 3.0도 그렇고 Flex Knowhow Bible도 그러했구요.

    돈이나 벌면서 도둑놈이란 소리 들었으면, 기분이라도 좋았을텐데.

    핑계(?)대고 싶은 마음 굴뚝같지만, 하지 않을렵니다.
    하지만 도둑놈은 아니란 말을 하고싶네요.
    나름 이쪽 시장을 사랑하고 남들이 내지 않을려는 책 낼려고 노력했습니다. 저자 명성과 실력에 기대지도 않았다는 것만 말씀 드리고싶습니다. Flex/AIR 전문가들 중에서 윤훈남 저자 아시는 분 있을 것 같으세요? 숨겨진 정말 멋진 분이란걸 알지만, 저자 명성과 실력으로 하지 않았다는 걸 말씀드리고 싶습니다.

    핑계라도 듣고 싶으시다면
    mylovena@msn.com으로 메시지 남겨주세요.
    왜 도둑놈이 아니라고 하는지 말씀드리도록 하겠습니다.

    좋은 충고 가슴속 깊이 남겨놓고
    도둑놈이란 소리 듣지 않도록 많은 노력 기울이겠습니다.
    감사합니다.

    아~ 그리고 시간 되시면 책 집필해 보세요.
    아이템들도 좋은 것 같으시고, 글도 잘 쓰시는 것 같은데.
    당연히 도둑놈의 출판사하고는 일하시지 않으시겠지만.^^ 농담입니다.

    • BlogIcon 정영진 2008/08/01 21:15  댓글주소  수정/삭제

      잠시 인터넷과 단절된 곳에 다녀오느라 미쳐 답글을 못 달아드렸습니다. 이제야 확인했군요.

      제가 도둑놈이라는 표현을 사용한 것은 찬론도 반론도 아닌 어느 교만한 블로거의 배설 정도로 이해해주시길 바랍니다. 지금 다시 읽어보니 이 책의 긍정적인 면이 상당히 많음에도 불구하고 부정적인 면만 너무 부각시킨 것 같아서 미안하게 생각됩니다.

      귀사의 출판물에 대해 매우 부정적인 견해를 포스팅 했음에도 불구하고 제가 최근에 구입해서 읽은 IT서적 4권 중에서 3권은 귀사의 출판물이었을 정도로 귀사의 책을 즐겨 봅니다. 그리고 실질적인 도움도 상당히 많이 받고 있습니다. 즉, 제가 귀사에 대한 악감정이 있는 것은 아니라는 것을 알려드리고 싶군요. 단지 '아쉬움'을 두서없이 배설했을 뿐입니다.

      배설한 글은 심각하게 생각하지 않으셔도 됩니다. 실제 이렇게 IT경향에 민첩하게 발맞추는 출판사에게 재책 수준까지 요구한다는 것은 무리지요. 그런 것을 진지하게 요구하는 사람이 있다면 그 또한 '도둑놈'인 것이라고 생각합니다.

      아무쪼록 이런 두서 없는 글로 인해 귀사의 비전과 자부심에 누를 끼치지 않았으면 합니다. 저는 귀사가 다른 어떤 출판사보다도 잘하고 있으며 앞서 나간다고 생각하고 있으니 흔들리지 말고 자신의 비전을 믿고 더욱 발전하시길 바랍니다. 앞으로 멋진 책 많이 제공해주십시오. 건투를 빕니다.^^

  3. BlogIcon chery 2008/09/11 14:44  댓글주소  수정/삭제  댓글쓰기

    흠.. 책 리뷰 감사합니다. 구매에 많은 도움이 되었어요~ ^^