728x90
require
require는 JavaScript에서 모듈을 가져오는 데 사용되는 함수로, 주로 Node.js 환경에서 사용됩니다. 이를 통해 다른 파일에서 정의된 코드나 외부 라이브러리를 현재 파일에 가져와 사용할 수 있습니다.
기본 사용법
const 모듈이름 = require('모듈경로');
// 모듈이름 : 불러온 모듈을 저장할 변수
// 모듈경로 : 불러오고자 하는 모듈의 경로. 내장 모듈, 로컬 파일, 또는 npm 패키지를 지정할 수 있음
모듈의 종류
- 내장 모듈 : Node.js에 기본적으로 포함된 모듈, fs http, path 등
- 로컬 모듈 : 프로젝트 내에서 작성한 JavaScript 파일로, 상대 경로를 사용하여 불러옴
- npm 패키지 : npm을 통해 설치한 외부 라이브러리로, 패키지 이름만으로 불러올 수 있음
주요 특징
- 모듈 가져오기: require는 CommonJS 모듈 시스템의 일부로, 모듈을 현재 파일로 가져옵니다.
const fs = require('fs'); // Node.js 내장 모듈 fs를 가져옴 const myModule = require('./myModule'); // 로컬 파일의 모듈을 가져옴
- 파일 경로 규칙:
- 로컬 파일: 경로 앞에 ./나 ../를 사용해야 합니다.
const myFile = require('./myFile.js'); // 같은 디렉토리의 myFile.js 가져오기
- Node.js 모듈: 파일 경로 없이 모듈 이름만 적으면 Node.js가 기본 또는 node_modules 디렉토리에서 해당 모듈을 찾습니다.
const express = require('express'); // npm 패키지 가져오기
- 로컬 파일: 경로 앞에 ./나 ../를 사용해야 합니다.
- 동기적 로딩: require는 동기적으로 작동하므로, 호출 시 파일을 즉시 읽고 실행합니다. 이로 인해 초기 로드 시간이 길어질 수 있습니다.
- 모듈 캐싱: 동일한 모듈을 여러 번 require해도, 처음 로드된 인스턴스가 캐시되어 재사용됩니다. (즉, 모듈은 한 번만 실행됨)
const mod1 = require('./module'); const mod2 = require('./module'); console.log(mod1 === mod2); // true
- module.exports와의 관계: require로 가져온 값은 해당 모듈의 module.exports에 설정된 값입니다.
// myModule.js module.exports = { hello: 'world' }; // main.js const myModule = require('./myModule'); console.log(myModule.hello); // "world"
주의사항
- 브라우저 환경에서는 기본적으로 지원되지 않음: require는 Node.js의 CommonJS 모듈 시스템에서 사용되며, 브라우저에서는 동작하지 않습니다. 브라우저 환경에서는 대신 ES Modules (import/export)을 사용해야 합니다.
- 동기적 로딩의 단점: 서버 환경에서는 괜찮지만, 클라이언트 환경에서는 비효율적일 수 있습니다. 그래서 브라우저 환경에서는 Webpack, Rollup과 같은 번들러로 모듈을 처리합니다.
Modern JavaScript와 비교
ES Modules의 import/export는 require와 유사한 역할을 하며, 더 최신의 방식입니다.
- CommonJS (require):
const fs = require('fs'); module.exports = { hello: 'world' };
- ES Modules:
import fs from 'fs'; export const hello = 'world';
Node.js 12 이상에서는 ES Modules도 기본적으로 지원됩니다.
728x90
'프론트엔드 > javascript' 카테고리의 다른 글
History API (0) | 2025.01.04 |
---|---|
Fetch API (0) | 2025.01.04 |
PerformanceAPI (0) | 2024.12.31 |
Querystring (0) | 2024.12.29 |
jquery 확장 메서드 (0) | 2024.07.06 |