[nodejs] 비동기식 코드 리팩토링
Node.js에서 비동기식 코드를 작성할 때 코드의 가독성을 높이고 유지보수성을 향상시키기 위해 리팩토링하는 것이 중요합니다. 이 글에서는 비동기식 코드를 개선하기 위한 몇 가지 팁을 소개하겠습니다.
목차
Callback 함수 대신 Promise나 Async/Await 사용
기존의 콜백 함수를 사용한 비동기식 코드는 콜백 지옥(callback hell)을 초래할 수 있습니다. 이러한 문제점을 해결하기 위해 Promise나 async/await을 사용하는 것이 좋습니다.
// 콜백 함수
getData(function(err, data) {
if (err) {
console.error(err);
} else {
processData(data, function(err, result) {
if (err) {
console.error(err);
} else {
saveData(result, function(err) {
if (err) {
console.error(err);
} else {
console.log('Data saved successfully');
}
});
}
});
}
});
// Promise
getData()
.then(data => processData(data))
.then(result => saveData(result))
.then(() => console.log('Data saved successfully'))
.catch(err => console.error(err));
// Async/Await
try {
const data = await getData();
const result = await processData(data);
await saveData(result);
console.log('Data saved successfully');
} catch (err) {
console.error(err);
}
모듈화 및 함수 분리
코드를 작게 분리하고 모듈화하여 각각의 함수가 명확한 역할을 수행하도록 하는 것이 좋습니다.
// 비모듈화된 코드
function getDataAndProcess() {
fetchData(function(err, data) {
if (err) {
console.error(err);
} else {
processData(data, function(err, result) {
if (err) {
console.error(err);
} else {
saveData(result, function(err) {
if (err) {
console.error(err);
} else {
console.log('Data saved successfully');
}
});
}
});
}
});
}
// 모듈화된 코드
function getDataAndProcess() {
getData()
.then(processData)
.then(saveData)
.then(() => console.log('Data saved successfully'))
.catch(err => console.error(err));
}
에러 핸들링
비동기식 코드에서 에러를 적절하게 처리하는 것은 매우 중요합니다. Promise나 async/await을 사용할 때는 .catch()를 이용하여 에러를 처리하고, 콜백 함수에서는 에러를 첫 번째 인자로 전달하여 처리할 수 있습니다.
// Promise 에러 핸들링
getData()
.then(data => processData(data))
.then(result => saveData(result))
.then(() => console.log('Data saved successfully'))
.catch(err => console.error(err));
// Async/Await 에러 핸들링
try {
const data = await getData();
const result = await processData(data);
await saveData(result);
console.log('Data saved successfully');
} catch (err) {
console.error(err);
}
이러한 팁을 활용하여 비동기식 코드를 개선하면 가독성이 증가하고 유지보수가 용이해질 것입니다.
참고: MDN Web Docs - Promises, MDN Web Docs - Async/Await