동기 / 비동기
동기
- 동시에 일어난다는 의미
- 요청이 들어온 순서대로 하나씩 처리한다.
- 순서에 맞게 진행되는 장점이 있으나, 여러가지 요청을 동시에 처리할 수 없다.
비동기
- 요청과 결과가 동시에 일어나지 않는다.
- 하나의 요청에 따른 응답을 바로 하지 않아도, 그 대기시간 동안 또 다른 요청에 대한 처리를 할 수 있다.
- 여러 개의 요청을 동시에 할 수 있다는 장점이 있으나, 동기 방식보다 속도가 떨어질 수 있다.
비동기처리
특정 코드의 연산이 끝날 때까지 코드의 실행을 멈추지 않고 다음 코드를 먼저 실행하는 자바스크립트의 특성을 말한다.
자바스크립트에서 비동기 처리가 필요한 이유는, 화면에서 서버로 데이터를 요청했을 때 서버가 언제 그 요청에 대한 응답을 줄지도 모르는데 마냥 다른 코드를 실행시키지 않고 기다릴 순 없기 때문이다. 비동기가 아니고 동기 처리라면 코드 실행하고, 기다리고, 실행하고 기다리고를 반복하면 애플리케이션이 열리는데 오랜 시간이 걸릴 것이다.
자바스크립트의 비동기적 프로그래밍에는 뚜렷하게 구분위는 세 가지 패러다임이 있다
Callback(콜백)
Promise(프라미스)
Generator(제네레이터)
- 제네레이터 자체는 비동기적 프로그래밍을 지원하지 않는다.
- 제네레이터를 비동기적으로 사용하려면, 프라미스타 특수한 콜백을 사용한다.
사용자 입력 외에, 비동기적 테크닉을 사용해야 하는 경우는 크게 세 가지가 있다.
- Ajax 호출을 비롯한 네트워크 요청시
- 파일을 읽고 쓰는 등의 파일 시스템 작업시
- 의도적으로 시간 지연을 사용하는 기능시 (알람)
비동기 처리의 예시
- Fetch API
- setTimeout()
- setInterval()