본문 바로가기
프로그래밍/Node.js

Node.js require vs import 비교하기

by 꾸션 2023. 4. 11.

JavaScript를 사용하면서 모듈을 불러오고 관리하는 방법이 두 가지가 있습니다. 하나는 CommonJS의 require 문법이며, 다른 하나는 ES6의 import 문법입니다. 이 글에서는 Node.js에서 require와 import의 차이점에 대해 자세히 알아보겠습니다.

 

node.js require vs import

 

1. 문법 차이

require

const express = require('express');
const { readFile } = require('fs');

 

import

import express from 'express';
import { readFile } from 'fs';

 

2. 동기와 비동기 로딩

require

CommonJS의 require는 동기적으로 모듈을 로드합니다. 모듈 로딩이 완료되기 전까지 코드 실행이 중지되므로, 종속성 관리가 용이하지만 성능에 악영향을 줄 수 있습니다.

 

import

ES6의 import는 비동기적으로 모듈을 로드합니다. 코드 실행이 멈추지 않으므로 성능에 미치는 영향이 적습니다. 하지만 종속성 관리에 더 신경 써야 합니다.

 

3. 정적과 동적 로딩

require

require는 동적으로 모듈을 로드할 수 있습니다. 실행 중에 필요한 모듈을 조건에 따라 불러올 수 있습니다.

if (process.env.NODE_ENV === 'development') {
  const devDependency = require('dev-dependency');
}

 

import

import는 정적으로 모듈을 로드하며, 조건에 따라 동적으로 불러오는 것은 불가능합니다. 최상위 범위에서만 사용할 수 있으며, 코드 분석 및 최적화에 유리합니다.

 

4. 모듈 시스템

require

CommonJS 모듈 시스템을 사용합니다. Node.js에서 기본적으로 지원되며, 커뮤니티에서 널리 사용되고 있습니다.

 

import

ES6 모듈 시스템을 사용합니다. 웹 개발에서 주로 사용되며, 최신 브라우저에서 지원됩니다. Node.js에서 사용하려면 Babel과 같은 트랜스파일러를 사용하거나, Node.js의 버전에 따라서는 기본적으로 지원되기도 합니다.

 

5. 모듈 캐싱

require

require로 불러온 모듈은 캐싱되어, 다시 불러올 때 새로운 객체를 생성하지 않습니다. 이를 통해 성능을 향상시킬 수 있습니다.

 

import

import 역시 모듈을 캐싱합니다. 따라서, 성능 면에서 비슷한 이점을 얻을 수 있습니다.

 

6. 객체 반환

require

require는 모듈에서 export된 객체를 반환합니다. export된 객체를 바로 사용할 수 있습니다.

const myModule = require('./myModule');
const result = myModule.myFunction();

 

import

import는 모듈의 네임스페이스를 반환합니다. 각 export는 해당 네임스페이스에서 접근할 수 있습니다.

import * as myModule from './myModule';
const result = myModule.myFunction();

 

7. 파일 확장자

require

require는 파일 확장자를 생략할 수 있습니다. Node.js는 기본적으로 .js, .json, .node 파일을 찾습니다.

 

import

import는 명시적으로 파일 확장자를 지정해야 할 수도 있습니다. 이는 Node.js 버전 및 설정에 따라 달라집니다.

 

import myModule from './myModule.js';

 

require와 import는 각각 장단점이 있으며, 사용 목적에 따라 선택할 수 있습니다. Node.js에서 기본적으로 제공되는 require는 동기적이고 동적 로딩이 가능한 반면, 웹 개발에 더 적합한 import는 비동기적이고 정적 로딩을 제공합니다. 프로젝트의 요구 사항과 호환성을 고려하여 적절한 모듈 로딩 방식을 선택하세요.

반응형

댓글