원래는 게시판으로 만들까 하다가 시간이 오래 걸릴것 같아서 메모장 식으로 먼저 만들어 봤다 솔직히 이미 올려진 것과 비교했을때 실버라이트로 페이징 처리 하는것과 바인딩을 처리를 하는것을 추가하고 특별이 더 한것은 없는것 같다.

이미 올려진것과 같은 테이블을 사용하기 때문에 같은 결과물이 나올것이다. 그리고 DB 역시 MySql을 사용하여 Xml로 통신하게 처리하였다.


 

구상을 멋지게 했는데 결과는 이렇게 나왔다 ^^;;; 뭔가 너무 허접하게 나왔다.. 멋진 애니메이션과 화려한 효과를 원했건만.. 그래도 Mysql을 이용한것에 의의를 가져야 겠다.

DB를 이용해서 간단한 메모를 기록할수 있는 프로그램을 만들어 봤다. 일단 DB는 Mysql 을 이용하였다. 공식적으로 실버라이트는 Mysql을 이용하기 위해 어떤한 것도 제공은 해주지 않는다.(아닌가? 내가 못찾은건가?) 그래서 어떻게 하면 Mysql을 이용할수 있을까 하는 생각에서 MSsql 의 쿼리문 중에 for xml auto, elements 라는 쿼리문이 떠올랐다. MSsql에서 쿼리문 제일 마지막에 위의 명령어 문구를 사용하게 되면 테이블의 구조와 필트명에 따라 결과가 xml로 나오게 된다.. Mysql에서도 해당 쿼리문을 사용할수 있다면 어느정도 이용은 가능할수 있을것 같았다. 근데 웬걸 Mysql에서는 저런 쿼리문은 사용되지 않았다.

어째던 그런 명령문은 사용되지 않았기 때문에 php로 db를 읽을때 테이블명, 필드명을 추출해서 XML 출력을 해줄수 있게 만들었다. 결국 php페이지를 읽을때 Sql문을 파라미터 값에다 넘기고 그 결과값을 xml로 받을수 있게 만들었다. 실버라이트에서는 xml을 읽는 것은 쉽기때문에..

이렇게 db를 읽게 하여 Mysql을 이용가능 하게 하였다. DB읽기가 어느정도 되었기때문에 간단한 메모기록 프로그램을 만들어 보았다. 프로그램명은 SilverBoard!!



로딩 될때 가장 최근쓴글 6개가 읽여진다. 어째던 Mysql을 이용하여 만들었다는 것에 의의를 두고 다음번엔 실버라이틀 게시판을 만들어봐야겠다. 물론 Mysql을 이용해서 좀더 에니메이션이 들어간 작품으로.... 썩 만족스럽진 않다.

실버라이트를 이용하여 rss읽는것 자체는 굉장히 쉬운일이다. 그렇지만 다른 호스트의 rss을 읽는것은 쉽게 할수 없는 일이다. 이유인 즉은 실버라이트에서 크로스도메인 접속시 해당 도메인에 대한 권한파일을 확인후 권한이 없다거나 권한파일 자체가 없다면 접근을 할수가 없다. 우리 회사도 요즘들어 굉장히 많은 인젝션 공격이 들어오는 걸로 봐선 어떻게 보면 당연하다고 볼수는 있지만..... rss뿐만 아니라 이미지라던가 웹페이지 등등등 그 어떠한 자료도 권한이 없다면 순수 실버라이트만 가지고 사용할수 없게 된다.

그렇다면 뭐야?? 내가 원하는 것은 다른 도메인의 rss일뿐 내가 내블로그 rss를 받아봤자 뭐하겠냐구 ^^;; 그리고 난 a 라는 사이트의 이미지 잠깐 쓰고만 싶을 뿐인데 그사이트에서 얼씨구나 좋와요 하고 권한 파일을 만들어 줄리는 없을거잖아 ^^;; 그렇담 이렇게 이용할수 있지 않을까? 닷넷이라면 내 도메인에서 HttpWebRequest 객체를 이용해 내가 읽고 싶은 URL을 읽은 다음에 다시 뿌려준다면 도메인이 다른 사이트라도 내 도메인에서 뿌려주는것처럼 실버라이트런타임을 속일수 있게 되고 그럼 이용이 가능할 것이다.

그래서 난 당장 내 블로그에서 이용 가능하게 해보려고 시도 했다. 그런데 또하나의 문제점이 있었다. 내 블로그는 PHP 서비스로 이용되는 블로그이다. 그렇기 때문에 난 PHP용 HttpWebRequest 객체와 같은 것을 이용해 사용해야 한다 ^^; 그래서 찾아낸 것이 PHP용 WebAgent인 snoopy 라는 것을 찾았다. snoopy 클래스를 이용하면 손쉽게 내가 원하는 페이지를 읽어 올수 있다.  snoopy 의 소스는

