`util` 모듈에는 사용자가 Node.js 애플리케이션 내에서 데이터에 대한 디버깅, 검사 및 서식 지정 작업을 수행할 수 있는 다양한 기능이 탑재되어 있습니다.
이 도구 세트의 유용성을 극대화하는 데 도움이 되는 일련의 사용 사례를 살펴봄으로써 ‘util’ 모듈의 다양한 기능을 살펴봅니다.
더욱 편리해진 로깅
로깅은 디버깅, 감독 및 감사를 목적으로 변수 값, 메시지 오류 및 전자 프로그램의 진행 상황을 포함하여 주목할 만한 데이터 또는 발생 사항을 문서화하는 작업을 수반합니다.
Node.js 유틸리티 모듈은 `util.debuglog()` 함수를 통해 실용적인 로깅 메커니즘을 제공합니다. 이 기능을 통해 사용자는 접두사를 사용하여 디버그 로깅 함수를 개발할 수 있으며, 이러한 함수의 기능은 `NODE_DEBUG` 환경 변수를 통해 활성화 또는 비활성화할 수 있습니다. 이에 대한 데모는 다음과 같습니다:
// index.js
const util = require("util");
const debug = util.debuglog("myapp"); // initialize debug logger
debug("This is a debug message"); // MYAPP 39668: This is a debug message
이 그림은 프로세스 식별자와 함께 메시지를 콘솔에 기록하는 “myapp” 네임스페이스라는 기본 디버깅 로거를 구현하는 절차를 보여 줍니다.
스크립트를 실행하기 전에 NODE\_DEBUG 환경 변수를 지정된 네임스페이스로 설정하세요. “export NODE\_DEBUG=[namespace]” 명령을 실행하면 됩니다.
NODE_DEBUG=myapp node index.js
여러 디버깅 컨텍스트를 사용할 수 있도록 하려면 쉼표를 삽입하여 원하는 네임스페이스를 구분합니다.
NODE_DEBUG=myapp,myapp2,myapp3 node index.js
NODE\_DEBUG 환경 변수에 네임스페이스가 없으면 DebugLog가 실행되는 동안 해당 네임스페이스를 무시하게 됩니다.
주어진 유틸리티 패키지에서 제공하는 `debuglog` 메서드를 사용하는 것이 기본 로깅 요구 사항에 유리하지만, 보다 복잡한 로깅 시스템이 필요한 경우 이러한 요구 사항을 수용하기 위해 Node.js 환경 내에서 사용할 수 있는 몇 가지 대체 로깅 패키지를 사용할 수 있습니다.
유연성을 위한 약속 함수
자바스크립트의 ‘약속’ 구조는 연산의 순차적 배열, 오류 및 성공 결과 이벤트의 별도 처리, 중첩 콜백 함수와 관련된 문제를 방지함으로써 비동기 프로그래밍을 보다 질서 있고 제어 가능한 방식으로 구성할 수 있는 수단을 제공합니다.
모든 내장 함수가 기본적으로 프로미스를 지원하는 것은 아니지만, 유틸리티 모듈의 `util.promiseify` 메서드를 사용하여 기존 콜백에 의존하는 함수를 프로미스와 함께 작동하도록 변환할 수 있습니다.
주어진 메서드는 기존 콜백 시스템을 사용하는 함수를 프로미스를 사용하는 다른 함수로 변환합니다.
const util = require("util");
// Callback version
function callbackFunction(arg1, arg2, callback) {
// Asynchronous operation
// Invoke callback with error (if any) and result
}
// Promisify callbackFunction
const callbackFunctionPromise = util.promisify(callbackFunction);
// Promisified version
callbackFunctionPromise(arg1, arg2)
.then((result) => {
// Process result
})
.catch((error) => {
// Handle error
});
함수의 콜백 기반 반복을 약속을 사용하는 대체 구현으로 변환하기 위해 util.promiseify() 메서드가 사용되었습니다.
앞서 언급한 변환을 통해 `chain then` 및 `catch` 블록을 활용할 수 있을 뿐만 아니라 `try-catch` 메커니즘을 구현하고 비동기 코드 관리를 개선할 수 있습니다.
익숙한 메서드로 문자열 서식 지정
Node.js 유틸리티 모듈은 `util.format()`이라는 서식 지정 함수를 제공하며, 이는 Bash와 같은 셸 스크립팅 언어와 C/C++ 프로그래밍 언어 계열의 `printf` 함수가 나타내는 동작과 유사하게 지정된 형식으로 문자열 표현을 생성할 수 있도록 해줍니다.
`util.format()` 함수는 0개 이상의 형식 지정자(문자열의 경우 `%s`, 숫자의 경우 `%d`)로 구성된 형식 문자열을 받습니다. 이 함수는 지정된 자리 표시자를 채우는 데 사용되는 인수를 얼마든지 받을 수도 있습니다.
const util = require("util");
const name = "Bonnie";
const age = 30;
const formattedString = util.format(
"My name is %s, and I am %d years old.",
name,
age
);
console.log(formattedString); // My name is Bonnie, and I am 30 years old.
%s 및 %d. 전자의 자리 표시자인 %s는 문자열을 삽입하기 위한 것이고, 후자의 자리 표시자인 %d는 숫자를 삽입하기 위해 지정되었습니다. 유틸리티 함수 “util.format”을 호출하면 적절한 데이터, 즉 이름 “name”과 숫자 “age”를 호출하여 각각의 자리 표시자를 채웁니다.
사양에 상관 주석이 없는 경우 util.format 메서드는 이를 수정하지 않고 변경 없이 문자열을 표시합니다:
const util = require("util");
const formattedString = util.format("My name is %s");
console.log(formattedString); // My name is %s
현재 인스턴스는 단 하나의 인수로 서식 지정 함수를 호출하므로 변경 없이 원본 텍스트를 반환합니다.
유틸리티 모듈에는 더 많은 용도가 있습니다
Node.js 유틸리티 모듈은 앞서 언급한 것 외에도 다양한 추가 유틸리티 함수를 제공합니다. 이러한 기능에는 객체 및 값 검사 기능뿐만 아니라 더 이상 사용되지 않는 더 이상 사용되지 않는 특정 도구를 검사하는 기능이 포함됩니다.
util 모듈을 사용하면 코드의 명확성과 구성은 물론 일반적인 작업 프로세스를 향상시킬 수 있습니다.