Node.js를 공부하면서 이전에 배운 개념들을 다시 복습했다. 안다고 바로 넘어가지 않고 꼼꼼히 듣고 공부한 결과 내가 잘 모르고 있거나 놓쳤던 부분들을 새로 배우고 복습할 수 있었다.
모듈이란?
전체를 이루는 부품 하나하나를 모듈이라고 한다.
자바스크립트 파일 하나하나를 뜻한다.
모듈 불러오기, 내보내기
// 모듈 불러오기
const m = require("[모듈이름]");
m.[모듈이 내보낸 함수나 변수등등] // 모듈 사용
// 모듈 내보내기
function add(.){...}
exports.[내보낼 이름] = add;
// 객체를 내보낼 때
module.exports = [객체이름];
Module Wrapper function
nodejs가 모듈을 로드할 때는 한 가지 해주는 작업이 있는데, 바로 module wrapper function이라는 것으로 전체 코드를 감싸주는 작업이다.
// 우리가 작성한 모듈 코드
function add(a, b) {
return a + b;
}
exports.add = add;
// 실제 nodejs가 모듈을 로드할 때
(function (exports, require, module, __filename, __dirname) {
function add(a, b) {
return a + b;
}
exports.add = add;
});
모듈 안에서 위의 래퍼 함수의 다섯가지 인자인 exports, require, module, filename, dirname은 항상 자유롭게 접근할 수 있다.
이 중 module
객체를 console.log로 확인한 결과
exports 객체와 module 객체의 exports 프로퍼티가 가리키는 객체는 '동일한' 객체이다. 그리고 우리가 모듈 내부의 것들을 외부로 공개하기 위해 exports나 module.exports를 썼던 것은 바로 이 객체에 접근하기 위해서였다.
외부에서 이 모듈을 require함수로 로드하면 이 exports객체(module 객체의 exports프로퍼티가 가리키는 객체)가 리턴된다.
그런데 여기서, 모듈 안의 어떤 객체를 module.exports가 아닌 exports로 내보낸다면 nodejs는 require함수로 모듈을 로드할 때 module.exports객체를 리턴하므로 exports를 아예 새로운 객체를 가리키게 하면 안된다.
서드파티(third-party module) 모듈
npm install ~
로 설치할 수 있다.Node.js는 비동기 실행을 위주로 돌아가야 유리한 환경이다.
비동기 실행의 장점
Node.js에서 개발할 때 주의점
const EventEmitter = require('events');
const myEmitter = new EventEmitter();
// 'test'라는 이벤트 발생 시 콜백함수 실행
myEmitter.on('test', ()=>{console.log('Success!')});
// 'test'라는 이벤트 발생시키기
myEmitter.emit('test');
const EventEmiiter = require('events');
const myEmmiter = new EventEmiiter();
const myEmmiter2 = new EventEmiiter();
// 'test'라는 이벤트 발생 시 콜백함수 실행
myEmitter.on('test', ()=>{console.log(1)});
myEmiiter2.on('test', ()=>{console.log(2)});
// 'test'라는 이벤트 발생시키기
myEmitter.emit('test');
// myEmiiter에서 등록한 test 이벤트만 발생.
// myEmiiter2는 위 test 이벤트에 반응하지 않음
on
메서드: 이벤트 핸들러 등록 메서드(동일한 기능의 addListener
메서드도 있음)emit
메서드: 인위적으로 특정 이벤트를 발생시키는 메서드once
메서드: 특정 이벤트에 대해서 한 번만 반응하는 핸들러를 등록시키는 메서드 const EventEmitter = require('events');
const myEmitter = new EventEmitter();
myEmitter.once('test', () => {
console.log('Success!');
});
myEmitter.emit('test'); // 반응함 (한 번만 반응하므로)
myEmitter.emit('test'); // 반응하지 않음
myEmitter.emit('test'); // 반응하지 않음
listeners
메서드: 특정 이벤트에 대한 핸들러들을 출력해주는 메서드off
메서드: 핸들러 해제 메서드, 해제할 핸들러의 레퍼런스를 전달해줘야 한다.머릿속에 지식들이 정리가 되지 않는다. next.js, typescript, node.js, 오늘 들은 특강까지. 너무 많은 것들이 들어왔고, 아직 next.js의 렌더링 원리도 정리가 안되어 있는데 다른 개념을 왔다갔다 하면 배우려니 정신이 없다.