본문 바로가기
Web/Node.JS

[패스트캠퍼스 챌린지 17일차] NodeJS 핵심개념- require, module

by Dev_Mook 2021. 9. 22.

Fast campus Logo

 

Fastcampus_Node.js 수강 목록

 

패스트캠퍼스 작심 30일 챌린지 17일차.

 


 

오늘부터 드디어 Nodejs에 대한 강의가 본격적으로 시작되었다.

첫 강의는 그동안 예제 코드를 작성하면서 사용했던 require 함수와 Module에 대한 개념 정리!

 

먼저 require 함수는 그동안 작성한 예제 코드로 어떤 역할을 하는지 대충 감이 왔을 것이다.

바로 Node에서 지원하는 Library나 내가 작성한 ModuleImport해서 사용할 수 있게 해주는 역할을 한다.

, 파일 간에 참조 관계를 설정하기 위해 사용되는 함수이다.

 

require 함수는 CommonJS가 제공하는 module에서 제공하는 함수로

그동안 require(‘fs’)로 작성하였지만, module.require(‘fs’)로 작성을 하여도 같은 동작을 한다.

이 내용에 대해서는 Nodejs.orgDocument를 참고하면 학습에 도움이 될 것이다.

 

Node.js 핵심개념 정리 - require & Module

 


 

그럼 require를 통해 Module을 가져올 때 Module의 경로는 어떻게 설정해줘야 할까?

Module에 대해 학습하면 바로 알 수 있다.

 

먼저 Module에는 두가지 방식이 있다.

NodeJS에서 사용하는 CommonJS 방식과 표준 자바스크립트에서 제공하는 ECMAScript 방식.

(Nodejs.org에서 Document를 본 사람들은 바로 알겠죠?)

 

Module은 외부 모듈을 참조하는 방식에 대한 차이점에 있다.

CommonJS는 그동안 사용했던 require를 이용해 외부 모듈을 참조하였지만,

ECMAScriptimportexport를 이용해서 외부 모듈을 참조해야 한다.

분명 ECMAScript를 통해 소스코드를 작성해야 하는 경우가 많이 발생하기 때문에 ECMAScript의 방식도 잘 알아두면 좋을 것 같다.

 


 

일단 여기서는 CommonJS를 사용하니까!

CommonJS가 제공하는 Module을 살펴보면 path, paths, require... 등 다양한 함수를 제공하는 것을 알 수 있다.

여기서 주목할 함수는 paths!

 

paths 함수에는 module을 어디서부터 가져올 수 있는지에 대한 경로들이 우선순위에 따라 정의되어있다.

require(‘../fileName’)처럼 상대경로를 통해 직접 파일을 찾아 가져올 수도 있지만

require(‘fileName’)으로 작성하게 되면 Modulepaths에 정의된 순서에 따라 해당 경로에 파일이 존재하면 Import를 해준다.

 

Module에서 제공하는 paths를 잘 활용하면 모듈을 효율적으로 구현하고 관리할 수 있을 것 같다.

 


 

그리고 강의에서 한가지 더 알려준 사실!

require의 동작에 대한 내용이 있다.

 

const moduleA = require('./api.js');
const moduleB = require('./api.js');
const moduleC = require('./api.js');

 

위의 코드처럼 moduleA, moduleB, moduleC가 모두 같은 파일을 참조하도록 작성하였다.

그럼 moduleA, moduleB, moduleC는 모두 같은 객체일까?

답은 모두 같은 객체이다.

 

require가 세번 호출 되었으니 각각 객체를 만들것처럼 보이지만

실제로는 첫번째 require가 api.js를 가져오고, 나머지 require는 이미 첫번째 require가 모듈을 가져왔으니까

첫번째 모듈의 정보를 moduleB, moduleC에 전달해줄 뿐이다.

(나도 moduleA, moduleB, moduleC가 다 다른 객체로 선언될 줄 알았다.)

 


 

오늘 강의를 통해 NodeJS에서 지원하는 Module의 종류와 모듈이 어떤 정보를 제공해주는지,

그리고 require는 어떻게 사용하고, 어떤게 동작하는지 간단히 알아봤다.

 


 

[오늘의 학습통계]

패스트캠퍼스 작심 30일 챌린지 17일차 학습통계

 


- 패스트캠퍼스 URL : https://bit.ly/37BpXiC

* 본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.