Programing/javascript

자바스크립트 비동기 처리 개념 정리(setTimeout, Promise, async/await)

2025. 4. 23. 11:35
반응형

자바스크립트는 기본적으로 싱글 스레드 언어입니다. 하지만 실제 웹 애플리케이션에서는 서버에서 데이터를 불러오거나, 타이머 등을 통해 비동기 작업을 자주 처리하게 됩니다. 이 글에서는 자바스크립트 비동기 처리의 기본 개념부터 대표적인 사용 방식인 setTimeout, Promise, async/await까지 단계별로 정리합니다.


✨ 비동기 처리란?

  • 코드가 순차적으로 실행되지 않고, 결과가 나중에 도착하는 작업을 처리하는 방식입니다.
  • 대표적인 예: API 호출, 파일 읽기, 타이머, 이벤트 리스너

⏳ setTimeout: 가장 기본적인 비동기 처리

console.log("1초 후 실행 시작");
setTimeout(() => {
  console.log("1초 후 실행됨");
}, 1000);
console.log("즉시 실행 완료");
  • setTimeout은 특정 시간 후 함수를 실행합니다.
  • 메인 코드 실행이 멈추지 않고 다음 줄로 넘어갑니다.

🔁 콜백 지옥의 시작

setTimeout(() => {
  console.log("1단계 완료");
  setTimeout(() => {
    console.log("2단계 완료");
    setTimeout(() => {
      console.log("3단계 완료");
    }, 1000);
  }, 1000);
}, 1000);
  • 이런 중첩된 콜백 구조는 **콜백 지옥(callback hell)**이라고 부릅니다.
  • 가독성이 나쁘고 유지보수가 어렵습니다.

🔗 Promise: 비동기 처리의 새로운 방식

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

delay(1000)
  .then(() => {
    console.log("1초 대기 완료");
    return delay(1000);
  })
  .then(() => {
    console.log("2초 대기 완료");
  });
  • Promise는 비동기 작업의 성공(resolve) 또는 **실패(reject)**를 표현합니다.
  • then() 체인을 통해 순차적인 처리가 가능합니다.

⚡ async/await: 가장 직관적인 비동기 처리

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

async function process() {
  console.log("대기 시작");
  await delay(1000);
  console.log("1초 후");
  await delay(1000);
  console.log("2초 후");
}

process();
  • async 함수 안에서 await 키워드를 사용하면 비동기 처리를 동기식처럼 작성할 수 있습니다.
  • 가독성이 높고, 오류 처리를 try...catch로 쉽게 할 수 있습니다.

✅ 비교 요약

방식
주요 특징 단점
setTimeout 기본적인 비동기 호출 중첩이 많아지면 복잡해짐
Promise then()으로 체인 연결 가능 중첩 구조가 여전히 존재 가능
async/await 동기처럼 작성할 수 있어 가독성 우수 async 함수 안에서만 사용 가능

✨ 결론

자바스크립트의 비동기 처리는 필수적인 개념입니다. 단순한 딜레이부터 복잡한 API 요청까지 setTimeout, Promise, async/await는 각각의 쓰임새가 있습니다. 현대적인 코드에서는 async/await을 기본값처럼 사용하고, Promise는 구조적으로 복잡한 경우에 보완용으로 활용하는 것이 좋습니다.

반응형

'Programing > javascript' 카테고리의 다른 글

자바스크립트 이벤트 위임(Event Delegation)과 성능 최적화  (0) 2025.04.24
자바스크립트 debounce와 throttle 차이 및 성능 최적화 예제  (0) 2025.04.24
자바스크립트 IIFE 패턴(즉시 실행 함수 표현식)의 쓰임새와 모던 대안  (0) 2025.04.24
자바스크립트 클로저(Closure)의 개념과 실전 활용 예제  (0) 2025.04.24
자바스크립트 this 키워드 제대로 이해하기 (함수 / 객체 / 클래스에서)  (0) 2025.04.23
자바스크립트 == vs === 비교 연산자의 차이와 올바른 사용법  (0) 2025.04.23
자바스크립트의 데이터 타입 완전 정복 (typeof, null, undefined)  (0) 2025.04.23
자바스크립트의 var, let, const 차이와 올바른 사용법  (0) 2025.04.23
'Programing/javascript' 카테고리의 다른 글
  • 자바스크립트 IIFE 패턴(즉시 실행 함수 표현식)의 쓰임새와 모던 대안
  • 자바스크립트 클로저(Closure)의 개념과 실전 활용 예제
  • 자바스크립트 this 키워드 제대로 이해하기 (함수 / 객체 / 클래스에서)
  • 자바스크립트 == vs === 비교 연산자의 차이와 올바른 사용법
Dongkkase
Dongkkase
개발자로 일하면서 부딪히는 문제풀이가 누군가에게 도움이 되길 바라며
    반응형
  • Dongkkase
    정집사의 개발로그
    Dongkkase
  • 전체
    오늘
    어제
    • All (478)
      • 금융 (61)
      • Programing (295)
        • Algorithm (39)
        • API (2)
        • javascript (122)
        • CSS (8)
        • HTML (10)
        • PHP (15)
        • JAVA (27)
        • JSP (17)
        • JSP 예제 (1)
        • IOS (1)
        • Android (1)
        • Sencha Touche (1)
        • bat file, cmd (0)
        • 디버깅 (2)
        • SQL (21)
        • MS-SQL (1)
        • MySQL (13)
        • 보안 (5)
      • Server (14)
        • Docker (1)
        • Windows (9)
        • Linux (3)
        • jeus (1)
      • Database (6)
      • IT 일반 (15)
      • 리뷰 (38)
        • Book (17)
        • 제품 (2)
        • 영화 소개 (11)
        • 음악 소개 (7)
      • 잡생각 (36)
        • 회고 (3)
        • 컬럼 (4)
        • 자료실 (6)
        • 낙서장 (12)
        • 위시리스트 (2)
        • WOW (1)
        • 덕 (1)
  • 인기 글

  • 최근 댓글

  • 태그

    사고 싶은 책
    IT 관련
    IT·컴퓨터
    디자인패턴
    SQL
    js패턴
    블로그
    읽고 싶은 책
    jsp
    위시리스트
    iT's MY LiFE
    php
    기초
    Java
    It
    IT블로그
    자바
    자바스크립트유틸
    JavaScript
    자바스크립트
Dongkkase
자바스크립트 비동기 처리 개념 정리(setTimeout, Promise, async/await)
상단으로

티스토리툴바