캐싱 , require, 순환참조 [ node.js 교과서 ]

2023. 4. 10. 15:31node.js

본 게시글은 node.js 교과서 강의를 듣고 정리한 글입니다.

 

 

캐싱

 

- 파일은 하드디스크에서 불러오는 것은 느리고 메모리에서 불러오는 것은 빠르다.

- 하드디스크에 있는 정보를 메모리로 옮겨오는 것을 캐싱이라고 한다.

 


require 의 특성

- require 가 제일 위에 위치할 필요는 없다.

- require.cache 에 한번 require 한 모듈에 대한 캐슁 정보가 들어있다.

- require.main 은 노드 실행시 첫 모듈을 가리킨다.

 

// var.js

const odd = "홀수입니다.";
const even = "짝수입니다.";

exports.odd = odd;
exports.even = even;
// require.js

console.log("require가 가장 위에 오지 않아도 됩니다.");

module.exports = "저를 찾아보세요";

require("./var");

console.log("require.cache입니다.");
console.log(require.cache);
console.log("require.main입니다.");
console.log(require.main === module);
console.log(require.main.filename);

실행 결과

require가 가장 위에 오지 않아도 됩니다.
require.cache입니다.
[Object: null prototype] {
  '/Users/yunmun-yeol/Documents/test/require.js': Module {
    id: '.',
    path: '/Users/yunmun-yeol/Documents/test',
    exports: '저를 찾아보세요',
    filename: '/Users/yunmun-yeol/Documents/test/require.js',
    loaded: false,
    children: [ [Module] ],
    paths: [
      '/Users/yunmun-yeol/Documents/test/node_modules',
      '/Users/yunmun-yeol/Documents/node_modules',
      '/Users/yunmun-yeol/node_modules',
      '/Users/node_modules',
      '/node_modules'
    ]
  },
  '/Users/yunmun-yeol/Documents/test/var.js': Module {
    id: '/Users/yunmun-yeol/Documents/test/var.js',
    path: '/Users/yunmun-yeol/Documents/test',
    exports: { odd: '홀수입니다.', even: '짝수입니다.' },
    filename: '/Users/yunmun-yeol/Documents/test/var.js',
    loaded: true,
    children: [],
    paths: [
      '/Users/yunmun-yeol/Documents/test/node_modules',
      '/Users/yunmun-yeol/Documents/node_modules',
      '/Users/yunmun-yeol/node_modules',
      '/Users/node_modules',
      '/node_modules'
    ]
  }
}
require.main입니다.
true
/Users/yunmun-yeol/Documents/test/require.js

- require.main 으로 어떤 파일을 실행한건지 알아낼 수 있다.

- import 는 가장 위에 있어야 한다.

 


순환참조

- 두 개의 모듈이 서로를 require 하는 상황을 조심해야 한다.

- 두 개의 모듈이 서로를 require 하게 되면 module.exports 가 함수가 아니라 빈 객체가 된다. ( 무한 반복을 막기 위해 의도됨 )

- 순환참조하는 상황이 나오지 않도록 하는게 좋다.