본문 바로가기

Node.js

[Node.js] ➌ 모듈(module) 사용법 | m4, m5

반응형

 

 

m4.js

- createServer: 서버를 생성하는 함수
- readFile: 파일을 읽는 함수
- join: 파일 경로를 조합하는 함수

 

const someObj = {
  createServer: function (requestListener) { ... },
  readFile: function (filename, callback) { ... },
  join: function (...args) { ... },
};

 


 

1. createServer 함수

- createServer 함수는 웹 서버를 생성하는데 사용한다.
- requestListener라는 매개변수를 받는다.
- requestListener는 클라이언트의 요청(request)과 서버의 응답(response)을 처리하는 함수이다.

 

createServer: function (requestListener) {
  requestListener(
    { url: "/hello.html" },
    {
      writeHead: function (statusCode, headers) {
        console.log("브라우저에 헤더 전달");
        console.log(statusCode, headers);
      },
      write: function (data) {
        console.log("브라우저에 바디 전달");
        console.log(data);
      },
      end: function (data) {
        console.log(data);
        console.log("응답이 완료됨을 나타내는 신호 전송.");
      },
    }
  );
  ...
}

 

requestListener 함수가 호출되면, 다음의 각 단계를 거쳐 웹 서버가 응답한다.


1. writeHead: 응답 헤더를 설정. 이 설정은 브라우저에 헤더를 전달.
2. write: 응답 본문(body)를 전송. 이 단계에서 브라우저에 데이터를 전달.
3. end: 응답을 완료했음을 알리는 신호를 전송.

 

 


 

 

2. readFile 함수

- readFile 함수는 파일을 읽는 기능을 제공한다.
- filename과 callback이라는 두 매개변수를 받는다.
- filename은 읽어올 파일의 이름(경로 포함)
- callback 함수는 파일을 읽은 후 호출. 첫 번째 인자는 에러 객체, 두 번째 인자는 파일의 내용.

readFile: function (filename, callback) {
  console.log(filename, "읽기 작업.");
  callback(new Error("에러 발생!!!"));
  callback(null, "읽은 파일 내용.");
},

 

readFile 함수에서 가상의 에러 발생시 에러를 출력한다.
그 후, 파일을 성공적으로 읽었다고 가정하여 파일 내용을 전달한다.

 

 


 

 

3. join 함수

join 함수는 여러 파일 경로를 조합하는 기능을 제공한다.
이 함수는 전개 연산자(...args)를 사용하여 동적으로 여러 경로를 받는다.

join: function (...args) {
  let result = args.shift();
  for (let i = 0; i < args.length; i++) {
    result += require("path").sep + args[i];
  }
  return result;
},

 

함수는 첫 번째 경로를 result 변수에 저장하고, 나머지 경로를 합친다.
require("path").sep를 사용하여 경로 구분자(separator)를 얻고, 각 경로를 연결하여 최종적인 경로를 반환한다.

반응형

 

 


 

m5.js

console.log('범용성이 필요한 확장 모듈에서 많이 사용하는 exports 방식');

const os = require('node:os');
const fs = require('node:fs');

function logger(options) {
  let logfile;
  
  if (options && options.target === 'file') {
    logfile = fs.createWriteStream(options.filename || 'logger.log', { flags: 'a' });
  }

  return {
    log: function (msg) {
      if (logfile) {
        logfile.write(`<log> ${msg}${os.EOL}`);
      } else {
        console.log(`<log> ${msg}`);
      }
    },
    error: function (msg) {
      if (logfile) {
        logfile.write(`<error> ${msg}${os.EOL}`);
      } else {
        console.log(`<error> ${msg}`);
      }
    },
  };
}

module.exports = logger;

 


logger 함수

- logger 함수는 사용자로부터 받은 options에 따라 로그를 파일 또는 콘솔에 기록하는 기능을 제공한다.
- options 객체에 다음과 같은 선택적 속성(properties)가 존재할 수 있다.

  • target: 로그 기록 대상 (기본값은 'console')
  • filename: 파일로 로그를 기록할 때 사용되는 파일 이름 (기본값은 'logger.log')

- 함수 내에서 기록 대상과 파일 이름에 따라 로그 메시지를 저장하거나 콘솔에 출력하는 로직이 구현되어 있다.

  • log(msg): 일반 로그 메시지를 출력
  • error(msg): 에러 메시지를 출력

 

 


 

기본 콘솔 로깅 

const logger = require('./m5')();

logger.log('작업 시작.');
logger.error('에러 발생...');
logger.log('작업 종료.');

 

파일 로깅

const logger = require('./m5')({ target: 'file', filename: 'output.log' });

logger.log('작업 시작.');
logger.error('에러 발생...');
logger.log('작업 종료.');

 

기본 파일 이름('logger.log')으로 로깅 

const logger = require('./m5')({ target: 'file' });

logger.log('작업 시작.');
logger.error('에러 발생...');
logger.log('작업 종료.');

 

 

 

 

 

반응형