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 라는 녀석이 바로 그런 녀석이다!