http://snoopy.sourceforge.net/

여기서 다운 받을수 있다.

여기서 snoopy 클래스를 이용시 팁이라고 한다면 snoopy 클래스에서 agent 속성을 설정하는 부분이 있는데
Snoopy v1.2.4 이라고 설정이 되있다. 그런데 이렇게 agent속성이 설정되 있게되면 이용에 제한이 돼있는 사이트가 있다. 아마도 사이트 긁는 검색엔진이라던지 봇을 막기위해 차단이 되는데 agent 속성을 IE의 agent 값과 같게 한다면 접근이 불가능한 사이트라도 가능해 진다. 물론 100% 차단 해제된다는 장담은 못함!

이렇게 snoopy 클래스를 이용하여 크로스 도메인 문제를 해결하는 URL을 만들었다.
이렇게 http://mydomain/get.php?target=http://targetdomain/rss 페이지를 요청하면 http://targetdomain/rss 의rss를 마치 내 도메인에서 뿌려주는 것처럼.

소스보기

어설프지만 위와 같이 실버라이트 만들어 보았다. ^^; ㅎㅎ 해보니 왠만한 rss는 잘긁어 오는것 같다. 아래는 구현한 예제이다.



이상 rss 읽어오기 끗~~~~~~~

vb 또는 asp에서 다른 웹페이지를 호출하고 싶어질때가 있다.
물론 C#과 같은 언어는 httpRequest 와 같은 객체가 있어 손쉽게 받을수 있지만
vb or asp에서는 WinHttp.WinHttpRequest.5.1 의 객체를 생성하여 사용할수 있다.

GET 방식으로 페이지를 호출할경우

Function getSiteSourceGet( siteURL, params )
 Set httpObj = Server.CreateObject("WinHttp.WinHttpRequest.5.1")
 httpObj.open "GET", siteURL & "?" & params, False
 
 httpObj.Send()
 httpObj.WaitForResponse
 If httpObj.Status = "200" Then
  getSiteSourceGet = httpObj.ResponseText
 Else
  getSiteSourceGet = null
 End If
End Function



 

POST 방식으로 페이지를 호출할 경우

Function getSiteSourcePost( siteURL, params )
 Set httpObj = Server.CreateObject("WinHttp.WinHttpRequest.5.1")
 httpObj.open "POST" , siteURL, False
 httpObj.SetRequestHeader "Content-Type", "application/x-www-form-urlencoded"
 '포스트 방식시 위의 라인을 추가해 주어야 한다.
 
 httpObj.Send params
 '포스트의 파라미터는 Send 호출시 같이 값을 넘겨 주어야 한다.
 httpObj.WaitForResponse
 If httpObj.Status = "200" Then
  getSiteSourcePost = httpObj.ResponseText
 Else
  getSiteSourcePost = null
 End If
End Function



POST를 이용할시 약간 수정행 주어야 할것이 있는데 Content-Type을 위와 같이 변경해주어야 하며 파라미터를 GET방식과는 다르게 Send 시 값을 넘겨주어야 파라미터값들이 전달되다.

위와 같이 함수를 만들어 사용하면 될것이다.

추가된글 파라미터를 넘길때 GET 방식이던 POST 방식이던 URLEncode 를 해주어야 한다. 그것때문에 한참 헤맸다. 그리고 VB Script로 호출시에는 Server 객체를 사용할수 없음으로 URLEncode 함수를 직접 만들어 사용해야 했다. URLEncode 함수는 쉽게 구할수 있다.

윈도우 NT기반의 OS에서는 내가 원하는 프로그램을 Service로 돌리고 싶을때 사용하는 프로그램 이다.




위 프로그램을 다운 받은 후 사용하면 된다

사용법

서비스 설치시 : cygrunsrv --install [사용하고 싶은 서비스 명] -p [돌리고 싶은 프로그램의  절대경로]
서비스 시작시 : net start [등록된 서비스 명]
서비스 종료시 : net stop [등록된 서비스 명]
서비스 삭제시 : cygrunsrv --remove [등록된 서비스 명]

Flex 2007/04/16 23:51

Flex 파일 업로드

이번 졸업 작품으로 인터넷 디스크를 만들기로 하였다. 그런데 기존에 나온 인터넷 디스크와는 차별화 되게 만들려고 하는 중이다. 무엇을 차별되게 만들것이냐... 그것은 기존의 ActiveX의 기술을 사용하지 않고, Any where 로써 어느 pc나 인터넷 익스 플로러만 된다면 다운을 받을 수 있는 그런 인터넷 디스크를 만들어 볼려고 하였다. ^^;; 포부는 참 크다. ㅋㅋ

