learning

CommonJS 두번째 살펴보기.

눈침침 2011. 11. 10. 00:37

CommonJS 는 JavaScript API를 정의하는 단체(=Group)이다.

자바스크립트는 빠르고 강력한 언어가 되었지만, 현재의 표준 JavaScript 스팩은 브라우져 환경을 벗어날 수 있는 API를 제공해 주지 못하고 있다.

CommonJS 는 JavaScript가 갖지 못한 API,
즉, Java 나 Ruby, Python이 갖고 있는 Standard Library API와 같은 API를 추가로 정의해서,
JavaScript를 범용 언어와 같이 만들고자 하는 것이다.

CommonJS 에서 가장 먼저 완성한 스팩은 Modules/1.0 이다.

(대부분이 말하는 CommonJS 를 따른다. 혹은 CommonJS 이다 라는 표현은, 이 CommonJS 모듈 스팩을 준수하고 있다 라는 뜻이다.)

Kris Kowal 님이 만드신, "CommonJS: JavaScript Everywhere" 라는 슬라이드 자료

매우 간단하게 요약하자면,...

  1. Slide 5, 슬라이드에 초반에 Python 코드가 등장,
  2. Slide 6, JavaScript 로 Python 코드와 같은 코드를 작성할 수 있지만, 그 모든 방법은 표준이 아니다.
  3. Slide 7, 특히, 모듈, 파일 시스템, 웹 서버 게이트 웨이(?), 바이너리 데이터 등등이 표준에 없다.
    (ECMAScript의 브라우져 관련 API는 표준으로 있는데,...)
  4. Slide 8, CommonJS에서 표준화를 하자!
  5. Slide 11, CommonJS는 API 이다.
  6. Slide 16 ~ 49, CommonJS 표준엔 Modules 1.1 부터.. Packages 까지 정의가 되어 있다.
  7. Slide 52 ~ 53, (CommonJS API를 이용해서) 처음 등장한 Python 코드와 같은 역활을 하는 JavaScript 코드로 작성!!

CommonJS에서 표준화 작업중인 내용들

현재(2011.11.18), 아래와 같은 내용(=CommonJS 위키 페이지에서 확인 가능)들이 토론되어지고 있는 중이다.

  • Uniform Baseline / 글로벌 (discussion) - 여러 JS 엔진에서 동일하게 동작하도록 하기위한 토론.
  • 모듈 (1.1.1)
    • binary: 바이너리 데이터 타입 (byte arrays and/or strings) (proposals, discussion, early implementations)
    • encodings: 인코딩과 문자열 (proposals, discussion, early implementations) -
    • io: I/O 스트림 (proposals, discussion)
    • fs, fs-base: 파일 시스템 (proposals, discussion, early implementations)
    • system: 시스템 인터페이스 (stdin, stdout, stderr, &c) (1.0, amendments proposed)
    • assert, test: 단위 테스트 (1.0, amendment proposals pending)
    • sockets: 소켓 I/O TCP/IP 소켓 (early proposals)
    • event-queue: 리액터(=Reactor, 이벤트 발생자)/이벤트 큐 (early proposals)
    • worker: 워커(Worker) (공유하지 않는 동시(=concurrent) 프로세스/쓰레드) (proposal)
    • console: 콘솔(=console) (proposal)
  • 패키지 (1.0)
  • Package Mappings (proposal)
  • Web Server Gateway Interface (JSGI) (proposals, discussion, early implementations)
  • Promises (proposal) - 비동기 처리를 위한 스팩