본문 바로가기
멀티캠퍼스 풀스택 과정/백엔드

[Node.js] 2. 모듈 생성하고 사용하기 / 이벤트 모듈 생성하고 사용하기

by 이쟝 2022. 3. 30.
사용자 정의 모듈: 모듈은 변수, 함수를 정의하는데, 내장객체인 exports를 이용해 모듈을 생성할 수 있다.

1. 모듈 생성하기

  • 모듈은 module.exports 또는 exports 객체를 통해 정의하고 외부로 공개한다.

1. 변수를 모듈로 선언

new exports.productCode = 243506789;
new exports.productName = '컴퓨터';

2. 함수를 모듈로 선언

exports.plus = function(a, b){
    return a+b;
}

exports.minus = (a,b) => {
    return a-b;
}

exports.gugudan = function(dan){
    let result = '';

    for(var i=2; i<=9;  i++){
        result += dan + "*" + i + "=" + (dan*i) + "<br/>";
    }
    return result;
}

2. 모듈을 사용할 파일 생성(node05_custom_module_test.js)

let http = new require('http');

let myModule = new require('./node04_custom_module_create'); // 모듈 객체를 만든다.

let server = http.createServer(function(request, response){

}).listen(10003, function(){
    console.log("server start.. http://127.0.0.1:10003");
});
require 키워드로 모듈을 생성한 파일의 경로를 입력해서 모듈 객체를 만든다.

임의 생성한 서버는 10003번

1. 응답할 폼을 작성한다. 

response.writeHead, response.write, response.end를 이용

let http = new require('http');

let myModule = new require('./node04_custom_module_create'); // 모듈 객체를 만든다.

let server = http.createServer(function(request, response){

    response.writeHead(200, {'Content-Type':'text/html; charset=utf-8'});
    response.write('상품코드: ' + myModule.productCode + "<br/>");
    response.write('상품명: ' + myModule.productName + "<br/>");

    response.write('plus(100,400)=>'+ myModule.plus(100,400) + "<br/>");
    response.write('minus(100,400)=>'+ myModule.minus(100,400) + "<br/>");
    response.end('gugudan(3)<br/>'+ myModule.gugudan(3));
    
}).listen(10003, function(){
    console.log("server start.. http://127.0.0.1:10003");
});


1. 이벤트 모듈 생성하기

  • Node.js에서는 이벤트 모듈과 EventEmitter 클래스가 내장되어 있는데, 이를 사용하여 이벤트와 이벤트 핸들러를 연동시킬 수 있다.
  • 이벤트 모듈을 사용하려면 require() 메서드를 이용하여 로드하고, 그 객체를 통해 EventEmitter 클래스를 로드하여 사용한다. 
let http = new require('http');

let events = new requre('events'); (1)

let event_obj = new events.EventEmitter(); (2)

let server = http.createServer((req,resp)=>{

});

server.listen(10004, ()=>{
	console.log('server start... http://127.0.0.1:10004');
});

(1) 이벤트가 정의되어 있는 events 모듈을 객체화한다. (event 모듈을 사용하기 위해)

(2) 이벤트 처리를 하기 위해서 모듈을 담고 있는 EventEmmiter객체를 초기화한다. 

1. 이벤트가 발생 시 실행할 함수를 정의한다.

let http = new require('http');

let events = new require('events');

let event_obj = new events.EventEmitter();

// (1)
event_obj.on('call', ()=>{  // call이벤트가 발생하면 실행되는 곳
    console.log('call 이벤트 발생!!!');
});

event_obj.addListener('call2',function(){ // call2이벤트가 발생하면 실행되는 곳
    console.log('call2 이벤트 발생!!!!!');
});

event_obj.once('call3', function(){  // once는 이벤트를 한 번만 발생시킴
    console.log('call3 이벤트 발생!!!!');
});

let server = http.createServer((req, resp)=>{
    // (2)
    event_obj.emit('call');  // call 이벤트가 발생하는 곳
    event_obj.emit('call2');
    event_obj.emit('call3');

	// 응답할 페이지
    resp.writeHead(200, {'Content-Type':'text/html; charset=utf-8'});
    resp.end("<h1>이벤트 테스트</h1>");
});

server.listen(10004, ()=>{
    console.log('server start... http://127.0.0.1:10004');
});

 

  • addListener(event, listener) : on() 메소드와 동일, 이벤트를 생성하는 메서드
  • on(event, listener) : addListener()과 동일, 이벤트를 생성하는 메서드
  • once(event, listener) : 이벤트를 한 번만 연결한 후 제거
  • event => 이벤트 종류, listener => 이벤트가 발생하면 실행될 함수

(1) 이벤트가 발생할 시 실행할 함수를 정의한다.

(2) 서버에 접속을 하면 이벤트를 발생시킨다.(event_obj를 통해서 발생) 

  • emit(event) : 이벤트를 강제로 발생시키는 함수 (event -> 이벤트 종류)

 

call3 이벤트는 한 번만 실행된다.(once이기 때문)