개발을 하다보면 동기와 비동기 프로그래밍에 대한 내용을 접할 수 있는데 무심코 사용해 왔던 것들이기에 간단하게나마 정리할 필요를 느껴 정리합니다.
자바스크립트에서 동기와 비동기에 대한 내용은 간단하게 위 사진 하나만으로 정리가 가능합니다.
사진을 보고 차이점을 살펴보면 어떠한 과정이 "직렬적"으로 수행되느냐 혹은 "병렬적"으로 수행되느냐의 차이로
왼쪽 작업은 비동기로 동작으로 한번에 여러 테스크가 동시에 병렬적으로 실행된다.
오른쪽 작업은 동기적 동작으로 하나의 테스크가 끝날 때 까지 기다렸다가 결과를 출력 후에 다음 테스크가 실행된다.
한번에 1가지 일만 할 수 있는 싱글 쓰레드 언어인 자바스크립트로 작성된 코드는 한줄씩 동기적으로 실행됩니다.
자바스크립트에서 비동기 로직을 처리하기 위해 콜백 함수를 사용하게 되는데
동작의 처리 순서를 보장하기 위해 여러 개의 콜백 함수가 중첩되어 최악의 가동성인 콜백 지옥이 발생하는 단점이 있습니다.
자바스크립트는 이러한 문제를 해결하기 위해서 다양한 노력을 했고 그만큼 비동기 로직을 처리하기 위한 다양한 방법을 제시했습니다.
동기 | 비동기 | |
---|---|---|
장점 | 설계가 매우 간단하고 직관적 | 여러 동작을 동시에 실행하기에 자원을 효율적으로 사용할 수 있음 |
단점 | 이전 동작의 응답이 있기 전까지 아무것도 하지 못하고 대기 | 동기적 방식보다 복잡함 |
자바스크립트는 싱글 스레드 언어일텐데
즉, 스레드가 하나이기 때문에 동시에 하나의 작업만 할 수 있다는 뜻으로 알고 있다.
그런데 자바스크립트는 어떻게 비동기 처리를 할 수 있을까
위 의문점에 대한 내용은 따로 정리합니다.