태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.

[FP10] FileReference는 어떻게 달라졌을까?

RIA/Flash 2008/10/16 00:20 Posted by 희희덕
안녕하세요 : )

정말 오랫만에 글을 남기는것 같죠? 이녀석 예전처럼 게을러진거아냐? ㅋㅋ 라고 생각하셨던 분들도 계셨을것 같은데, 사실 이런 무시무시한 경고때문에, 글을 차곡차곡써가면서 여러분께 공개는 하지 못하고 있었습니다... (흑흑)

'임금님귀는 당나귀 귀' 라고 아무리 좋고 재미있는 얘기더라도, 떠들고 다니기 좋아하는 저로써는 입이 간질간질해서 참지못할 지경이더군요... ㅠㅠ

그래도! 16일부터는 여러분들과 함께, FP10에선 어떤 API들이 추가되었고, 어떤 변화사항이 있는지, 다루어 볼수 있게되어, 매우 즐겁게 생각하고 있습니다.

앞으로도 제 블로그에 계속 연재할 예정이니, 많이 많이 찾아주세요..
(방문자 늘리기 작전인가 -_-;;)
Flash Player10이 출시된 만큼 여러분께 유익한 정보가 될수 있었으면.... 합니다!

자 그럼 오늘의 주제인 Filerefrence는 어떻게 달라졌을까요?
우선, FileReference API에 대해 소개하자면, 이 API는 로컬의 파일을 접근하고, 업로드 하거나 다운로드 하는데 사용되는 API입니다.


변경사항

Flash Player10에서 FileReference의 변경사항입니다.

1. 사용자의 로컬 파일에 접근이 가능합니다(load(), save() 메서드 추가)
2. 보안샌드박스의 변경사항이 있습니다.

일단 제일 눈에 띄는게 사용자의 로컬 파일에 접근이 가능하다?! 는 점인데, "어라? 그럼 로컬 파일들을 불러올수 있다는건가요? 어디까지 접근할수 있나요?" 라고 궁금해 하시는분들이 많으실것 같습니다. 그 내용은 아래에서 ㅋ


load(), save() 메서드

Filerefrence에는 load(), save()라는 메서드가 추가되었습니다.  두 메서드는 로컬파일에 접근하여, 파일을 읽거나 쓰는데 활용할 수 있습니다.

근데, '어? 파일을 읽고 쓰고 하면 사용자의 컴퓨터에 위해를 줄수 있지 않나요' 라고 생각하시는 분들이 많으실것 같습니다.

하지만 load(). save() 메서드의 경우 다이렉트로 호출할수 없으며, 사용자가 browse창에서 직접 파일은 선택해야 호출할수 있는 메서드 입니다.


위의 소스코드는 파일을 불러오는(load) 예입니다. 파일을 선택하고(browse), 파일을 불러오는(load) 구조로 로컬 파일에 접근할 수 있습니다.
load() 메서드의 경우 파일의 경로 지정없이 바로 메서드로 호출하게 되며, 파일의 스트림, 파일명, 파일크기등의 자료는 이벤트 데이터로 불러올 수 있습니다.


위의 소스코드는 파일을 저장하는(save) 예입니다.
save() 메서드의 경우 파라미터에 저장될 파일의 내용, 파일의 이름을 지정하게 되면, 자동으로 browse 창이 뜨게 됩니다.
한가지 주의할점은, 기존 파일에 중복해서 저장하게 될경우 ioerror가 발생하게 됩니다.


보안샌드박스

Flash Player10에서 기존 Filerefrence와, 또 새로 추가되는 매서드에 대한 보안 샌드박스가 강화되어 적용되었습니다.

파일선택과 다운로드시 사용자의 직접적인 인터렉션을 필요로 합니다.
Filerefrence.browse를 통해 사용자의 로컬의 파일을 찾는 창을 띄울수 있고, Filerefrence.download를 통해 파일을 내려 받을수 있습니다.
두 메서드의 경우 종전엔 사용자의 UI 인터렉션을 필요로 하지 않았습니다만, Flash 10에서는 사용자가 직접 UI인터렉션을 취해야 작동하게 됩니다.

로컬파일을 불러오고 저장할때 사용자의 직접적인 인터렉션을 필요로 합니다.
Flash 10에서는 SWF파일에서 사용자 로컬의 파일을 읽어오고 또 저장할 수 있습니다. 다만, 이 메서드들은 사용자가 파일 선택창에서 직접 파일이나 경로를 선택할때만 가능합니다.

