자바스크립트(Javascript) 모듈화


배경

- Web App 로직의 비중이 서버에서 클라이언트로 이동하면서 클라이언트 코드가 거대화, 엔터프라이즈화 됨

- 클라이언트 Web App 개발 언어는 자바스크립트(이하 JS)

- JS를 본격적인 프로그래밍 랭귀지로 사용하려면 모듈화가 선결조건

- 모듈화의 중요성 

==> 유지보수의 간편함

- 시스템이 독립적인 모듈로 느슨하게 결합되어 있어야 관리하기 쉽다

- 어느 한 부분을 수정해도 전체 시스템에 영향을 주지 않는다


히스토리

- JS 모듈 관리를 위한 코딩 표준을 정의하려는 노력이 있었음(CommonJS와 AMD)

- CommonJS

- JS의 활용성을 높이려는 자발적 워킹그룹

- JS를 범용 프로그래밍 언어로 만드는 것이 목적

- 2009년 1월 Kevin Dangoor가 SSJS(서버-사이드 자바스크립트)에 대한 아이디어를 제시하고 사람들을 모으기 시작

- JS 모듈 관리에 관한 코딩 표준을 제시함

- AMD(Asynchronouse Module Definition)

- 브라우저에서의 JS 모듈 활용성을 높일 목적으로 CommonJS에서 파생됨

- AMD는 CommonJS와 interoperable

- jQuery를 비롯 다수의 오픈소스 솔루션이 AMD를 지지

- jQuery의 경우, 1.7부터 AMD 모듈 등록 기능을 지원하기 시작

- CommonJS와 마찬가지로 JS 모듈 관리에 관한 코딩 표준을 제시함

- RequierJS

- AMD 표준을 준수하는 가장 인기 있는 JS Loader

- 기존 JS 로딩의 문제(<script> 태그를 이용 JS 파일을 로딩할 경우...)

- 로딩이 시퀀셜하게 진행

- JS 파일간 dependency가 없을 경우 시퀀셜하게 로딩하는 것은 시간 낭비

- JS 파일간 dependency가 있을 경우 개발자가 script 태그 배열 순서를 신경 써야 함

- RequireJS를 비롯한 asynchronous loader의 역할

- JS를 비롯한 모든 리소스를 가능한 병렬로 로딩

- JS 파일간 dependency를 JS Loader가 지능적으로 관리


전망, 결론

- CommonJS, AMD가 해결하려는 문제의 핵심은 모듈화

- 모듈화는 JS가 보다 범용적인 언어로 자리매김하는 단초가 될 것

- 모듈화는 JS framework(이후 f/w) 패러다임이 변화하는 토대가 될 것

- 지금까지는 모든 것을 해결하는 다목적 f/w가 주류

- 글로벌 네임스페이스를 차지하는 대형 f/w은 다른 JS 코드와 충돌하기 쉽다

- 특정 영역에 집중하는 작은 모듈이 관리하기 쉽다

- 이제부터는 필요한 기능별로 f/w 모듈을 로드하여 사용하는 시대

- 특히 크기가 중요한 모바일 환경에서 중요성 증대

- HTML5가 지원되는 스마트폰 환경에서 활용사례 증가 예상(로컬 스토리지를 통해 모듈 로딩 성능 향상 가능)


(이상)

Posted by ingeeC
,

솔직히 말해서, 

Subversion 이후로 새로운 버전 관리 툴이 필요할 거라는 생각을 하지 않았다. 그래서 Git(깃)이 세상에 나왔을 때 나는 분노했다. 뭣하러? 새로운 톨이 나오고, 사람들이 열광하고, 아쉬울 것 없던 내가 Git을 배우게 된 걸까?

하지만, Git에 대해 요모조모 알고난 지금, 난 누구에게도 자신있게 Git을 권할 수 있다. 이제 Subversion과 Git 중에 하나 고르라고 하면 Git을 추천한다.


GitHub

- SourceForge와 Google Code를 빠르게 앞서고 있는 오픈소스 프로젝트 근거지

- 단순한 소스 호스팅 뿐 아니라 개발자들끼리의 SNS로 기능하고 있음

- Subversion (SVN)을 오픈소스 호스팅 기반으로 사용하는 SourceForge와 달리 Git을 소스 호스팅 도구로 사용

- 코드 생산자가 아니라 소비자로 활동하기에도 좋다


Git

- Git은 2006년경 BitKeeper라는 리눅스 커널 개발에 쓰던 분산형 패치 도구에 대한 대안으로 리누스 토발즈가 직접 개발한 분산형 소스 콘트롤(Source Control Management) 시스템

- Offline으로 동작 가능하며 거의 모든 기능의 반응 속도가 기존 버전 관리 툴을 압도 (Why Git is Better than X 참고)

- GitHub를 쓰기 위해 Git을 사용하는 사람이 늘고 있음 (GitHub가 활성화 되었음을 의미)


참고자료

