코드네임 Strobe였던 OSMF(Open Source Media Framework)가 2009년 7월 21일 기점으로 오픈 소스로 공개되었다. 현재 버전은 0.3 2.0(2013-12-17)이다.

 

OSMF는 3개 부분의 구조로 나뉜다. User Interface, Monetization workflows, media delivery가 그것이다.

 

OSMF는 최적의 Media Player를 개발할 수 있는 프레임워크로 플레이어 개발의 복잡성을 줄어준다.

재생컨트롤, 비디오 네비게이션, 버퍼링, 다이나믹 스트리밍, 리포트 분석과 같은 플러그 인 설치등을 지원한다. 무엇보다 이 모든 기능이 오픈소스화 되어 어느 개발자든지 만들어진 소스를 공유하고 수정하며 다시 배포할 수 있게 되었다. 정확한 라이센스는 MPL에 따른다.

 

공식사이트는 아래 링크를 참고한다.

http://osmf.org/


아래는 OSMF 블로그이다. 

http://blogs.adobe.com/osmf/ 


다운로드는 아래 링크를 참고한다.

http://sourceforge.net/projects/osmf.adobe/files/


빠르게 익숙해지려면 아래 링크 동영상을 보도록 하자.

http://www.gotoandlearn.com/play.php?id=129 

http://tv.adobe.com/show/rich-media-player-development-with-osmf/ 


아래 링크에서 OSMF Examples를 볼 수 있다.

http://mediapm.edgesuite.net/osmf/swf/ExamplePlayer.swf  


Flash Builder, Flash CS3, CS4 환경이면 OSMF API로 개발이 가능하겠다.

본인도 OSMF를 다운로드 받아서 예제 소스를 가지고 Flash Builder 4 에서 만들어 보았다. Flex 소스가 Flex 3라서 Flash Builder 4에서는 SDK를 3.4 버전으로 맞춰줘야 한다.


참고: 아래소스는 0.3버전 시절겁니다. 그냥 참고만 하세요. (2013-12-17)

 

 

CompositionPlayer.zip

 

위 결과물은 OSMF 배포된 소스 안에 있는 샘플로 만든 것이다. UI는 형편없지만 다양한 방법로 Media 컨텐츠를 읽어와 재생하고 볼륨조정, Pan 조정도 가능하다는 것을 보여주고 있다.

 

아래 프로그램은 순수하게 ActionScript 3.0 프로젝트로만 만들어 본것이다.

 

FlashMediaPlayerTest.zip

 

필요하다면 OSMF를 프로젝트에 복사해서 사용해도 된다.

 

아니면 아래 처럼 라이브러리 형태로 배포된 SWC를 자신의 프로젝트의 libs에 추가해서 사용해도 된다.

 

예제만 잘 보면 활용방법도 쉽게 얻을 수 있다. ^^

이제 Media 관련 플레이어를 제작하는데 많은 노력없이 OSMF만 이용해도 충분히 만들 수 있게 되었다. 너무 멋지다 이런 멋진 플레이어의 소스를 볼 수 있다는 것이 말이다.

 

