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 요청과 응답 → 리소스 로드 및 렌더링으로 이어지며, 이 모든 과정 속에서 비동기적 데이터 흐름은 웹의 핵심 동력으로 작동한다.
생성자 함수는 new 키워드와 함께 호출되어 새로운 객체를 만드는 함수다. new가 실행되면 먼저 빈 객체가 생성되고, 그 객체의 [[Prototype]]이 생성자 함수의 prototype 속성과 연결된다. 이후 함수 내부의 this는 그 새 객체를 가리키며, 프로퍼티가 초기화된다. 마지막으로 함수가 자동으로 그 객체를 반환하면서 인스턴스가 완성된다. 이렇게 생성자 함수와 new 키워드를 통해 만들어진 객체는 생성자 함수의 프로토타입을 부모로 삼아 메서드와 속성을 공유하며, 프로토타입 체인을 따라 상속 구조를 형성한다.