Cross-Domain 문제 해결방법에 대한 조사결과
AJAX를 살펴보면서 Cross-Domain 제한의 문제점에 봉착함.
Cross-Domain의 Pattern은 아래 3가지로 나눠볼 수 있음.
1. from one single domain to many targets
2. from many sources to one single target
3. from many sources to many targets.
지금 고민하는것은 2번항목임.
[지금까지 찾은 해결방법]
(1) Proxy Server 이용 : 최초 시도한 방법인데 이건 사실상 위 1번 항목에 해당하는것으로 적당하지 않고 또한 cookie나 session문제등이 있어서 몇번 사용해보다고 취소함.
(2) SignedJavaScript : Netscape계열에서만 되며 JavaScript에 대한 전자서명시 서명된 javascript는 cross-domain 제약을 극복하여 자유롭게 다른 사이트와 통신가능함. MSIE에서는 동작하지 않는다는 문제점이 있고 아직 테스트해보지 못함.
(3) Flash4AJAX : 지금까지 찾은 최상의 방법인데 ActiveX/Plugin을 사용하기는 하지만 광범위하게 배포된 Flash를 이용하여 구현함으로 Cross-Browser문제는 쉽게 극복가능함. 그러나 Flash에 대해서 잘 모르기 때문에 좀더 살펴보고 있음.
(4) JSON + WebServices : 야후 API에서 사용하고 있는데 Target서버에서 JSON Format으로 Output을 뿌려줘야하는 문제 있음. 아직 테스트 못함.
(5) ActiveX : 어떻게 보면 가장 손쉬운 방법인데 일단 하나 만들어 사용중이기는 하지만 Cross-Browser 문제해결에는 적절치 못함.
(6) Windows TrustedZone 등록 : Source Domain상의 유저가 해당 Source Domain을 Windows TrustedZone에 등록해버리면 어디든 나갈 수 있는데 사실 말이 안됨. 보안상 엄청 위험하기도함.
(7) IFrame 이용 : iframe이용하면 일단 AJAX Cross-Domain 문제는 해결되지만 frame간의 cross-domain 문제가 새롭게 대두됨. cross-domain cookie등 Security issue가 꾸준하게 제기되어온 사항임. 일단 target server로 Get Method로 데이터를 넘기기만 하는 형태로는 쓸만함. (결과수신은 아주 어려움)
[ 최종 선택한 방법 : JSON ]
JSON Format으로 결과 전달하고 Callback method로 해당 결과 수신하는 방법이 정답임.
우선 단점 : Request시 GET Method에 해당하는 정보만 전달가능하므로 정보전달 양이 한계가 있음. 그리고 미동기 통신이 안되는 문제점 있음.
그리고 장점 : 대용량 Response를 받을 수 있음. 사실상 브라우저 및 네트웍 성능에 달려 있음. 아무런 ActiveX나 Plugin이 필요치 않음. Cross-Browser 사실상 지원. JavaScript Tag가 먹히는지 여부 실제 확인 필요
(Concept)
1) Client에서 JSon Request URL 생성
2) Javascript createElement tag로 script 객체 생성
3) DOM에 해당 객체 추가하여 실제 반영. 객체추가시 즉각 Remote Server의 CGI/JSP/PHP 호출
4) Remote Server에서는 Request에 따른 업무 처리 후 결과를 callback method로 둘러싼 JSON Format으로 생성하여 화면 송출
5) Browser에서는 결과가 실제로는 script tag 내에 위치하면서 callback method를 호출한것과 동일한 효과발생.
6) callback method내에서 필요한 client측의 업무 처리.
JSON은 AJAX 통신은 아님 사실상 Dynamic Script Creation에 해당되며 script creation시 Remote Server의 script를 불러오는 형태임.
실제 업무에서 JSON과 AJAX를 적절히 섞어 쓸 필요 있음.