Google Open API(?)에 AJAX Libraries API가 추가되었습니다. 저 제목을 보면 무슨 API인거 같나요? 전 service API가 아닌 JavaScript framework 같은걸 제공하나 했습니다.
쫌만 읽어보니 그게 아니더군여. 요즘 들어 가장 많이 사용되는 JavaScript Framework인 prototype, jQuery 등등을 google에서 제공하는 겁니다. 간단히 얘기해서 저 라이브러리들만 호스팅해주겠다는 겁니다. 예전에도 이런 서비스를 본 적이 있었는데… 속도가 괜찮을까? 혹은 안정성이 보장될까? 뭐 이런 얘기들 하면서 말았었는데… 그걸 Google이 하네요. 왠지 신뢰가 갈듯한 느낌이 듭니다.
지금은 jQuery, prototype, script.aculo.us, MooTools, dojo 이렇게 5가지를 제공하고 있고 각 라이브러리에 대한 url은 Developer’s Guide를 참조하심 되겠습니다.
각 라이브러리를 참조하는 방법은 단순하게 <script>의 src 속성에 해당 url을 적어줘도 되지만, Google AJAX API Loader를 이용하면 좀 더 편하게(?) 사용할 수 있습니다. 구체적인 사항은 Speed up access to your favorite frameworks via the AJAX Libraries API를 보심 되지만 장점을 간단하게 말씀드리면, 라이브러리의 versioning을 알아서 해 준다는 점(버전을 1.2로 명시한 경우 1.2 대의 버전들-1.2.4, 1.2.8- 중에서 가장 최신 버전을 로드해 줌)과 가능한 경우에는 몇가지 옵션을 제공해 준다는 점입니다.
음… 이제부터 performance와 관련된 내용입니다. 요 서비스를 이용하게 되면 성능상 몇 가지 장점을 얻을 수 있습니다. 물론 Google이 최소한 내 서버만큼의 bandwidth를 제공해준다는 가정하에서 말입니다(내 서버에 올려두는거보다 다운로드 속도가 느리다면… 뭐 별로).

CDN
Google의 CDN을 이용할 수 있습니다. Exceptional Performance의 두 번째 항목 Use a Content Delivery Network입니다. 그만큼 중요하겠죠. CDN은 클라이언트에서 가장 가까운 곳에서 다운로드 받을 수 있게 여러곳으로 리소스를 분산하여 속도를 높이기 위해 사용되는데, 그치만 미국에서 CDN 하나의 커버리지가 우리나라 규모보다 크다는… Google에서 제공해 줄 수 있는 bandwidth가 내 서버정도라면 울 나라에서는 큰 잇점은 아니지 싶습니다. 우리같은 경우는 IDC의 트래픽에 부하가 걸려 다른 서비스에 영향을 주지 않으려고 CDN을 쓰는 것으로 알고 있습니다.
Expire
Expire가 request 시점으로부터 1년으로 설정되어 있습니다. Exceptional Performance의 세 번째 항목 Add an Expires or a Cache-Control Header입니다. 제공되는 버전의 경우 변경 사항이 없기 때문에 – 변경이 있으면 버전이 틀려지겠죠? – 이 정도면 충분하리라 봅니다. 캐쉬 할경우 만기일을 어떻게 설정해야 하는지에 대해서는…–;;; 아직까지는 제 영역 밖의 문제인듯합니다. 암튼… 제가 직접 해보니 expire를 설정하는게 생각만큼 쉽진 않던데… 이것도 어느정도 수긍이 가게끔 잘 셋팅해서 보내줍니다. Google AJAX Libraries API를 다른곳에서도 사용한다면 cache의 사용을 극대화할 수 있겠습니다.
Firebug로 확인해보니 다음처럼 깔끔한 response가 오네요.

Gzip
HTTP 1.1 gzip으로 압축되어 전송됩니다. Exceptional Performance의 네 번째 항목 Gzip Components 입니다. 알려진 바와 같이 JavaScript는 다른 resource에 비해 특히나 gzip 했을 경우 효율이 커집니다. 텍스트 파일인데다, 대부분 프로그래밍시에 가독성이 중요하므로 공백이 많이 존재하기 때문이죠. 위 그림에서 Content-encoding이 gzip인것을 확인할 수 있습니다.
Minify
JavaScript 소스코드가 minify 되어 전송됩니다. gzip으로 압축되어 내려오기 때문에 큰 의미는 없을거 같기도 하지만 어쨌든 이것도 가능합니다. Google API loader(google.load())를 이용할 경우 uncompressed 옵션을 통해 minify 여부를 결정할 수 있습니다.
관리
성능하고는 상관없지만… 아주 아주 중요한 문제죠. Google API loader(google.load())를 이용하면 버전에 대한 관리 포인트가 하나 없어집니다. 앞서 잠깐 언급했듯이 버전을 정확히 지정하지 않아도 알아서 해당 버전을 찾아줍니다. 현재 major 버전이 2이고 major 버전이 올라가기 전까지는 계속 쓰겠다고 하면 , 2로만 지정하면 이들 중 최신 버전을 보내줍니다. 물론 Google에서 해당 라이브러리들의 모든 버전을 가지고 있진 않을거 같습니다. 특정 버전이 불안정하거나 문제가 존재할 경우는 제공하지 않을테니까요.
Google AJAX Libraries API를 front-end performance 관점에서 쪼끔 봤는데… 상용 서비스에서 쓰기에는 어떨지… 아. 라이센스를 안봤네요. 왠지 트래픽 제한이 있을지도 모른다는 생각이…
개인적으로는 YUI도 같이 제공했으면 했는데… 없습니다. 물론 Yahoo에서도 Serving YUI Files from Yahoo! Servers 하고 있습니다. 단지 같은데서 다 받을수 있음 좋지 않을까라는 생각에. ^^