그래서 처음 생각 해 낸것이 Ajax였다. 요새 한창 뜨고 있는 Ajax를 사용 한다면 파일 업로드를 쉽게 구현 할 수 있고 어는 인터넷 브라우저나 쉽게 받을 수 있다고 생각을 난 했었다. 그런데 그것은 나만의 오산 이였다. ㅡ.ㅡ; 왜 그렇냐 하면 Ajax 기술을 어차피 자바 스크립트를 사용하는 것인데, 자바 스크립트 자체가 파일 읽기 쓰기가 미약 하다고 할 수 있었다. (검색만 조금 해봐도 안되는 이유가 참 쉽게 나온다.) 구현은 물론 어떻게 든 할 수는 있다는 얘기를 듣기는 했지만...

내가 생각 했던 방향으로 흘러 가지 못해서 고민에 빠졌었다. 그런데 문득 Flex를 사용 해보라는 주변 얘기도 있고,, 해서 Flex로 방향을 돌렸다. 요새 한참 주가를 올리고 있는 이 Flex스라는 놈 ^^;; 한마디로 Flash 를 이용해 프로그램을 한다는 것이다.

그렇다. Flex는 Flash player 를 사용 하는데, 윈도우 익스플로러는 물론, X-Window 의 파이어 폭스, 심지어 맥 OS의 사파리에서까지 설치가 되 있다. 이놈을 이용한다면, 우리가 생각 했던 Any where의 성격을 가질수 있을 것이다. 그렇다면 우리 프로젝트의 염원인 파일 업로드 기능이 가능할 것이다.

일단 먼저 Flash 나 Flex를 사용한 프로그램을 찾아 봤는데 나의 블로그 옆의 링크에 보면 이미지 편집 사이트가 플랙스로 만든 사이트 이다. 그곳에서 이미지를 올릴때 아무런 컴포넌트 없이 파일을 올릴 수 있게 되어 있다. 이런 기능이라면 구현 할수 있을 것이라 말이 된다. 특정 운영체제에 독립적인 인터넷 디스크가 아닌 멀티 운영체제에서도 가능한...

그래서 일단 만들기 전에 이놈을 한번 알아 봐야 하지 않을까 하는 생각에서 관련 소스를 뒤져 봤다. 그런데 쉽게도 찾을수 있었다. 파일 업로드 부분의 소스를. 다행이도 쉽게 업로드 하는 부분이 있었다. 단지 파일 전송 현황이나, 그런 부분은 추가 해야 하겠지만, 기본적인 기능을 수행할 수 있었다.

그런데 단지 대용량의 파일은 좀더 고민을 해 보아야 할 것 같다.

일단 톰캣 프로그램을 설치 한다. 난 쉽게 하기 위해서 톰캣을 C:\에 설치 하였다. 그럼 다음과 같은 설치 구조가 된다.


 

User inserted image

그 후 첨부된 소스 파일에 java 부분을 C:\Tomcat 5.0\webapps 의 경로에 복사 한다. 복사 할때 폴더 이름을 java에서 upload로 바꾸어 준다. 그런 다음 Tomcat을 재 시작 시킨다음 다음 주소로 들어가 보자.

http://localhost:8080/upload/upload

위의 주소로 들어가 보게 되면 다음과 같은 화면이 나오게 될 것이다.


User inserted image


위와 같은 화면이 보이게 된다면, 이제 파일을 받을 서블릿은 준비가 완료된 것이다. 그럼 이제 flex 폴더의 mxml의 파일을 설정 해보자. 물론 플렉스 데이터 서비스 프로그램을 돌려 서비스할 수도 있겠지만... 쉽게 플랙스 빌더를 사용하였다. 플랙스 빌더를 사용 하여 새 응용 프로그램을 생성하고 소스에 mxml 을 붙여 넣은후 컴파일 하면 다음과 같이 창이 익스플로러 창이 보일 것이다.



 

빌드하기전 그대로 빌드 하지 말고 다음과 같은 수정 사항이 필요하다

proceedWithUpload 의 매서드에서
var urlRequest:URLRequest = new URLRequest(http://localhost:8080/upload);
                    file.upload(urlRequest,"FileData",false);
의 부분을
var urlRequest:URLRequest = new URLRequest(http://localhost:8080/upload/upload);
                    file.upload(urlRequest,"FileData",false);
로 변경해준후 컴파일 한다.



User inserted image

그런다음 파일 추가를 눌러 파일을 선택 하면 yes no 를 선택 하라고 할 것이다. 그런 다음 yes를 선택 하게 된다면 파일이 전송될 것이다. 전송된 파일의 확인은 톰캣의 폴더에서 확인 하면 전송된 파일의 목록을 볼수 있을 것이다.



User inserted image

업로드시 서블릿에서 지정 한 사이즈 보다 크게 되어, 다음과 같은 에러가 나게 된다. 서블릿의 사이즈를 크게 해주어야 에러가 나지 않을것이다...


User inserted image



div>