피드로 돌아가기
async / await: Pausing a Function Without Pausing JavaScript
Dev.toDev.to
Frontend

await를 통한 함수 분할 및 Microtask 기반 비동기 제어 메커니즘 분석

async / await: Pausing a Function Without Pausing JavaScript

Marsha Teo2026년 4월 27일8intermediate

Context

JavaScript의 단일 스레드 환경에서 비동기 처리를 위한 async/await의 내부 동작 방식에 대한 오해 분석. 특히 await가 프로그램 전체를 Block하거나 Macrotask를 생성한다는 잘못된 멘탈 모델의 한계점을 식별함.

Technical Solution

  • await 접점 도달 시 함수 실행을 일시 중단하고 잔여 로직을 Continuation으로 래핑하는 구조 설계
  • 래핑된 Continuation을 Microtask Queue에 스케줄링하여 Macrotask보다 우선 처리하는 우선순위 보장
  • Promise가 아닌 일반 값에 await 적용 시에도 강제적으로 Promise로 변환하여 Microtask로 분리하는 일관된 처리 프로세스 적용
  • async 키워드를 통한 반환 타입의 Promise 강제 지정과 await를 통한 실행 흐름 제어를 분리한 역할 설계
  • 호출자에게 즉시 제어권을 반환하여 Event Loop의 Non-blocking 특성을 유지하는 비동기 흐름 구현

1. await 사용 시 해당 지점에서 함수가 분리되어 Microtask로 처리됨을 인지하고 실행 순서를 예측할 것

2. async 함수 내부에서 await가 없을 경우 동기적으로 동작하며 Promise 객체만 반환함을 주의할 것

3. Microtask가 Macrotask(setTimeout 등)보다 우선순위가 높음을 이용하여 정밀한 실행 타이밍을 설계할 것

원문 읽기