프라이D
프라이Develog(❁´◡`❁)
프라이D
전체 방문자
오늘
어제
  • ALL (378)
    • TDD, Cleancode with JavaScr.. (5)
    • 프로젝트 (32)
      • work (3)
      • 직접 만드는 기술 블로그 (2)
      • 데일리 옥션 (19)
      • 모락모락 (8)
    • Computer Science (1)
    • Algorithm & 자료구조 (94)
      • 알고리즘 w.JavaScript (53)
      • 자료구조 (5)
      • (인프런) 자바스크립트 알고리즘 문제풀이 (34)
    • JavaScript (45)
      • JavaScript (41)
      • 모던 자바스크립트 Deep Dive (4)
    • WEB (13)
    • 회고 (12)
    • TIL (109)
    • WIL (7)
    • Stacks (20)
      • React.js (6)
      • Next.js (1)
      • Redux (3)
      • Node.js (2)
      • GIT (2)
      • SAP (1)
    • 15일 메이킹 프로젝트 (15)
    • 이전 기록 (14)
    • ETC. (5)
    • ---------------2021 (6)
      • 내일배움단-웹개발 5주 (2)
      • 정보처리기사 (4)

블로그 메뉴

  • 홈
  • 태그
  • 미디어로그
  • 위치로그
  • 방명록

공지사항

인기 글

태그

  • 비트마스크
  • 모던자바스크립트딥다이브
  • 코드스테이츠
  • 2023 인프콘 후기
  • 자바스크립트비트마스크
  • 자바스크립트
  • 코딩프로젝트
  • vanilaJS
  • 스파르타코딩클럽
  • 알고리즘
  • nomadcoder
  • 국비지원
  • JavaScript
  • MySQL
  • 자바스크립트알고리즘
  • nomadcoders
  • 내일배움단
  • 투포인터알고리즘
  • Til
  • 내일배움카드

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
프라이D

프라이Develog(❁´◡`❁)

Stacks

[Node.js] Node의 require module 은 어떻게 동작하는가?

2024. 2. 4. 23:26

CommonJS 모듈 시스템

  1. 하나의 자바스크립트 파일은 분리된 모듈로서 취급된다.
  2. 그리고 nodejs는 CommonJS 시스템을 쓴다.
    • require() 그리고 exports 혹은 module.exports
  3. 프론트에서 쓰이는 import/export 는 ES Module 시스템
  4. mjs 를 사용하면 Node 에서도 ES 모듈 시스템을 쓸 수 있다. 하지만 대중적인 pick 은 아닌 것 같음.

모듈을 require 하면 무슨 일이 일어나느냐?

const http = require('http');
const fs = require('fs');
  • 아래와 같은 단계를 거친다.
  1. Resolving & Loading
    • 모듈의 주어진 경로를 해석하고 로딩한다.
    • 모듈의 종류는 크게 세 가지가 있음.
      • http 와 같은 Node 의 core 모듈
      • 개발자가 직접 쓴 모듈 파일
      • 외부 3rd-part 모듈 (npm에서 받은거)
    • 먼저 core 모듈을 찾고, 만약 / 로 시작한다면 해당 폴더를 찾는다.
    • 두 경우 모두 없다면 node_modules 경로에서 모듈을 찾으려고 함.
  2. Wrapping
    • 모듈 코드를 특정 함수 스코프로 감싸서, 모듈 코드가 전역 스코프에서 직접 실행되는 것을 방지한다. + 네임스코프 오염 및 충돌 방지 등…
    • (function(exports, require, module, __filename, __dirname) { // 모듈의 코드 });
    • 이 과정에서 exports 나 require 같은 함수를 사용할 수 있게 되는 것.
  3. Execution
    • 그리고 감싸진 wrapper 함수가 실행된다.
  4. Returning Exports
    • require 함수는 모듈을 exports 한다.
    • 모듈이 하나의 값이나 객체를 내보내는 경우 module.exports 를 사용해 단일 클래스, 함수등을 내보낼 수 있음.
    • exports 의 경우 여러개의 함수, 객체를 모듈 속성으로 내보낼 때 활용
  5. Caching
    • require 을 처음 실행한 경우 캐싱이 되기 때문에, 여러번 require 을 호출해도 처음 한 번만 실행되는 것과 같다.
저작자표시 (새창열림)

'Stacks' 카테고리의 다른 글

[Electron.js] electron 의 rebuild 란?  (0) 2024.02.18
[Node.js] Streams 에 대해서 알아봐요.  (0) 2024.01.28
[Electron.js] 일렉트론에 대해서 알아보자!  (0) 2024.01.21
[Node.js] Node란 무엇이냐..이벤트 루프란..?  (1) 2024.01.14
    'Stacks' 카테고리의 다른 글
    • [Electron.js] electron 의 rebuild 란?
    • [Node.js] Streams 에 대해서 알아봐요.
    • [Electron.js] 일렉트론에 대해서 알아보자!
    • [Node.js] Node란 무엇이냐..이벤트 루프란..?
    프라이D
    프라이D
    틀린내용 정정 및 개선사항은 언제든지 댓글 달아주세요 :D

    티스토리툴바