글쓴이 : 지돌스타(http://blog.jidolstar.com/560)

ActionScript 3.0(이하 AS3)은 Java와 매우 유사한 구조를 가진다. 그러므로 Java를 공부한 사람이라면 AS3를 쉽게 접근할 수 있게 된다. C++을 했던 사람도 비슷한 구조때문에 쉽게 접근이 가능하다.

 

AS2를 공부했던 사람은 객체지향적으로 설계된 AS3를 공부하면 된다.

 

여기서는 ActionScript 3.0에 대해서 어떤 절차없이 생각나는대로 적어보았다. 매우 개인적인 생각이기 때문에 반박하고 싶으신 내용도 있을지 모르겠다. 그렇다면 얼마든지 댓글 환영이다. ^^

 

 

Java와 ActionScript 3.0 차이점

 

Java와 AS3간에 차이점을 보여주는 표이다. 쭉 훑어보자.

http://blog.naver.com/surfwon/30049390718

 

 

ActionScript 3.0의 아쉬운점

 

AS3는 객체지향기반의 언어이지만 몇가지 아쉬운 점이 존재한다.

 

1. 메소드(함수)의 오버로드(overload)를 할 수 없다.

 오버로드는 클래스안에 같은 이름의 함수를 중복해서 사용할 수 있는 기능이다. AS3에서는 Java나 C++에서 지원되는 이 오버로드 기능이 없기 때문에 개발시 아에 생각을 하지 않게 하는 장점도 있지만 정말 필요할때 다른 방법으로 대체해야하는 불편함이 생긴다. 아래글을 보자.

 http://blog.jidolstar.com/484

 

2. 생성자는 하나만 존재한다.

위 오버로드를 지원하지 않는 것과 일맥 상통하는 내용이다.

 

3. 추상클래스가 지원되지 않는다.

Java와 같은 abstract 키워드가 존재하지 않아 추상클래스를 만들 수 없다. 하지만 throw등을 이용해 컴파일시가 아닌 런타임에서 동작하는 추상클래스는 제작이 가능하다. 추상클래스는 AS3에도 클래스 설계시 꼭 필요하지만 아직 지원하지 않아 아쉬운 부분이다. 아래 글을 보자.

http://blog.jidolstar.com/452

 

 

4. private 생성자가 지원되지 않는다.

private 생성자는 외부에서 클래스 객체를 임의로 만드는 것을 금지시켜주는 역할을 한다. 하지만 AS3에서는 생성자에 public외에는 private, protected 를 쓸 수 없다. private 생성자가 필요한 단적인 예는 싱글턴 패턴을 구현할 때인데 AS3에서는 아래와 같이 다른 방법으로 싱글턴 패턴을 구현한다.

http://koko8829.tistory.com/304

 

아래 링크는 싱글턴 패턴을 응용한 형태이다.

http://blog.jidolstar.com/468

 

 

 

ActionScript 3.0을 왜 사용해야하는가?

 

AS2를 주로 했던 사람은 AS3의 강력함을 잘 느끼지 못해서 전향하지 않는 사람들이 많은 것 같다. 아래 글을 보고 AS3를 왜 해야하는가 알아보자.

 

AS3를 왜 사용해야하는가? : http://ddongkang.tistory.com/76 

 

 

ActionScript 3.0 의 재미

 

초보자가 Java, C++에서 느끼지 못하는 AS3의 재미는 처음 만드는 애플리케이션이 시각화된 결과물이라는 점일 것이다. 이 게시판에 앞어 간단한 AS3프로젝트를 통해 3D를 단 몇줄도 안되는 코드로 구현했던 것을 보면 그 의미를 알 것이다. 또한 AS3를 하다보면 매우쉽게 데이터통신, 데이터제어, 각종 미디어 기술지원, Flex, AIR로의 개발확장성등으로 인해 C++, Java와는 또 다른 재미를 느끼게 될 것이다.

 

 

ActionScript 3.0 공부하자.

 

AS3는 얼마든지 공부할 수 있다. 좋은 동영상 강좌도 있다.

AS3 강좌모음 : http://ddongkang.tistory.com/73

 

AS3 학습을 위해 아래 링크의 문서와 친해지자.(한글이라서 좋다!)

http://help.adobe.com/ko_KR/ActionScript/3.0_ProgrammingAS3/

http://help.adobe.com/ko_KR/AS3LCR/Flash_10.0/

 

위 문서는 영문도 있다.

http://help.adobe.com/en_US/ActionScript/3.0_ProgrammingAS3/

http://help.adobe.com/en_US/AS3LCR/Flash_10.0/

 

 

 

Flash 기술에 대한 오해

 

아래 글에 오해하시는 분들이 많으신 것 같아요. 아래 제 댓글을 보시고 제가 보는 관점에서 아래 글을 판단해주셨으면 합니다. ^^

 

C++,  Java하시던 분(기초수준 및 서버개발만 주로 한 분들)이 AS3나 Flex를 접할때 잘못된 태도가 있다. 내가 좀 언어좀 하는데 그냥 쉽게쉽게 할 수 있겠지라는 마인드이다. 또는 Flash인데 그것도 언어야?... 이런 마인드.. 금물이다.

 

AS3나 Flex도 그만의 독특한 구조와 기능이 있다. C++, Java만 했던 사람이 데이터 바인딩, 메타데이터태그, 이벤트 모델, 비디오제어, 음원제어, 마이크로폰 제어, 디스플레이객체 다루기, 응용애플리케이션구조,각종보안, XML 다루기등에 대해서 잘 알리가 없지 않은가? 그만큼 Flash 기술이 단순히 그래픽을 위한 기술이다라고 오해하는데서 비롯된다고 생각한다. Flash 기술은 이미 데스크탑에서 모바일, 각종운영체제, 각종 브라우져에 MS계열의 기술보다 더욱 빠르고 거대하게 확장되어 이미 우리 실생활에 적용되고 있다. 그러므로 AS3.0을 공부할때 너무 가벼운 마음으로만 공부한다는 생각은 버리자. 요즘 안드로이드 폰에 Flash 지원하고 앞으로 AIR로 각종 모바일 프로그램을 만들 수 있게 된다는 것을 생각하면 가벼운 기술은 아니구나라는 생각을 할 수 있을 것이다.(못믿겠으면 여기를 본다) Flash는 이미 클라이언트 기반을 넘어 서버기반의 기술도 지원해주어 진정한 RIA의 선봉장에 있다. 이러한 점을 잘 이해하고 Flex,AS3,AIR,Flash등을 공부하는 것이 좋겠다.

 

저번주 2009년 5월 23일 서울 서초동 비트컴퓨터 멀티미디어관 지하 2층에서 OKGosu.net 세미나가 있었습니다. 저는 "스타플(starpl.com) 서비스에 이용된 Flex 기술" 이라는 제목으로 발표를 했습니다.

 

스타플 홍보도 하고 싶고 함께 기술도 공유하고 싶어서 그랬는지 주제 자체가 너무 커져서 많은 것을 전달하지 못해 약간 아쉬움이 남는 시간이였던 것 같습니다.

 

이번 세미나로 제가 말씀드리고 싶었던 것은 아래 내용이였습니다.

 

1. 스타플 소개

2. Flex를 도입할 때 고려해야할 사항

3. 개발 방법 소개

4. 모듈 개발시 최적화 방법

5. Flex 학습방법

 

한가지만 해도 30분 이상씩 잡아야 제대로 설명이 가능한 건데 너무 많은 주제를 놓고 이 모든 것은 40분 내에 말할려고 했네요. ^^;;

 

약간 보충해서 설명드릴께요.

 

1. 스타플 소개

스타플 구경을 못드렸네요. http://starpl.com 에 가시면 구경하실 수 있답니다.

홍보 동영상을 다시한번 보고 싶으시다면 "홍보영상보기"를 눌러주세요.

스타플에 대해서 더 알고 싶다면 제 블로그에서 스타플로 검색해보세요.

 

2. Flex를 도입할 때 고려해야할 사항

발표시 말씀드렸던 것은 Flex/Flash 중 도입 선택에 대한 문제였습니다. 어떤 경우에는 Flex를 도입하는 것이 맞는 반면 경우에 따라서는 Flex를 쓰는 것이 오히려 문제가 될 수 있습니다. 가령, Flex Framework에서 제공하는 컴포넌트를 거의 사용하지 않는데 Flex를 도입하는 것은 무리입니다. 또한 Flex를 도입하면 쉽게 해결될 것을 Flash로 만들면 그것 또한 문제지요. 이 점을 잘 생각하시고 선택하시길 바래요.

 

3. 개발 방법 소개

제 개인적인 개발 방법을 소개했습니다.

분석-설계-제작-테스트-배포 형태로 된다는 것을 설명드렸죠.

말씀 드리고 싶었던 것은 "기획자, 디자이너간에 커뮤니케이션 중요하다. 서로 존중하면서 대화에 임하라."라는 것과 제작환경 구성시 "ANT, SVN은 꼭 잘 활용해라"라는 것이였습니다. 더불어 통신관련 도식화와 애플리케이션 도식화, 그리고 UML 제작을 개발하기 전에 꼭 해보라는 것이였습니다. 이러한 작업은 앞으로 문서화에도 도움이 되며 다른 사람에게 인수인계할때도 좋고요. 나중에 그 프로그램을 다시 보더라도 내가 짠 것 내가 이해 못하는 꼴이 발생하지 않습니다. ^^

 

4. 모듈 개발시 최적화 방법

SWF가 다른 SWF를 로드하고 Class를 서로 참조하는 일이 발생하는 개발을 하게 되면 모듈 프로그래밍을 한다고 할 수 있습니다. 중요한 것은 다른 SWF간에 정의된 Class중복을 어떻게 해결할 것인가였습니다. 중복 자체가 크게 문제를 일으키는 것은 아니지만 필요없는 Class를 가지고 있기 때문에 프로그램 용량이 그만큼 커집니다. 그래서 중복된 Class를 없애기 위해 RSL도 이용해보고 mxmlc 컴파일러 옵션에 -include-libraries, -load-externs, -link-report 등의 옵션을 사용하는 예도 보여드렸습니다.

 

Main애플리케이션과 모듈이 서로 같은 Class를 담고 있는 경우 그대로 로드하면 어느 한쪽의 클래스를 사용하게 되겠지요. 이때 중요한 개념이 ApplicationDomain인데 제가 이 설명을 빠뜨렸습니다.

 

이 이야기는 다음 링크를 참고하세요.

Flex 모듈 프로그래밍의 기초 - Application domain의 이해 1부

Flex 모듈 프로그래밍의 기초 - Application domain의 이해 2부

 

 

5. Flex 학습법

이 부분은 시간관계상 설명 못드렸네요.

어떻게 보면 매우 중요한 부분인데 ㅎㅎ

제가 말씀 드리고 싶었던 것은 Flex 낚는 어부가 되시라는 거였습니다. Flex라는 물고기만 계속 받아먹기만 하면 발전이 없잖아요. 그래서 Flex 낚는 어부가 되기 위해 이것만은 했으면 좋겠다는 내용이였죠. 설명 못드려 아쉽네요. 시간조정을 못한 제 불찰입니다. ㅜㅜ

 

 

아무튼 짧았지만 좋은 시간이였던 것 같습니다. 제가 발표했던 자료는 아래 링크를 통해 받아가세요.

 

 

다른 분의 자료는 [여기]에서 받아가세요.

 

이번 세미나를 개최하시느라 고생하신 옥상훈(http://okgosu.tistory.com)님 수고 많으셨고요.

주최에 도움을 줬던 데브멘토(http://devmento.co.kr) 관계자 분들도 수고 많으셨습니다.

 

발표자였던 오창훈(http://lovedev.tistory.com/), 이정웅(http://bluemetal.tistory.com/)님도 수고했어요.

 

저는 항상 열려있습니다.

저처럼 바보같은 질문도 괜찮습니다. 반대로 제가 답변 못하더라도 전 부끄럽지 않습니다.

오히려 몰랐던 것을 알게 되니 좋은 것이지요. ^^

대한민국 개발자들이 서로 소통하는데 힘써주셨으면 합니다.

 

 

 

 

도전! 개발자 무한 상상력

 

AIR 애플리케이션 경연대회

 

Adobe AIR는 웹과 데스크톱의 한계를 넘어, 개발자 여러분께 무한 상상력을 발휘할 수 있는 플랫폼 환경을 제공합니다. 지금 AIR 애플리케이션 경연대회에 참여해 여러분의 무한 상상력을 뽐내 보세요. 7분을 선정해 푸짐한 경품을 드립니다.

 

 

<경품>

  • 대상(1팀) : Adobe Flash CS4 Professional 1copy, 상장 수여
  • 최우수상(1팀) : Adobe Flex Builder 3 Professional 1copy, 상장 수여
  • 우수상(1팀) : Filco Majestouch 기계식 키보드, 상장 수여
  • 장려상(4팀) : 우야꼬의 Flash CS4로 만드는 AIR 1.5 서적, 상장 수여

 

<특전>

입상한 7팀 중 대상 1팀과 최우수상 1팀에게는 2010년 ACC(Adobe Community Champion) 후보가 될수 있는 자격을 부여해 드립니다.

 

 <일정> 

  • 선정기준 : 응모된 작품 중 ACC(Adobe Community Champion)이 심사해 7건을 선정
  • 마감 : 2009년 5월 17일까지
  • 입상작 발표 :  2009년 5월 25일
  • 현장심사, 발표 : 2009년 5월 28일

 

<응모 방법>   

  1. AIR 애플리케이션 제작을 위한 자료를 학습한다.
    <자료>
    [동영상] 작년 대상 수상자의 “AIR 애플리케이션 제작기”
    [PDF] "AIR로 업무를 혁신하다" AIR 국내,해외통합본 PDF 제공
    - 온라인미디어 분야 - Verizon Wireless
    - 방송 분야 -  영국 BBC의 iPlayer
    - 그룹웨어 적용 – 희림건축 AIR기반의 그룹웨어 구축 사례
    - 대고객서비스 - FedEx, FOX News, eBay
    - 문서관리 솔루션 –  LiveCycle AIR Desktop 애플리케이션 소개
  2. AIR 애플리케이션 기획의도와 제작과정을 캡처한 스케치, 프로그램,완성작품 시연동영상을 첨부해 메일(admin@adoberia.co.kr)로 응모한다.

 

<선정 과정>

  1. 접수된 작품 중 ACC 사전심사를 실시해 1차 7팀의 작품을 선정한다.
  2. 7팀의 작품을 가지고 최종 발표회 심사를 실시해 대상을 선정한다.

 

<심사기준>

  • 작품의 기술성(40)
    -         데스크톱 리소스 응용도(20) : AIR의 장점인 데스크톱의 리소스를 효과적으로 응용하는가?
    -         성능(10) : 애플리케이션의 성능이 이용에 불편없는가?
    -         완성도(10) : 구현하고자 하는 기능과 제출문서 등이 모두 완성되었는가?
  • 주제의 창의성(20) : 기존 애플리케이션과 주제면에서 차별화되는가?
  • 작품의 활용성(20) : 사용자의 생활에 도움을 주는 애플리케이션인가?
  • 사용자 편의성(20) : 사용자가 이용하는데 효과적인 UI로 구성되었는가?
  • 기타 궁금하신 점은 블로그 댓글이나 메일( admin@adoberia.co.kr )을 이용해주세요.

 

궁금합니다.

이벤트 공지가 나간 후 문의메일이 들어오고 있습니다.

모두들 궁금해 하실 듯하여 블로그에 올립니다.

 

소스코드도 제출하나요?

네. 메일( admin@adoberia.co.kr )로 접수하시면 됩니다. 용량이 클 경우에는 메일로 문의해주세요.

 

 

'완성 작품 시연동영상'을 제출해야 하는데요. 꼭 제출해야하나요?

완성 작품 시연동영상은 선택사항입니다.


자신의 작품을 직접 시연할 수 없기 때문에,  심사시 작품을 100% 보여주지 못합니다. 이런 점을 방지하고자, 작품을 최대한 표현할 수 있는 방법으로 완성 작품 시연동영상을 선택하였습니다.


동영상은 3분내외의 작품을 시연하는 영상입니다. 동영상의 품질이나 효과 등은 심사시 평가되지 않습니다.

 

 

입상하게 되면 어떤 특전이 있나요.

상품과 상장이 수여되고, 대상과 최우수상에 한하여 2010년 ACC 후보가 될 수 있는 자격을 부여해드립니다. 또한, 입상작은 AIR Badge로 제작하여, Adobe RIA공식사이트 AIR 샘플 애플리케이션으로 소개될 예정입니다.

 

 

출처 : 한국 Adobe RIA 공식 사이트

 

국내의 한 회사에서 Flex/Sliverlight관련 RIA 플랫폼 기반의 프레임워크를 오픈소스화 했다. 이름하야 OpenZET. Open 소스도 모자라 무려 한국어를 포함한 5개 국어(영어,프랑스어,스페인어,일본어)로 번역되었다. 회사자체에서 이렇게 오픈 소스를 한다는 것은 폐쇄적이인 국내 IT 시장에서는 매우 획기적이고 즐거운 소식이 아닐 수 없다. 더군다나 다국어 지원까지…

 

아주 많은 자료가 있는 것은 아니지만 현업에서 컴포넌트를 어떻게 만들고 응용하는가 알 수 있고 함께 정보를 공유할 수 있다는 점에서 매우 가치있게 평가한다.

 

다른 많은 RIA관련 회사들도 이렇게 오픈 마인드를 가지고 국내 RIA 시장에 활기를 넣었으면 하는 바람을 가진다.

 

공식홈페이지 : http://openzet.org/

 

오늘 반가운 소식이 있네요. 한국 Adobe RIA 공식사이트(http://adoberia.co.kr) 홈페이지가 개편되었습니다. 디자인도 예전보다 깔끔해지고 훨씬 공식 페이지 다운 면모를 갖추게 되었습니다.

 

Adobe RIA 공식 홈페이지는 Flex/Flash/AIR와 같은 다양한 Adobe RIA기술의 중심지라고 말할 수 있으며 Adobe RIA에 관심있는 분이라면 하루에 한번 이상은 접속할 필요가 있는 홈페이지라고 생각합니다.

 

 

 

홈페이지 겉모양만 개편되었다면 아무말 안하는데 Flex/AIR개발자들에게 매우 반가운 프로그램이 소개되었군요. 바로 Flex3 한글 매뉴얼입니다. 한글 매뉴얼은 AIR로 제작되어 배포하고 있으며 (주)가호컨설팅(대표 이동호, 현 ACC)에서 많은 수고가 있었다는 것으로 알고 있습니다.

 

 

지금까지 Flex/AIR 한글화 문서 사이트(http://flexdocs.kr)를 운영해왔는데 Flex 2를 넘어가지 못한 점이 아쉬었던 때에 늦게나마 이런 좋은 툴이 제공되었다는데 매우 감사할 따름입니다. Flex 3 한글 매뉴얼이 나왔으니 이제 이 사이트도 문닫을 때가 되었군요.

 

 

오 Adobe RIA 사이트에 직접 방문할 수 있고 각종 유명 커뮤니티 및 블로그 링크도 제공하네요.  엇 제 홈페이지도…

 

 

이 프로그램의 아쉬운 점은 너무 늦게 오픈했다는 점입니다. 그리고 Help가 제공되지 않았다는 것이네요. 올해쯤에는 Flex 4가 나올것이고 Flex 3와 많은 부분 차이가 있다는 점이 있다는 것을 볼 때… 넘 아쉽네요. 그래도 있는게 어디입니까? 다 읽어봐야겠습니다. 감사합니다. 이동호 대표님 ^^

 

Adobe RIA 공식사이트에서는 오픈이래로 지속적으로 기술문서가 올라오고 있습니다. RSS 피드도 제공하고 있으니 구독하시면 훨씬 좋겠습니다.

 

 

또한 BLOG도 따로 제공하고 있어서 RIA 종사자 인터뷰, 각종 최신정보들이 올라오고 있습니다. 블로그도 RSS피드를 제공하고 있으니 구독하시면 좋겠네요.

 

 

2009년 부터 기존 Flex Champion이 Adobe Community Champion(이하 ACC)으로 명칭이 바뀌면서 그 의미가 확대되었습니다. 기존에는 Flex만 다뤘다면 이제는 Flex, Flash, AIR 등 Adobe RIA 기술 전반을 다루고 있습니다. ACC는 단순히 실력이 있고 유명한 사람을 지칭하지 않습니다.  ACC가 아니더라도 충분히 좋은 실력자들이 많으니깐요.  정확히 말해 ACC는 Adobe RIA 기술의 전도사들입니다. 지속적으로 기술문서 작성등을 통해 현업에서 알아낸 노하우 및 새로운 기술에 대해서 소개하며 각종 오프라인 모임에 힘을 실어줄 사람들입니다.

 

저도 ACC 일원으로서 Adobe RIA 기술의 전도사 역할을 열심히 해내도록 노력하겠습니다.

 

 

 

 

아래 테스트 코드는 문제가 있었습니다. 왜냐하면 GCC 최적화 옵션에 대해서 명확히 이해를 못하고 사용했기 때문입니다. 그래서 잘못된 지식을 전하는 것을 우려해 그냥 내용만 훑어보시되 “Adobe Alchemy 수행속도 테스트와 깊이 이해하기”글을 덧붙여 읽어주시길 바랍니다. 제가 잘못된 내용을 적었다면 지적해주셨으면 합니다. 그리고 실무에 썼거나 테스트를 해보신 분이라면 그에 대해 소개도 부탁드릴께요.

Alchemy는 C/C++ 코드를 AVM2(ActionScript 3 Virtual Machine) 환경에서 동작하도록 해주는 도구이다. Alchemy를 이용해 기존에 있는 C/C++ 코드를 Adobe AIR, Adobe Flex, Adobe Flash 프로젝트에서 직접 활용할 수 있는 SWF 또는 SWC를 만들어낼 수 있다. 이에 대한 더욱 자세한 사항은 본인이 게재한 “C/C++와 Flash 플랫폼과의 만남. Alchemy 1부” 를 참고하기 바란다.

 

이 글은 Alchemy를 이용해 만들어진 SWC를 이용했을 때와 순수 ActionScript 3.0으로만 코딩했을 때 수행속도 차이를 비교해보는 것을 목적으로 한다.

 

Alchemy 속도 테스트

 

과연 Alchemy를 이용해서 C언어를 SWC로 변환한 코드의 수행속도에 진전이 있을까? 아래 c코드와 ActionScript 3.0 코드는 이를 테스트할 수 있도록 한다. c언어와 ActionScript 3.0에서 동일하게 ”sin( 0.332 ) + cos( 0.123 ) + tan(0.333) * log(3)” 식을 1백만번 반복한다.

 

컴파일하고 수행하는 방법은 “C/C++와 Flash 플랫폼과의 만남. Alchemy 1부”를 참고한다.

1. speedtest.c

#include <math.h>
#include "AS3.h"

static AS3_Val c_speed_test(void* self, AS3_Val args)
{
    int i;
    double result;
    for( i=0; i < 1000000; i++ )
    {
        result = sin( 0.332 ) + cos( 0.123 ) + tan(0.333) * log(3);
    }
    return AS3_Number(result);
}

int main()
{
    AS3_Val method = AS3_Function( NULL, c_speed_test );
    AS3_Val result = AS3_Object( "c_speed_test: AS3ValType", method );
    AS3_Release( method );
    AS3_LibInit( result );
    return 0;
}

 

2. AlchemySpeedTest.as

package {
    import cmodule.speedtest.CLibInit;

    import flash.display.Sprite;
    import flash.display.StageAlign;
    import flash.display.StageScaleMode;
    import flash.text.TextField;
    import flash.text.TextFieldAutoSize;
    import flash.text.TextFormat;
    import flash.utils.getTimer;

    public class AlchemySpeedTest extends Sprite
    {
        public function AlchemySpeedTest()
        {
            stage.scaleMode = StageScaleMode.NO_SCALE;
            stage.align = StageAlign.TOP_LEFT;

            var loader:CLibInit = new CLibInit();
            var lib:Object = loader.init();
            var startTime:Number;

            startTime = getTimer();
            var cResult:String = "c returned value : " + lib.c_speed_test(null) + " delay time(ms) : " + (getTimer()-startTime);

            startTime = getTimer();
            var asResult:String = "as3 returned value : " + as3_speed_test() + " delay time(ms) : " + (getTimer()-startTime);

            var textField:TextField = new TextField();
            textField.text = cResult + "\n" + asResult;
            textField.width = 500;
            textField.autoSize = TextFieldAutoSize.LEFT;
            textField.wordWrap = true;
            textField.defaultTextFormat = new TextFormat( null, 12 );
            addChild(textField);

        }
        public function as3_speed_test():Number
        {
            var i:int;
            var result:Number;
            //var sin:Function = Math.sin;
            //var cos:Function = Math.cos;
            for (i = 0; i < 1000000; i++)
            {
            result = Math.sin( 0.332 ) + Math.cos( 0.123 ) + Math.tan( 0.333 ) * Math.log(3);
            }
            return result;
        }
    }
}

 

speedtest.c를 아래처럼 Alchemy로 컴파일하고 만들어진 speedtest.swc를 AlchemySpeedTest.as와 함께 mxmlc로 컴파일 한다.

gcc speedtest.c –swc –o speedtest.swc
mxmlc.exe –library-path+=speedtest.swc –target-player=10.0.0 AlchemySpeedTest.as

아래는 위 프로그램을 시행한 결과이다.

c returned value : 1.6983678388082433 delay time(ms) : 559
as3 returned value : 1.6983678388082433 delay time(ms) : 694

이 결과는 의외의 결과이다. C와 ActionScript 3.0과 같은 수행속도를 보였기 때문이다. 하지만 이 결과는 C코드를 컴파일 할 때 최적화하지 않았기 때문이다. 아래처럼 –03 –Wall 옵션을 넣고 다시 수행해보자. -O3는 최적화 옵션이고 –Wall(또는 –W)는 모든 경고를 출력하도록 한다.

gcc speedtest.c –03 –Wall –swc –o speedtest.swc
mxmlc.exe –library-path+=speedtest.swc –target-player=10.0.0 AlchemySpeedTest.as

컴파일한 SWF파일을 실행한 결과는 다음과 같다.

c returned value : 1.6983678388082433 delay time(ms) : 1
as3 returned value : 1.6983678388082433 delay time(ms) : 601

 

결론

 

위 실험 결과를 통해 Alchemy를 이용해 C/C++의 수행속도를 잘 활용하면 좋다는 것을 알 수 있었다. 가령, ActionScript 3.0으로 구동 시에 많은 부하가 있을 가능성이 있는 부분을 C로 만들어 Alchemy를 통해 최적화된 SWC로 라이브러리화 해서 사용한다면 여러분의 Flash/Flex/AIR 애플리케이션의 속도를 크게 향상시킬 수 있다. 구체적으로 Audio/Video, 데이터 형식 변환, 데이터 조작, XML 분석 및 암호화 기능, 물리 시뮬레이션등이 들어가는 코드에서 포퍼먼스 향상을 기대할 수 있겠다.

아래는 Alchemy가 C/C++코드를 ActionScript 3.0 코드로 완벽하게 변경하는가에 대한 의견이다.

(글쓴이 의견)

어떤 분은 Alchemy로 SWF를 만들어준다고 해서 C/C++코드가 전부 ActionScript 3.0으로 변환될 것이다라는 생각을 가질 수 있다. 하지만 실험 결과만 가지고 볼 때 틀리다는 것을 유추할 수 있다. Alchemy는 C/C++ 코드를 AVM2 환경에서 동작하도록 만들되 ActionScript 3.0과 함께 사용할 수 있도록 만들어준다. 즉 C/C++를 적절하게 변경하고 ActionScript 3.0과 통신할 수 있는 통로구를 마련해주는 것이 Alchemy의 목적이다. 만약 ActionScript 3.0으로만 변경되는 것이라면 빠른 수행속도를 기대하기 어려울 것이다.

(양병규님 의견)

컴파일러에 대해서 조금 관심을 가져보시면 알 수 있을텐데요…
음… 뭐랄까…
그 최적화라는 것이 불필요한 일은 안하고 같은 기능이라면 더 빠른 기능으로 대치하고.. 그런일을 하는 것이 컴파일러의 최적화인데요..
제가 보기에는
for( i=0; i < 1000000; i++ )
{
result = sin( 0.332 ) + cos( 0.123 ) + tan(0.333) * log(3);
}
이 부분이.. 최적화를 하면 루프를 1000000번 돌지 않고 한방에 끝낼것같습니다. 최적화알고리즘중에서 루프문안에서의 내용이 반복을 해도 변화가 없는 경우에는 루프를 한방에 끝내도록 하는 알고리즘이 있습니다. 이 예가 그런 예일것 같은데요..

암튼.. ActionScript에는 그런 최적화가 없는데 이미 오랜 역사동안 만들어진 C/C++언어의 최적화 기술이 적용되면 분명히 나은 결과를 보일 것 으로 예상됩니다. ^^;(물론 코딩하는 사람의 실력이 좋을 수록 최적화의 효과가 떨어지겠지만)

그리고..
저는 아무리 봐도 C/C++로 코딩한 것이 결국 몽땅 ActionScript로 만들어지는 것이 맞는 것 같습니다. SWF에는 ActionScript 이 외에 다른 실행코드는 존재하지 않습니다. 최종적으로 만들어진 결과가 *.SWF(*.SWC)이지 않습니까? SWF File Format Specification Version 10 문서 278페이지를 다 훑어봐도 ActionScript 이외에는 실행코드가 없습니다. 머.. DLL을 임포트한다거나 별도의 실행코드용 외부 라이브러리가 있다거나… 그런건 전혀 없습니다.

malloc 함수 같은 경우의 예를 들어보면 ActionScript에는 malloc과 동일한 역할을 하는 어셈블명령은 없습니다. 하지만 ActionInitArray와 같이 긴 변수를 사용할 수 있는 명령으로 ‘구현’은 할 수 있을겁니다. 아마도 그런 방법으로 구현되지 않았나싶습니다.

어쨋든 Alchemy는 C/C++을 100% ActionScript로 변환해 주는게 맞고.. 함수사용, 변수사용, 최적화, 수학함수의 구현, 각종 기초 알고리즘등 기초적인 부분에서 훨씬 우월하기 때문에 좋은 효과를 나타내고 있는 것으로 생각됩니다.

시간이 나면 Alchemy에서 만들어진 SWF 파일을 분석해 보면 아주 좋은 공부가 될것같습니다. ^^;

Alchemy가 유용한 것은 C/C++ 코드를 ActionScript 3.0와 함께 쉽게 사용할 수 있게끔 해주는 것과 C/C++자체가 가지는 빠른 수행속도를 Flash 컨텐츠에서 이용할 수 있는 것으로 생각한다. Alchemy가 앞으로 사용 편의성 향상과 여러 환경에서 문제없이 개발할 수 있도록 개선된다면 Adobe RIA기술이 한 단계 업그레이드 될 것이라 생각한다.

 

한가지 주의할 사항은 전부 C/C++로 만드는 것은 좋지 못하다. Alchemy를 적용하기에 앞서 본문에서 실험한 것과 같은 방법으로 여러가지 수행 테스트를 해보고 순수하게 ActionScript 3.0으로 한 것보다 큰 포퍼먼스를 기대할 수 있다고 판단했을 때 적용하는 것이 좋다. 때로는 어떤 코드냐에 따라 별로 큰 차이가 없을 수 있기 때문이다.

국내에 Alchemy를 응용한 많은 예제와 애플리케이션들이 나오길 바란다.

 

참고할 사이트

 

+ Recent posts