따라서, 현재 UI를 HTML로 꾸며놓고, 플래시와 JS의 통신으로 파일 업로드가 구현되어있는 티스토리나, 기타 사이트들은 사용자의 직접적인 UI인터렉션으로 browse()메서드가 호출되지 않았기 때문에, 샌드박스 오류가 발생하게 됩니다.

Flash Player10이 출시된 만큼, 보안샌드박스의 변화를 빨리 파악해서, 사용자가 불편을 입지 않도록 신속히 대응하는것이 좋겠습니다.



기대분야

1. 이미지 편집기

많은 디지털 멀티미디어 기기가 보편화 되고, 또 1인미디어가 대중화됨에 따라, 웹에서 이런 멀티미디어 자료들을 손쉽게 편집할수 있는것에 대한 사용자의 요구가 날로 늘어갔습니다.

대부분의 업체는, 이를 해결하기 위해 Active X방식으로 이미지 편집기를 만들어 제공해 왔으나, Active X방식의 애플리케이션은 크로싱 플랫폼을 지원하지 않는다는 단점이 있습니다.

그래서 이를 해결하기 위해, 플래시를 통한 이미지 편집기가 스타플(http://starpl.com), 싸이월드 블로그(http://cyworld.com)에서 개발되어 사용중입니다.
 

다만, 현재까지의 flash의 Filerefrence는 파일을 선택하고, 그 파일을 업로드하거나, 다운로드 하는데에 한정되어 있었습니다.

따라서 이미지를 편집하기전 해당 이미지를 불러오기 위해, 임시 서버에 업로드 해 두고, 업로드된 주소를 플래시 상에 불러와서 작업을 해야 합니다.

이 방법의 경우, 불필요한 자원을 추가로 낭비한다는 문제점도 있지만, 최근 대부분의 멀티미디어 화상 이미지가 고 해상화 됨에 따라 파일 용량이 커지고, 또 해외지역이나 네트워크 지역이 느린 환경에선 업로드와 또 플래시에서 이미지로 불러오는데 상당한 시간 지연이 발생하게 됩니다.

하지만 Flash 10의 Filerefrence에는 load() 메서드가 추가되어 데스크탑 내의 로컬 자원에도 엑세스 할 수 있습니다. 따라서, 불필요한 자원을 낭비할 일이 줄게 되며, 또 고 해상도의 이미지를 처리하거나, 네트워크 환경이 느린 사용자에서도 지연 없이 빠르게 이미지를 불러올수 있습니다.

또, "Flash에서는 로컬 자원만 불러와 이미지 편집→서버업로드"로 프로그램의 구조적 장점도 얻을수 있습니다.


2. 대용량 파일의 안정적 전송

보통 로컬에 있는 파일을 플래시로 서버에 전송할때엔, Filerefrence의 upload는 HTTP를 통해 전송하게 됩니다.
작은 용량일 경우엔 HTTP로의 전송은 큰 무리가 없지만, 대용량 파일의 경우, 해당 서버에 과부화가 발생하거나, 중간에 연결이 끊기는 등의 문제가 발생할 수 있습니다.

그래서 대부분의 메일 서비스의 경우에도, 5mb이내의 작은 용량의 전송은 HTTP로 전송하지만, 대용량의 파일전송은 안정적인 서버와의 연결이 중요하기 때문에, Active X 컨트롤을 설치해 서버로 보내고 있습니다.

이 방법을 Flash에서 활용을 해보면 어떨까요?

이전의 Flash Player의 경우, 사용자가 파일을 선택하고, 업로드하고, 다운로드 받는등 아주 작은 부분에 대한 관여만 가능했지만, 이젠 로컬의 파일을 직접 불러와서 엑세스 할 수 있습니다.

또 Flash에서는 서버와 Socket을 주고 받을수 있는데 우리가 흔히 대용량 파일전송에 사용하는 FTP도 Socket를 통해 연결하게 됩니다.

따라서 FTP의 Socekt에 접근해서(policy-file을 설정하고, port도 1024이상으로 설정하고), 파일의 스트림을 FTP로 보내면 대용량 파일을 좀더 안정적인 전송하는게 가능하지 않을까요?


이외의 여러분들의 깜짝 놀랄만한 아이디어, 그리고 의견, 질문사항은 댓글로 남겨주세요!
크리에이티브 커먼즈 라이선스
Creative Commons License