노드(비동기 방식)에서 callback이 필요한 이유.
console.log('Start');
function loginUser(id, password) {
setTimeout(() => {
console.log('사용자 정보 얻음');
return {userId:id};
}, 3000);
}
const user = loginUser('msjwa', 215);
console.log(`${user}님 환영합니다.`);
console.log('End');
코드를 보면 loginUser 함수에서 setTimeout을 사용하여 3초가 지난 후에 '사용자 정보 얻음'을 출력하고, 사용자 id를 반환한다. 해당 코드를 실행하면 아래와 같이 출력된 것을 볼 수 있다.

출력 결과에서 사용자 정보 얻기 전에 'undefined님 환영합니다.'가 먼저 출력됐다. 이유는 간단하다. 노드가 비동기 방식으로 코드를 처리하기 때문이다. 이런 상황을 방지하기 위해 Callback을 사용하여 비동기 작업의 완료를 처리하고 결과를 처리할 수 있습니다.
console.log('Start');
function loginUser(id, password, callback) {
setTimeout(() => {
console.log('사용자 정보 얻음');
const user = {id, password};
callback(user);
}, 3000);
}
loginUser('msjwa', 215, user => {
console.log(`${user.id}님 환영합니다.`);
});
console.log('End');

수정한 코드를 실행하면 사용자 정보를 얻고 출력된 것을 확인할 수 있다.
하지만 문제가 하나 있다. 두 개 이상의 비동기 작업을 순차적으로 실행해야 하는 경우에는 어떻게 될까? 결론 먼저 말하면 Callback hell이 발생한다. Callback의 해결책으로 나온 것이 Promise다. 프로미스에 대한 것은 다음 게시글로 남기겠다.
'Dev > Node.js' 카테고리의 다른 글
| [Node.js] 06 - REPL/JS 파일 사용법 (0) | 2024.04.22 |
|---|---|
| [Node.js] 05 - AJAX / JSON (1) | 2024.04.22 |
| [Node.js] 04 - async/await (0) | 2024.04.22 |
| [Node.js] 03 - Promise (1) | 2024.04.22 |
| [Node.js] 01 - 노드의 시작하기(특성 및 역할) (1) | 2024.04.22 |