CommonJS와 AMD

CommonJS의 발단

자바스크립트 표준화와 관련된 첫 논의는 2009년 1월 케빈 댄구어(Kevin Dangoor)가 자신 블로그에 현재의 서버 사이드 자바스크립트가 필요한 것들을 역설하면서 시작되었다.

첫 시작은 서버사이드 자바스크립트였지만, 논의가 구체화 되면서 자바스크립트가 가장 많이 쓰이는 브라우저 뿐만 아니라 커맨드 라인툴 등의 일반적인 언어로써 논의로 확장되었다.

그리하야  CommonJS 등장한다. 뚜둥~!  케빈이 CommonJS 1년을 회고하며 쓴 글을 참고하자!

 

CommonJS 사이트가 자꾸 죽어요!

이유는 나도 모르지만, 여튼 종종 잘 죽는건 확실한것 같다. 이럴때 미러 사이트를 이용하자.

http://www.commonjs.org.mirrors.page.ca/

http://wiki.commonjs.org.mirrors.page.ca/

 

CommonJS와 AMD

내가 기고한 기사도 있지만 CommonJS가 모듈화만을 위한 워킹 그룹으로 오해하면 안된다.

CommonJS는 그보다 더 많은 주제를 가지고 토론하고 있으며, 모듈도 그 중 하나에 속한다. 물론 가장 활발한 논의중 하나고, 가장 많은 진전이 이루어졌다.

AMD의 시작은 CommonJS에서 시작됐지만, 브라우저라는 특별한 환경 때문에 결국 갈라서고 만다.

가장 큰 이유는 바로 require() 메소드의 동작 때문이었다. AMD는 브라우저에서 잘 동작하려면, 콜백 스타일의 require() 메소드를 만들어한다고 주장한 반면에,

CommonJS 쪽은 브라우저도 예외없이 동일한 본래 스타일의 require() 함수를 써야한다고 주장하며, 동기식 XHR과 eval() 을 이용한 모듈 로더를 제안한다.

하지만 AMD 진영은 동기식 XHR과 eval()은 디버깅도 어렵고, 크로스 도메인 문제가 있으며, eval()은 권장하는 방법이 아니라며, <script> 태그를 동적으로 헤더에 삽입하는 방법을 제안한다.

 

Lazy Loader

AMD 진영에서 주장한 <script>태그를 헤더에 삽입하는 방식 뿐만아니라, 동기식 XHR+eval() 방식 모두 필요할 때 모듈을 로드하는 방식이다.

물론 레이지 로딩 방식보다는 파일 하나에 퉁쳐서 내려받는것이 성능상 더 좋다! 하지만 뭐 사실 그렇게 눈에 띄게 큰 퍼포먼스의 차이는 없을수도 있다.

만약에 그 사소한 차이도 놓치도 싶지않다면, 당연히 파일을 하나로 퉁쳐야한다. 그래서 AMD 모듈의 경우 대부분 모듈의 의존성을 파악해서 파일을 하나로 퉁쳐주는 보조 툴을 제공한다.

RequireJS의 경우 r.js 라는 녀석이 바로 그런 녀석이다!

 

불꽃남자

UI 개발자

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다

This site uses Akismet to reduce spam. Learn how your comment data is processed.