본문 바로가기

Node.js(with codecademy) - 4

@sonic052025. 6. 19. 16:17

Util 모듈

내장 모듈로 코드 유지보수,디버깅,보조적인 기능을 위해 사용

(새 기능을 만들기 보다는 기존 기능을 편리하게 다루도록 도와줌)

 

const util = require('util');

 

 

promisify(Callback -> Promise)

Node.js 비동기 작업은 콜백함수 방식이 많은데 좀 더 깔끔함 Promise방식으로 바꿔주는 util모듈의 함수

 

예제

trails.js에 있는 객체의 값을 callback방식이랑 promise방식으로 가져오기

 

trails.js

module.exports = trails = {
  'Appalachian': {
    'nickname': 'AT',
    'miles': 2189.1,
    'kilometers': 3253,
    'region': 'Appalachian Mountains'
  },
  'Continental Divide': {
    'nickname': 'CDT',
    'miles': 3100,
    'kilometers': 5000,
    'region': 'Rocky Mountains'
  },
  'North Country': {
    'nickname': 'NCT',
    'miles': 4600,
    'kilometers': 7400,
    'region': 'Northern United States'
  },
  'Pacific Crest': {
    'nickname': 'PCT',
    'miles': 2654,
    'kilometers': 4271,
    'region': 'West Coast'
  }
}

 

 

파일 및 util 모듈 불러오기

const trails = require('./trails.js');
const util = require('util');

 

 

callback방식

 

기존의 callback 활용 함수 + callback 함수 + 함수 호출


 

기존의 callback 활용 함수

const getTrailDistance = (trail,callback) => {
    return setTimeout (() => {
        if (trails.hasOwnProperty(trail)) {
            const foundTrail = trails[trail];
            callback(null,foundTrail);
        } else {
            callback(new Error('Trail not found!'));
        }
    },1000);
};

 

 

기존의 callback 함수

function callback(error,trailData){
    if(error){
        console.error(error.message);
        process.exit(1);
    }
    else{
        const nickname = trailData.nickname;
        const mi = trailData.miles;
        console.log(`The ${nickname} is ${mi} miles long!`);
    }
}

 

 

함수 호출

getTrailDistance('North Country',callback);

 

 

Promise 방식

 

promisify로 callback기반 함수를 promise방식으로 변환

const getTrailDistancePromise = util.promisify(getTrailDistance);

 

 

promise(바뀐 방식)으로 호출

getTrailDistancePromise('North Country')
  .then(trailData => {
    const mi = trailData.miles;
    const nickname = trailData.nickname;
    console.log(`The ${nickname} is ${mi} miles long!`);
  })
  .catch(error => {
    console.error(error.message);
  });

 

 

마무리

 

전체 코드

const trails = require('./trails.js');

const util = require('util');

const getTrailDistance = (trail, callback) => {
  return setTimeout(() => {
    if (trails.hasOwnProperty(trail)) {    
      const foundTrail = trails[trail];    
      callback(null, foundTrail)
    } else {
      callback(new Error('Trail not found!'))
    }
  }, 1000);
}

function callback (error, trailData) {
  if (error) {
    console.error(error.message)
    process.exit(1)
  } else {
    const mi = trailData.miles;   
    const nickname = trailData.nickname;
    console.log(`The ${nickname} is ${mi} miles long!`)
  }
}

getTrailDistance('North Country', callback)


const getTrailDistancePromise = util.promisify(getTrailDistance);

getTrailDistancePromise('North Country')
  .then(trailData => {
    const mi = trailData.miles;
    const nickname = trailData.nickname;
    console.log(`The ${nickname} is ${mi} miles long!`);
  })
  .catch(error => {
    console.error(error.message);
  });

 

 

결과

The NCT is 4600 miles long!
The NCT is 4600 miles long!

 

'개발' 카테고리의 다른 글

Node.js(with codecademy) - 5  (0) 2025.06.20
Node.js(with codecademy) - 3  (2) 2025.06.18
Node.js(with codecademy) - 2  (1) 2025.06.17
백준 11650 - 좌표정렬하기  (0) 2025.06.17
sonic05
@sonic05 :: sonic05 님의 블로그

sonic05 님의 블로그 입니다.

공감하셨다면 ❤️ 구독도 환영합니다! 🤗

목차