동적으로 ajax 통신할 iframe 생성하기 by 옷장수

해결하려는 문제

comet의 기법 중 ajax 스트리밍방식을 이용한 코드를 작성해야 했는데요. comet을 사용하여 접속한 시간동안에는 서버로부터 데이타를 지속적으로 받기 때문에 연결을 계속 유지해야 했습니다. 따라서, ajax 통신할 서버가 여러대가 존재하게 되었고 이를 여러 도메인으로 나누어서 접속하도록 설계가 되었습니다.


구현해야 하는 기능

  1. 동적으로 접속할 서버를 할당 받아야 합니다. 
  2. ajax 통신을 하기 위해서는 same origin policy를 맞춰줘야 합니다. 

사용한 해결책

  1. 분배 서버와 통신을 통해서 접속할 서버를 할당받고
  2. iframe을 생성해서 통신할 서버와 same origin policy를 맞춰준 후
통신을 하게 됩니다. 


개발시 발생한 이슈

  • iframe 페이지와 부모 페이지간 호출이 가능하도록 domain을 맞춰줘야 했습니다.

  • iframe을 사용하기 때문에 부모 페이지와의 통신을 위한 규약을 정해야 했습니다. 
    (parent.methodName() 관련 메소드를 호출 할 수 있지만 global 변수가 되기 때문에 주의가 필요했습니다.)

  • iframe 페이지에서 변경되는 상태가 부모 페이지의 프로그램의 상태와 연동되도록 하는 이슈가 있었습니다. 
    (iframe 페이지에서 연결 종료시 재연결을 하기 위해서 iframe을 초기화한 후 재생성하게 되는데 이 때 iframe안에 정의 하였던 상태값이 초기화되는 이슈가 있었습니다.)

기타

ajax를 이용한 comet 통신을 위해서 사용한 방법입니다. 다른 도메인의 서버와 통신을 원한다면 jsonp를 이용하는 방법을 추천드립니다.