BLOG main image
Category (342)
MySpace (89)
Astronomy (50)
Development (178)
Drum (25)
linux에서 subversion설정
누리에 없을 자그마한 자국
살라딘의 생각
saladin's me2DAY
3D Avata - BuddyPoke
기찬 개발이야기
[FLEX] ANT로 ASDOC 사용하기
THLIFE.net
Flash10 대응 Textcube 1.7.5.1..
텍스트큐브 공지사항
«   2008년 11월   »
            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            
325650 Visitors up to today!
Today 150 hit, Yesterday 963 hit
/Development/Flex/AIR 관련글 보기 2008년 04월 01일 11시 01분

많은 기능이 포함되어 있는 플랙스 프로그램을 만들면 가장 문제점이 바로  프로그램 크기 문제이다.

앞서 말했던 프로그램 크기를 줄이기 위해 몇가지 팁을 이용해보는 것도 좋지만
좀 더 확실하게 프로그램 크기를 줄일 수 있는 방법은 바로 모듈화하는 것이다.

Flex에서 모듈화하는 방법중 내가 아는 2가지를 소개하도록 하겠다.

1. RSL 을 이용하자.
RSL이란 Runtime Shared Library 의 약어이다.
RSL을 사용하는 가장 큰 이유는 Main Application의 용량을 줄이면서 모듈화하는데 있다.


사용자 삽입 이미지


위 그림을 보자. 왼쪽은 각각의 Application에 같은 Library가 포함되어 있다. 전체적으로 보면 같은 Library가 2개가 포함된 것이므로 Flash Player 입장에서 전체용량은 커진다. 하지만 오른쪽과 같이 이 Library를 RSL로 만들어주고 각각의 Application에서 RSL를 로드해서 사용하는 방법을 쓴다면 Flash Player에서는 전처럼 Library를 중복사용하는 결과에서 벗어나게 되므로 실제로 1개의 Library를 사용하게 되어 그 만큼 용량이 줄어든다.

실무에서 이 RSL을 적용하면 용량문제를 해결하는데 큰 도움이 될 것이다.

이에 관련된 내용은 다행히도  [딴동네 동영상 강좌]를 통해 쉽게 공부해볼 수 있겠다.
딴동네 님의 블로그에 찾아가 RSL을 검색한 뒤 시간되실때 가볍게 공부하길 바란다.
분명 큰 도움이 있을것이다.


2. Module을 만들어 사용하자.

모듈을 만들어 사용하는 방법인데... 여기서 RSL과 무슨 차이인가 이해가 안될 수 있겠다.

RSL은 Main Application이 실행되는 시점에서 프로그래머가 다른 설정없이 로드하여 바로 프로그램상에 적용할 수 있다. 중요한 점은 로드 시점을 프로그래머가 조정하는 것이 아니다. RSL은 프로그램 실행하는 시점에 로드 된다. RSL은 여러 Application을 사용하는 과정에서 같은 기능이 반복되는 것을 방지하기 위해 RSL로 만들어 사용한다는 것에 큰 의미가 있는 것이다. 또 RSL을 사용하면 Flash Player가 한번 로드한 RSL을 클라이언트에 캐싱하므로 한번 로드되면 다음에는 다시 로드할 필요가 없다는 것이 큰 장점이다.

하지만 Module은 로드하고 실행하는 시점을 프로그래머가 정할 수 있다. 가령 쇼핑몰을 만든다고 할때 메인페이지, 카테고리, 상품리스트, 상품상세보기, 결제시스템, 게시판 등이 쇼핑몰 프로그램 실행 시점에 전부 로드해야한다면 메모리 낭비일 뿐 아니라 프로그램 실행하는데도 오랜 시간이 걸려 쇼핑몰을 이용하는 고객이 떠나게 하는 결정적인 요소가 될 수 있다. 이러한 문제를 해결하기 위해 각각의 모듈을 제어할 수 있도록 Main Application이 관장하도록 만들고 메인페이지, 카테고리, 상품리스트 등을 전부 모듈화 시켜 만들면 프로그램 크기가 줄어들고 효율적인 메모리를 사용할 수 있으며 프로그램 실행 시간을 단축시킬 수 있다.

모듈화를 해도 중복된 클래스를 사용하는 것 아니냐고 반문할 수 있다.
Flex는 컴파일시 중복된 코드를 방지하기 위해 모듈자체만 컴파일하는 Optimize기능이 추가되어 있다. 모듈 자체는 단독으로 실행할 수 없지만 Main Application에서 필요한 자원을 사용할 수 있으므로 중복된 코드 사용을 방지할 수 있다. 물론 이것은 모듈이 Main Application에 종속적이 될 수 있으므로 설계시 적절히 고려해서 사용하면 되겠다.

이처럼 RSL과 Module은 같은 모듈화 프로그래밍 방법이지만 그 쓰임새가 다르다. 그러므로 자신의 프로젝트에 적당한 것을 골라서 사용하면 되겠다.

그럼 Module을 어떻게 만드는가? 또 어떻게 사용하는가?
방법은 간단하다. SWF 형태로 모듈을 만들고 Main Application에서 Loader 클래스를 이용해 모듈을 로드하여 통신하면 되겠다. 이 방법은 사용하기 불편하고 프로그래머가 생각할 것이 너무 많다. 다행히 Flex에서는 Module에 관련된 SDK들을 제공하고 있다. 내부적으로는 Loader 클래스를 이용하지만 보다 Flex 다운 프로그래밍이 가능하도록 SDK를 제공하고 있다.

