본문 바로가기
개발 · IT/프론트엔드

Node.js 비동기 흐름 쉽게 이해하기

by 플라퉁 2025. 11. 21.
반응형

 

Node.js 비동기 흐름 쉽게 이해하기

node.js 썸네일 이미지

Node.js는 단일 스레드 이벤트 루프 기반으로 동작합니다. 비동기(Asynchronous) 처리 방식이 핵심인데, 초보에게는 흐름이 복잡하게 느껴질 수 있습니다. 이 글에서는 콜백, 프로미스, async/await을 중심으로 이해를 쉽게 돕습니다.

핵심 포인트
  • Node.js는 싱글 스레드 + 이벤트 루프 기반
  • 동기(Sync)와 비동기(Async)의 차이를 이해하자
  • 콜백, 프로미스(Promise), async/await로 흐름 제어 가능
  • 비동기 처리의 장점: I/O 블로킹 방지, 높은 처리량

1. Node.js 이벤트 루프와 비동기 구조

Node.js는 싱글 스레드이지만, 비동기 I/O를 통해 다수 요청을 동시에 처리할 수 있습니다. 이벤트 루프(Event Loop)는 콜백 큐를 체크하며 비동기 작업 완료 시 함수를 실행합니다.

간단한 예: 파일 읽기, HTTP 요청 등 I/O 작업은 비동기로 처리 → 블로킹 없이 다음 코드 실행 가능

2. 동기(Sync) vs 비동기(Async)

  • 동기: 코드 순서대로 실행, 블로킹 발생 가능
    console.log('1');
    console.log('2');
    console.log('3');
  • 비동기: 요청 후 결과를 기다리지 않고 다음 코드 실행, 콜백/프로미스/async-await 사용
    const fs = require('fs');
    fs.readFile('file.txt', 'utf8', (err, data) => {
      if(err) throw err;
      console.log(data);
    });
    console.log('파일 읽기 요청 완료');
    → '파일 읽기 요청 완료'가 먼저 출력될 수 있음

3. 콜백(Callback)으로 흐름 제어

콜백은 비동기 작업이 끝난 후 실행되는 함수입니다.

function doSomething(callback) {
  setTimeout(() => {
    console.log('작업 완료');
    callback();
  }, 1000);
}

doSomething(() => {
  console.log('콜백 실행');
});

출력 순서:

  • 1초 후 '작업 완료'
  • 즉시 '콜백 실행'

🔹 단점: 콜백 지옥(callback hell)이 발생할 수 있음

4. 프로미스(Promise)로 가독성 개선

Promise는 비동기 작업 성공(resolve)과 실패(reject)를 객체로 다룹니다.

function asyncTask() {
  return new Promise((resolve, reject) => {
    setTimeout(() => resolve('완료'), 1000);
  });
}

asyncTask()
  .then(result => console.log(result))
  .catch(err => console.error(err));

콜백보다 체계적이고 가독성이 좋음

5. async/await로 동기처럼 작성

async/await는 Promise 기반으로, 비동기 코드를 동기 코드처럼 읽기 쉽게 작성할 수 있습니다.

function wait(ms) {
  return new Promise(resolve => setTimeout(resolve, ms));
}

async function run() {
  console.log('시작');
  await wait(1000);
  console.log('1초 후 출력');
}

run();

🔹 try/catch로 에러 핸들링 가능

6. 정리 — Node.js 비동기 흐름 요약

  • Node.js는 싱글 스레드 + 이벤트 루프 기반 → I/O 블로킹 최소화
  • 비동기 처리 방식: 콜백 → 프로미스 → async/await 순으로 발전
  • async/await + try/catch = 가장 가독성 높고 유지보수 쉬움
  • 비동기 패턴 이해 = 서버 성능 최적화와 오류 처리 핵심
반응형

댓글