Articles‎ > ‎

GWT와 Deferred Binding

posted Jul 14, 2009, 8:46 AM by Sundew Shin   [ updated Mar 15, 2012, 8:29 AM ]

시작 하는 글

오늘, 07/15/09, Google Web Toolkit팀이 GWT 1.7을 공식 발표 했다.
특징적인 Update는 우선, IE8, Firefox3.5 Safari4 웹브라우져들의 지원이다.
공식 설명에 따르면, 기본적으로 지원 웹브라우져 확장 이 외에 v1.6과 크게 다르지 않지만, 이 번 배포본이, 1.65가 되지 않고 1.7이 된 가장 큰 이유는, 'Deferred Binding'의 채용으로 라이브러리 차원에서 큰 변화를 맞이 했기 때문이라는 설명이다.

Cross-browser Platform

Cross-browser Platform, 즉, 웹브라우져의 종류를 막론하고 실행 되는 웹어플리케이션을 위한 개발플랫폼을 구현하는 방식은 궁극적으로 두가지이다.

  1. 대부분의 웹브라우져가 동일한 동작 특성을 보이는 함수/기능들만을 골라 사용 해서 만들거나, 아니면,
  2. 애시당초 웹브라우져간의 차이를 인정하고 브라우져-특화 된 함수들을 구현하는 방식이다.

필자가 주로 'Browser-neutral'이라는 표현과 함께 밀어 온 이 1번 방식의 대표적인 예는 JSON (Javascript Object Notation) Parser 이고, Wednus Platform도 이에 해당 한다. 이 둘의 코드 구조를 살펴 보면, 거의 대부분이 범용적인 메소드만을 사용해서 목적을 달성함을 알수 있다. 이 방식은, 철저한 표준중심의 단일화 된 코드베이스를 갖는다는 장점이 있는 반면, 종종 특정 브라우져에서만 동작하는 최신의 다양한 기능들을 채용 하는 것이 원칙적으로 어렵다. (예: <canvas>, <video>, etc.)

대부분의 야심찬 Web2.0 플렛폼/라이브러리들이 그러하듯, GWT가 채택한 방식은 2번에 해당한다.
즉, GWT로 어플리케이션을 만들어 컴파일 하면, 기능은 같지만, IE, Firefox, Safari, 등 브라우져 Vendor별, 뿐만아니라, IE6, IE7, IE8 등 브라우져 Version별, 여기 다시, 사용 언어별로 특화 된, (browser-, version-, language-specific) 기능함수들이 몽땅 만들어 진다.
이 방식의 가장 큰 장점은 극소수의 옛날 웹브라우져 지원을 위해 어플리케이션 기능을 '하향평준화'하는 것을 피할 수 있다는 것이다. 하지만 역시 단점은 똑같은 동작을 하는 함수가 앞에서와 같이 브라우져 벤더/버젼, 또 사용자 언어별로 중복되어 제작/배포 되므로 어플리케이션의 배포크기를 크게 하고 초기 로딩 속도를 떨어뜨린다는 점이다.

Deferred Binding

위 2번 방식에서의 이와 같은 단점을 극복하고자 나온 대안이 바로 Deferred Binding이다. Deferred Binding은 '차별화한 묶음', 즉, '선택적 배포'를 의미 하는 프로그램 기법이다.
연결이 강한 Server-Client모델 어플리케이션에서 주로 적용 해 온 Dynamic Binding의 GWT식 적용이라고 할 수 있겠다. 표준 자바에서 Dynamic Binding은 상이성이 있는 사용자의 실행환경 각각에 따라 (특화된 내용을 담고 있는) 필요한 서브클레스 정의를 선택적으로 런타임중에 불러 들여서 (dynamic classloading) 필요한 개체(instance)를 생성 하여 사용하는 방식을 말한다.
GWT의 Deferred Binding은, 간단히 말 해, 서버가 사용자(Client)  환경정보를 알아 낸 뒤, 그에 맞는 함수나 언어모듈들만을 선택적으로 로딩/배포하는 것이다. 즉, 사용자가 Firefox로 사이트에 접속 해 왔을 때, IE나 Safari-특화된 함수들은 모두 무시하고 Firefox에만 해당되는 코드들에 선택적으로(deferred) 연결(binding) 시켜줌으로 해서, 1번방식의 작은 배포크기와 빠른 로딩속도, 2번방식의 최신 기능의 자유로운 활용, 이 두 방식의 장점들만을 모두 승계 받도록 하는 것이 GWT의 선택적 배포의 최종적인 목적인 것이다.

맺는 글

간단히 Deferred Binding의 개념에 대해서 알아 봤다.
기회가 된다면 쉽게 확인 가능한 예제를 하나 준비 했으면 하는 바램을 안으며 이 글은 여기서 끝 마치려 한다.

참고로 Deferred Binding을 구현 하기 위한 기술 구체적인 내용들은 다음에서 확인 해 보기 바란다:


[계속]
(v1.1)


References

  1. What's New in GWT 1.7?Google Web Toolkit, Google

Comments