async/await는 Promise then/catch의 문법 설탕으로, await 뒤 코드는 마이크로태스크로 이어져 메인 스레드를 막지 않는다. fetch는 HTTP 4xx/5xx여도 기본은 fulfilled이므로 res.ok를 확인해 throw로 에러를 명시적으로 만들고 try/catch(필요 시 rethrow)로 다룬다.
Promise는 비동기 작업의 미래 결과를 담는 객체로, 콜백 헬 없이 깔끔한 흐름 제어와 에러 처리가 가능하다. then/catch/finally 체이닝 또는 async/await + try/catch 방식으로 소비하며, 둘 다 내부적으로 같은 동작을 한다. 즉, Promise는 비동기를 ‘예측 가능한 순서’로 관리하게 해주는 핵심 도구다.
자바스크립트는 싱글 스레드 언어이지만, 브라우저의 Web API·Callback Queue·Microtasks Queue·Event Loop가 함께 동작하면서 마치 여러 작업이 동시에 실행되는 듯한 논블로킹 환경을 만든다. 이 과정에서 이벤트 루프는 콜스택이 비는 순간마다 대기 중인 콜백을 실행시켜, 동시성을 흉내 내는 조율자(orchestrator) 역할을 한다. 결국 비동기 동작의 핵심은 자바스크립트 엔진이 아니라, 브라우저 런타임이 조율하는 실행 순서의 메커니즘에 있다.
자바스크립트의 비동기 처리는 긴 작업으로 인해 프로그램이 멈추지 않도록 하는 핵심 메커니즘이다. setTimeout이나 addEventListener 같은 함수들은 이벤트 루프를 통해 실행 순서를 효율적으로 조율하며, 이러한 비동기 동작 덕분에 웹은 빠르고 반응성 높은 환경을 유지할 수 있다. 특히 AJAX는 서버와 클라이언트가 페이지 새로고침 없이 데이터를 주고받게 해주며, 이때 사용되는 API는 애플리케이션 간 통신을 가능하게 하는 인터페이스 역할을 한다. 결국 사용자가 웹사이트에 접속하는 과정은 DNS 조회 → TCP/IP 연결 → HTTP 요청과 응답 → 리소스 로드 및 렌더링으로 이어지며, 이 모든 과정 속에서 비동기적 데이터 흐름은 웹의 핵심 동력으로 작동한다.