[Node.js] 02 - Callback

2024. 4. 22. 02:39·Dev/Node.js

노드(비동기 방식)에서 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
'Dev/Node.js' 카테고리의 다른 글
  • [Node.js] 05 - AJAX / JSON
  • [Node.js] 04 - async/await
  • [Node.js] 03 - Promise
  • [Node.js] 01 - 노드의 시작하기(특성 및 역할)
min8282
min8282
  • min8282
    min8282
    min8282
  • 전체
    오늘
    어제
    • 분류 전체보기 (110)
      • Security (33)
        • System & Network (2)
        • Application (5)
        • Cloud (20)
      • Dev (18)
        • Node.js (12)
        • Hadoop (3)
        • BOJ (2)
      • Web3 & Blockchain (2)
        • Web3 (2)
      • K-Shield.Jr (15)
      • Web Security Academy (3)
      • Wargame (13)
        • Dreamhack (3)
        • Bandit (10)
      • NS (16)
        • CTF (6)
  • 블로그 메뉴

    • 홈
  • 링크

    • github
  • 공지사항

  • 인기 글

  • 태그

    prepared statement
    정보처리기사
    정처기 필기
    AWS SSM
    web security academy
    메타코드
    Session Manager
    systems manager
    splunk db connect
    정처기
    AWS CLI
    aws 트리거
    티스토리챌린지
    web3 보안
    오블완
    메타코드M
    File Upload
    스마트컨트랙트
    amazon s3 트리거
    metacode
    metacodem
    탈중앙화
    스마트 컨트랙트
    정처기필기
    ESC1
    보안 그룹
    aws lambda
    Path Traversal
    web3
    ELB
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
min8282
[Node.js] 02 - Callback
상단으로

티스토리툴바