동기식 및 비동기식 JavaScript 배우기
Source: Dev.to
동기식
동기식 프로그래밍에서는 작업이 순차적으로 하나씩 실행됩니다. 각 코드 라인은 이전 라인이 끝날 때까지 기다린 뒤 다음 라인으로 넘어가므로 흐름이 명확하고 예측 가능합니다.
console.log("Start");
console.log("Task 1");
console.log("Task 2");
console.log("End");Output
Start
Task 1
Task 2
End각 문장은 앞선 문장이 완료된 후에만 실행되므로 코드가 고정된 단계‑별 순서대로 수행됩니다.
비동기식
비동기식 프로그래밍에서는 이전 작업이 끝날 때까지 기다리지 않고 작업이 독립적으로 실행될 수 있습니다. 한 작업이 진행되는 동안 다른 코드도 계속 실행되므로 성능과 응답성이 향상됩니다.
console.log("Start");
setTimeout(function() {
console.log("Task 1");
}, 2000);
console.log("End");Output
Start
End
Task 1setTimeout은 비동기적으로 동작하므로 인터프리터가 타이머가 끝날 때까지 기다리지 않고 다음 라인으로 넘어갑니다.
비동기 JavaScript 작동 방식
호출 스택
호출 스택은 JavaScript가 함수를 실행하는 장소이며, LIFO(후입선출) 방식으로 코드를 처리합니다.
웹 API (브라우저)
브라우저가 제공하는 웹 API는 setTimeout, 네트워크 요청, 이벤트 리스너와 같은 작업을 담당합니다. 이러한 API를 호출하면 요청이 브라우저에 전달되어 JavaScript 엔진은 다른 코드를 계속 실행할 수 있습니다.
콜백 큐
웹 API가 작업을 마치면(예: 타이머가 만료되면) 해당 콜백 함수를 콜백 큐에 넣습니다.
이벤트 루프
이벤트 루프는 호출 스택을 지속적으로 확인합니다. 스택이 비어 있으면 콜백 큐에 있는 함수를 호출 스택으로 옮겨 실행합니다. 이 메커니즘을 통해 지연되거나 비동기적인 작업은 메인 동기 코드가 모두 끝난 뒤에 실행됩니다.