자바스크립트의 비동기 이해하기
프론트엔드 중요 개념 - Javascript 내용 정리 3편입니다. 웹 사이트의 복잡한 동작들을 구현할 수 있는 JavaScript의 작동 방식과 비동기 개념입니다.
동기와 비동기
프로그래밍에는 크게 두 가지 실행 방식이 있습니다.

- 동기(Synchronous): 코드가 작성된 순서대로 한 번에 하나의 작업을 처리. 각 작업이 끝날때까지 다음 작업은 기다림.
- 비동기(Asynchronous): 작업 완료를 기다리지 않고 작업을 동시에 여러 작업 실행. 작업이 끝나면 결과를 알려주는 방식.
동기 방식은 구현이 쉽고 직관적이지만, 오래 걸리는 작업이 있으면 전체 프로그램이 그동안 멈춰버립니다. 반대로 비동기 방식은 코드 실행 시간이 짧지만, 그에 따른 여러 문제들이 발생할 수 있습니다.
자바스크립트에서는?
자바스크립트는 싱글스레드 언어입니다. 즉, 한 번에 한 가지 작업만 처리할 수 있습니다. 그런데 브라우저 환경에서 네트워크 요청 fetch(), 파일 선택 showOpenFilePicker() 같은 작업은 시간이 오래 걸릴 수 있습니다. 만약 동기 방식으로 처리하면, 응답을 기다리는 동안 브라우저 전체가 멈추게 됩니다.
이를 해결하기 위해서 자바스크립트는 비동기 API를 제공합니다. 오래 걸리는 작업을 백그라운드에서 처리하고, 완료되면 콜백 함수를 실행하는 방식입니다. 이렇게 하면 브라우저가 멈추지 않고 다른 작업을 계속할 수 있습니다.
🌞
좀 더 설명을 보충하자면.. 싱글스레드 언어라는 뜻은 JavaScript 엔진 실행 구조 자체가 하나의 JS 함수만을 실행할 수 있다는 구조라는 의미입니다. 동기 실행 방식은 논리적 실행흐름으로 작업을 순차적으로 (한 작업이 끝나야 다음 작업이 실행)된다는 의미입니다. JavaScript는 싱글스레드지만, 브라우저가 비동기 실행 방식을 지원하기때문에 비동기 실행도 가능해진 것입니다.