require와import는 기본적으로 모듈 키워드이며, 외부 파일이나 라이브러리를 불러올 때 사용한다.
하나의 파일에서 다른 파일의 코드를 불러온다는 동일한 목적을 가지고 있지만 다른 문법구조를 가지고 있다.
require / exports는 NodeJS에서 사용되고 있는 CommonJS 키워드이고 Ruby 언어 스타일과 비슷하다라고 볼 수 있다.
const test = require('test') //불러오기
module.exports = test //내보내기
import / export는 ES6(ES2015)에서 새롭게 도입된 키워드로서 Java나 Python 언어 방식과 비슷하다.
import foo from 'foo' //불러오기
export default foo //내보내기
require와 import는 모두 JavaScript에서 외부 모듈을 가져와서 사용하는 데 사용된다. 이때 이 두 키워드는 모듈 시스템의 구현 방식에 따라 사용된다.
require는 CommonJS 방식으로 Node.js 개발 환경에서 모듈을 불러올 때 사용된다.
require를 사용하여 모듈을 로드하고, module.exports를 사용하여 모듈에서 내보내기를 정의한다.
CommonJS 방식에서는 동적으로 모듈을 로드할 수 있으며, 런타임에서 모듈이 로드된다.
ES6 방식은 웹에서 사용된다. 예를 들어, React나 Vue를 쓴 코드에서는 import를 사용하여 모듈을 로드하고, export를 사용하여 모듈에서 내보내기를 정의한다. ES6 방식에서는 정적으로 모듈이 로드되며, 컴파일 시점에 로드된다.
정리
따라서, Node.js에서는 require를 사용하여 모듈을 로드하고, ES6 모듈을 사용하는 경우에는 import를 사용하여 모듈을 로드할 수 있다. 하지만, Node.js 버전 12부터는 ES6 모듈 시스템을 지원하기 때문에, require 대신 import를 사용하여 모듈을 로드할 수 있다고 한다.