사용자 삽입 이미지

위 그림은 Module과 Application간에 관계에 대해 보여주고 있다.

ModuleManager와 ModuleLoader 클래스를 이용해 SWF로 만들어진 Module을 로드할 수 있다.
모듈은 Module 클래스를 이용해 만들면 된다.

이와 관련된 내용은 예전에 내가 작성한 글을 참고하거나 라이브 독을 참고한다.

[Flex,AIR]모듈(Module) 제작에 관련된 문서와 예제
[Creating Modular Applications - Adobe Live Docs]


마무리

모듈화 프로그래밍은 어떤 방법(RSL,Module)을 쓰던지 제대로된 프로그램 설계가 꼭 필요하다.
RSL, Module을 적당하게 잘 섞어서 튼튼한 기반의 프로그램을 만들면 쉬운 메모리 관리가 가능해지며 프로그램 용량을 크게 줄일 수 있다. 하지만 어설프게 모듈화를 적용하면 전체 프로젝트를 다시 한번 뒤짚어야 하는 결과를 초래할 수 있다.

[Flex, AIR] 프로그램 크기를 줄여보자 1 - 사용하지 않는 클래스는 사용하지 않도록 하자.
[Flex, AIR] 프로그램 크기를 줄여보자 2 - 폰트(font) 동적로드 또는 문자범위지정 

글쓴이 : 지돌스타(http://blog.jidolstar.com/310)
이 글의 관련글
Trackback Address :: http://blog.jidolstar.com/trackback/310
Tracked from 쎄미 | 2008년 05월 09일 00시 40분 | DEL
많은 기능이 포함되어 있는 플랙스 프로그램을 만들면 가장 문제점이 바로  프로그램 크기 문제이다. 앞서 말했던 프로그램 크기를 줄이기 위해 몇가지 팁을 이용해보는 것도 좋지만좀 더 확실하게 프로그램 크기를 줄일 수 있는 방법은 바로 모듈화하는 것이다.Flex에서 모듈화하는 방법중 내가 아는 2가지를 소개하도록 하겠다.1. RSL 을
성냥팔이 | 2008년 05월 28일 19시 36분 | PERMALINK | EDIT/DEL | REPLY
안녕 하세요.
항상 많은 도움 받고 있습니다.
module 라는 기능 아주 좋은것 같습니다.

그런데 module 안에 ViewStack 을 사용하게 되면 오류가 나네요.
계속 나는게 아니고 테스트로 계속 누르다 보면 오류가 나네요.

TypeError: Error #1034: 유형 강제 변환에 실패했습니다. mx.managers::HistoryManagerImpl@c86dc69을(를) mx.managers.IHistoryManager(으)로 변환할 수 없습니다.

좋은 기능 같은데.. 왜 이런지 힘들게 하네요 ㅠㅠ

"모두 해제" 버튼을 누르면 그 다음부터 아주 정상적으로 됩니다..
BlogIcon 지돌스타 | 2008년 07월 14일 13시 24분 | PERMALINK | EDIT/DEL
제가 Module안에 ViewStack을 사용해보지 않아서 딱히 정답을 말씀드리기는 어려울 것 같고요.

문제가 되는 부분을 예측해보자면...

ViewStack안에 올라가는 각각의 컨테이너들은
기본적으로 생성시점이 해당 View가 선택될때 처음 생성됩니다.

가령, ViewStack안에 Box가 3개 있으면 첫번째 Box만 생성됩니다. creationPolicy에 대해서 조사해보시면 이에 대해서 아실 있을것 같아요.

이 부분에서 문제가 되지 않을까 생각합니다.
장문영 | 2008년 07월 14일 11시 01분 | PERMALINK | EDIT/DEL | REPLY
퍼갈께요
BlogIcon 지돌스타 | 2008년 07월 14일 13시 25분 | PERMALINK | EDIT/DEL
출처는 꼭~ ^^
토끼 | 2008년 07월 28일 19시 34분 | PERMALINK | EDIT/DEL | REPLY
감사합니다.
ViewStack이 문제였군요..
저도 같은 문제가 있어 다행이 해결은 했내요. ㅎㅎ
원인을 모르니 당췌...이런 경우도 있다는걸 배웠습니다. ^^
유화늬 | 2008년 10월 16일 13시 57분 | PERMALINK | EDIT/DEL | REPLY
import mx.managers.IPopUpManager;
import mx.managers.IHistoryManager;

private var iPopUpManager:IPopUpManager;
private var iHistoryManager :IHistoryManager

로 해결했습니다 ㅎ
BlogIcon 지돌스타 | 2008년 10월 16일 19시 40분 | PERMALINK | EDIT/DEL
어느에 대한 글이죠? ^^
BlogIcon 지돌스타 | 2008년 11월 06일 04시 02분 | PERMALINK | EDIT/DEL
ViewStack을 사용한 Module 로드시 문제가 되는군요. ㅡㅡ;
저렇게하면 해결된다는 참 이상하네....
http://ddakker.tistory.com/31
Name
Password
Homepage
Secret