WIPIVERSE

CommonJS

CommonJS

CommonJS는 JavaScript 모듈 시스템을 정의한 사양 집합이다. 주로 서버‑사이드 JavaScript 환경(예: Node.js)에서 모듈의 정의와 로딩 방식을 표준화하기 위해 제안되었다. CommonJS 사양은 모듈을 파일 단위로 구분하고, require 함수를 통해 다른 모듈을 가져오며, 모듈이 내보내는 객체는 module.exports 혹은 exports 객체에 할당한다.

주요 특징

  • 동기적 로딩: require는 호출 시점에 모듈을 즉시 로드한다. 이는 파일 시스템 접근이 가능한 서버 환경에 적합하도록 설계되었다.
  • 단일 파일 모듈: 하나의 JavaScript 파일이 하나의 모듈이 된다. 모듈 내부에서 선언된 변수·함수는 해당 모듈 범위에 한정된다.
  • 가시성: 모듈 외부에서 접근할 수 있는 인터페이스는 module.exports에 명시적으로 할당된 값으로 제한된다.
  • 재사용성: 동일한 모듈을 여러 번 require해도 최초 로드 시점에 한 번만 실행되고, 이후에는 캐시된 객체가 반환된다.

역사적 배경

CommonJS는 2009년경 브라우저 중심의 비동기 모듈 로더(예: AMD)와 대비되는 형태로, 서버 환경에서 효율적인 모듈 관리를 위해 커뮤니티 주도로 제정되었다. 초기 제안은 CommonJS Modules/1.0 사양으로 발표되었으며, 이후 Node.js가 해당 사양을 구현하면서 사실상의 표준으로 자리 잡았다.

현재 활용

  • Node.js: 기본 모듈 시스템으로 채택되어 있다. 파일 확장자가 .js인 경우 require를 통해 모듈을 로드한다.
  • 번들러: Webpack, Browserify 등은 CommonJS 모듈을 브라우저용 번들로 변환한다.
  • 도구 및 라이브러리: 많은 npm 패키지가 CommonJS 형식으로 배포된다.

제한점

  • 비동기 로딩 부재: 브라우저 환경에서 직접 사용하기에는 네트워크 지연을 고려한 비동기 로딩이 지원되지 않는다.
  • ES 모듈(ESM)과의 혼용: 최신 JavaScript 표준인 ES 모듈(import/export)과 동시에 사용할 경우, 명시적인 변환 설정이 필요하다.

참고

둘러보기

더 찾아볼 만한 주제

    전체 문서 보기