- Github, 코드 개발 기반 소셜 네트웍 (http://channy.creation.net/blog/626)

- 웹 항해일지 - GitHub 특집 (http://occamsrazr.net/tt/254)

- The Git 슬라이드 (http://www.slideshare.net/dalinaum/the-git)

- Why Git is Better than X (http://whygitisbetterthanx.com/)

- Git 사용기 (http://help.github.com/be-social/)

Pro Git (http://dogfeet.github.com/articles/2012/progit.html

: 이 책, "Pro Git"은 꼭 읽어야 한다. Git에 대한 완벽한 안내서. 무려 한글! 내용 충실! 책을 이렇게 공개하면 종이책이 팔리지 않을텐데... 저자가 고마우면서도 걱정되는 복잡한 기분.


(이상)


Posted by ingeeC
,
게임 Cut The Rope의 HTML5 버전이 공개됐다. IE를 비롯 Safari, Chrome, Firefox 등 PC 브라우저는 물론, iPhone, iPad, Android Phone, Android Tablet 등 모바일 기기의 브라우저에서도 실행된다. 
이 개발자들.. 멋지게도 귀중한 경험을 후기로 남겼다. 가치 높은 글이라 줄거리를 요약하여 옮겨온다.

게임:  http://www.cuttherope.ie/ 
원본:  http://www.cuttherope.ie/dev/ 

+ 'Cut The Rope' 게임의 Objective-C 코드를 html5 코드로 포팅하기로 결정
+ 쉽지 않은 도전
- 라이브러리를 제외하고 15,000 라인에 이르는 방대한 규모의 프로그램
- 물리엔진, 애니메이션엔진, 드로잉엔진이 타이트하게 결합되어 최적화되어 있는 상태

+ JavaScript에 희망을 검
- 초기의 JavaScript는 스크립트 실행을 위한 느린 언어
- 현재의 JavaScript는 JIT를 이용 native에 근접한 실행속도를 내는 언어

+ JavaScript 프로그래밍을 위해서는 컴파일 언어를 사용할 때와는 다른 mindset이 필요
+ JavaScript는 struct를 미지원
- JavaScript의 Object를 struct 대용으로 사용할 경우 여러가지 어려움을 겪게됨
- JavaScript에서 Object를 함수의 인자로 전달하면 call by reference됨.
- 따라서 callee함수에서 Object 인자를 수정하면 caller에 영향을 줌
- 그리고 JavaScript에서 Object 생성은 무척 비싼 연산
- 그래서 함수 호출시 Object 전체를 파라메터로 넘기는 대신 필요한 field만 넘기는 방법을 선택함
+ JavaScript의 OO(Object Oriented) 개념은 전통적인 OO 언어와 다름
- JavaScript는 prototype에 기반한 OO 개념을 제공하나 이는 Objective-C와 이질적
- 그래서 JavaScript에 class 기반 OO를 가능하게 하는John Ressing (of jQuery)의 공개 라이브러리를 이용하기로 함

+ Objective-C 코드 말고도 OpenGL을 HTML5 Canvas API로 포팅해야 했음
- 이 작업은 순조롭게 진행됐음
- HTML5 Canvas가 하드웨어 가속을 지원하는 브라우저 위에서 놀랄만큼 빠른 rendering 성능을 보였음
- 일부 기능 (예를 들어 anti-alias line 그리기 기능)의 경우, HTML5 Canvas가 OpenGL ES보다 훌륭했음 (성능/기능 측면에서)

+ 최종적으로 브라우저에서 실행되는 15,000라인 규모의 코드를 만들어냄
- 3주가 지난후, 기본적인 물리엔진, 드로잉엔진, 애니메이션을 위한 타이머를 개발함
- 4주가 지난후, 기본적인 마우스 처리가 구현되어 실제 게임을 실행할 수 있게됨
- 물리엔진은 intensive한 연산 덩어리, 하지만 JavaScript가 놀라운 실행성능을 보여줌. 이제 JavaScript가 느린 언어라는 선입견을 버려야함

+ 개발을 위해 사용한 도구
+ 코딩을 위해 Visual Web Developer 2010 (free version 제공됨) 사용
- JavaScript, css 구문에 대한 autocompletion 기능 제공
+ 실행 및 디버깅을 위해 ie9을 비롯한 firefox, chrome, safari 브라우저 사용
- 동일한 HTML5 코드로 모든 브라우저를 지원할 수 있음을 확인
+ ie9의 JavaScript profiler를 사용하여 실행성능을 최적화함
- 코드의 병목 지점을 찾아 개선함으로써 10배 이상 실행 성능을 향상시켰음

+ 산출물
+ resource loader
- 본 게임의 리소스 크기(6MB)는 일반 웹사이트의 리소스 크기(200~300KB)에 비해 매우 큼
- 큰 리소스들을 안정적으로 pre-loading하고 loading schedule을 조정할 수 있는 JavaScript 'resource loader' 라이브러리를 개발함, 그리고 이를 free open source로 공개함

(이상)

Posted by ingeeC
,
HTML5 Device API 분야의 표준화 현황을 정리한다. 현황을 정리하면서 느낀점은 다음과 같다.
- W3C가 부지런히 움직이고는 있지만 Device API는 표준화 초기 단계다 (대부분 Working Draft 단계...)
- 애플보다는 안드로이드 쪽이 그나마 기민하게 반응하고 있다 (오십보 백보지만 그래도...)
 
phone call
- <a href="tel:phone_number"> URI를 통한 전화 걸기 기능
- 표준화 현황: de facto 표준 (W3C 공식 표준 아님)
- 단말 지원 현황: iOS, Android, 블랙베리 등 거의 모든 모바일 기기가 지원함
- 참고 자료: http://www.mobilexweb.com/blog/click-to-call-links-mobile-browsers
 
Indexed DB
- 인덱스가 부여된 Javascript Object 들의 local storage
- W3C가 Web SQL 표준을 폐기하고 대안으로 제시
- 표준화 현황: W3C Working Draft (06-December-2011 규격이 최신: http://www.w3.org/TR/IndexedDB/)
- 단말 지원 현황: 거의 모든 모바일 기기가 지원 않음
- 참고 자료: http://www.html5rocks.com/en/tutorials/indexeddb/todo/

Media Capture
- 카메라, 캠코더, 마이크 연동 규격
- 표준화 현황: W3C Working Draft (14-April-2011 규격이 최신: http://www.w3.org/TR/html-media-capture/)
- 단말 지원 현황: iOS 지원 않음. Android 지원함 (3.0 부터)
- 참고 자료: 
    - http://www.h-online.com/open/news/item/HTML5-Access-to-cameras-and-microphones-1043319.html
    - http://www.wonsuk73.com/19
 
File API
- 로컬 파일 읽기/쓰기 API
- 표준화 현황: W3C Working Draft (20-October-2011 규격이 최신: http://www.w3.org/TR/FileAPI/)
- 단말 지원 현황: iOS 지원 않음. Android 지원함 (3.0 부터)

Touch Event
- 터치 이벤트 규격
- 표준화 현황: W3C Candidate Recommendation
    - Working Draft보다 안정된 상태
    - 15-December-2011 규격이 최신: http://www.w3.org/TR/touch-events/
- 단말 지원 현황: 거의 모든 모바일 기기가 지원함

Contacts API
- 사용자의 연락처 정보에 접근하기 위한 API
- 표준화 현황: W3C Working Draft
    - Stable Draft 상태 (Last Call)
    - 16-June-2011 규격이 최신: http://www.w3.org/TR/contacts-api/
- 단말 지원 현황: 거의 모든 모바일 기기가 지원 않음 (규격의 안정도를 고려할 때 의외)

Calendar API
- 사용자의 일정 정보에 접근하기 위한 API
- 표준화 현황: W3C Working Draft (19-April-2011 규격이 최신)
- 거의 모든 모바일 기기가 지원 않음
 
Task API
- 사용자의 to-do 업무 정보에 접근하기 위한 API
- 표준화 현황: 담당 에디터가 없음, Calendar API에 합쳐질 전망
- 참고 자료: http://www.w3.org/TR/calendar-api/ 

Geolocation API
- 사용자의 위치 정보에 접근하기 위한 API
- 표준화 현황: W3C Candidate Recommendation
    - Working Draft보다 안정된 상태
    - 07-September-2010 규격이 최신 (http://www.w3.org/TR/geolocation-API/)
- 단말 지원 현황: 거의 모든 모바일 기기가 지원

Messaging API
- SMS, MMS, eMail 관련 API
- 표준화 현황: W3C Working Draft (14-April-2011 규격이 최신: http://www.w3.org/TR/messaging-api/)
- 단말 지원 현황: 거의 모든 모바일 기기가 지원 않음
 
 (끝)
 
Posted by ingeeC
,

jQuery Mobile 요약

Dev 2012. 1. 16. 16:59
jQuery Mobile(이후 JQM)의 개요에 대해 간단히 요약한다.

JQM (jQuery와 JQM의 관계)?
- JQM은 jQuery의 확장팩 (jQuery의 light-weight 버전이 아니다)
- JQM은 jQuery를 기반으로 모바일 Web App 개발을 지원하기 위한 코드(HTML/CSS/Javascript)를 추가한 일종의 플러그인(plulg-in)

JQM은 무엇을 제공하나?
- Touch 인터페이스 처리
- 다양한 모바일 OS/Device에 대한 지원
- Theme(UI 테마) 체계

jQuery Plug-in?
- jQuery의 기능을 확장하기 위해 widget 또는 코드 모듈을 추가할 수 있도록 jQuery 팀이 제공하는 아키텍처
- 전세계 jQuery 개발자들에 의해 다양한 plug-in들이 개발/발표되고 있음

jQuery Mobile을 쓰려면 어떻게 하나?
- Web App 소스에 다음 3줄을 추가하면 준비 끝!
<link rel="stylesheet" href="http://code.jquery.com/mobile/1.0/jquery.mobile-1.0.min.css" />
<script src="http://code.jquery.com/jquery-1.6.4.min.js"></script>
<script src="http://code.jquery.com/mobile/1.0/jquery.mobile-1.0.min.js"></script>

(이상)
 
Posted by ingeeC
,