`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 환경 내에서 사용할 수 있는 몇 가지 대체 로깅 패키지를 사용할 수 있습니다.

유연성을 위한 약속 함수

자바스크립트의 ‘약속’ 구조는 연산의 순차적 배열, 오류 및 성공 결과 이벤트의 별도 처리, 중첩 콜백 함수와 관련된 문제를 방지함으로써 비동기 프로그래밍을 보다 질서 있고 제어 가능한 방식으로 구성할 수 있는 수단을 제공합니다.

이 글도 확인해 보세요:  Vite로 React 앱을 설정하는 방법

모든 내장 함수가 기본적으로 프로미스를 지원하는 것은 아니지만, 유틸리티 모듈의 `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

현재 인스턴스는 단 하나의 인수로 서식 지정 함수를 호출하므로 변경 없이 원본 텍스트를 반환합니다.

이 글도 확인해 보세요:  Python을 사용하여 할 일 목록 프로그램 만들기

유틸리티 모듈에는 더 많은 용도가 있습니다

Node.js 유틸리티 모듈은 앞서 언급한 것 외에도 다양한 추가 유틸리티 함수를 제공합니다. 이러한 기능에는 객체 및 값 검사 기능뿐만 아니라 더 이상 사용되지 않는 더 이상 사용되지 않는 특정 도구를 검사하는 기능이 포함됩니다.

util 모듈을 사용하면 코드의 명확성과 구성은 물론 일반적인 작업 프로세스를 향상시킬 수 있습니다.

By 이지원

상상력이 풍부한 웹 디자이너이자 안드로이드 앱 마니아인 이지원님은 예술적 감각과 기술적 노하우가 독특하게 조화를 이루고 있습니다. 모바일 기술의 방대한 잠재력을 끊임없이 탐구하고, 최적화된 사용자 중심 경험을 제공하기 위해 최선을 다하고 있습니다. 창의적인 비전과 뛰어난 디자인 역량을 바탕으로 All Things N의 잠재 독자가 공감할 수 있는 매력적인 콘텐츠를 제작합니다.