모듈module이란 ?
애플리케이션을 구성하는 개별적 요소로서 재사용 가능한 코드 조각

일반적으로 모듈은 기능을 기준으로 파일 단위로 분리한다.
즉 파일 하나 === 모듈 스크립트 하나 === 모듈
우리가 util로 빼놓는 part를 생각하면된다.
이때 모듈이 성립하려면 모듈은 자신만의 파일 스코프(모듈 스코프)를 가질 수 있어야 한다.
모듈은 공개가 필요한 자산에 한정하여 명시적으로 선택적 공개가 가능하다. 이를 export라 한다.
모듈 사용자는 모듈이 공개export한 자산 중 일부 또는 전체를 선택해 자신의 스코프 내로 불러들여 재사용할 수 있다. 이를 import라 한다.
축약 내용 : module 내보내기 export , 가져오기 import
js는 웹페이지의 단순한 보조 기능만을 처리하기 위한 제한된 용도의 목적으로 태어났고, 이러한 태생적 문제 로 인해 파일 스코프와 import, export를 지원하지 않았다.
대부분에 프로그래밍 언어에서는 모듈기능을 지원하며 (C 언어는 include, 자바는 import), 클라이언트 사이드 자바스크립트는 script 태그를 사용하여 외부의 자바스크립트 파일을 로드할 수는 있지만 파일 마다 독립적인 파일 스코프를 갖지 않는다.
이게 어떤 말 이냐 ?
js 파일을 여러개로 분리해도 결국에 인식은 하나의 js 파일로 인식한다. 즉, 분리된 js파일들은 전역변수등의 중복문제가 발생되어 이것으로는 모듈을 구현할수 없다는 것이다.
이러한 문제들을 해결하기 위해 생긴것이 AMD라는 개념과 CommonJS라는 개념이 생기게 된다.