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('작업 종료.');
'Node.js' 카테고리의 다른 글
[Node.js] 웹 서버 만드는 방법 | 웹 서버 생성, 포트 설정, 요청에 따른 파일 서비스, 에러 처리 (0) | 2023.08.12 |
---|---|
[Node.js] ➍ 모듈(module) 사용법 | 클래스(class) (0) | 2023.08.11 |
[Node.js] ➋ 모듈(module) 사용법 | m1, m2, m3 (0) | 2023.08.09 |
[Node.js] ➊ 모듈(module) 사용법, exports, require() (0) | 2023.08.08 |
[Node.js] NPM(Node Package Manager), package.json, 모듈로딩 (0) | 2023.08.08 |