우리가 현재 JS로 코드를 짜면서 async/await을 걸어서 비동기 처리를 하고 JS로 작성한 코드가 동작할 때는 코드를 한줄 한줄 완료해 가면서 동기적으로 처리된다는 것도 알고 있다.
하지막 이건 어렴풋한 개념일 뿐 정확한 개념에 대해서 알아보자
동기(synchronous)와 비동기(asynchronous)는 프로그래밍에서 코드의 실행 방식에 대한 개념이다.
아닐 비(非)를 기준으로 상반된 개념을 가진다. 그럼 동기와 비동기에 대해서 상세하게 알아보자
영문과 한자어, 국어사전의 어원적 해석을 보자! 네이버 어학사전에 따르면 동기의 각 언어별 해석은 다음과 같다.
영문 synchronous : 동시 발생(존재)하는, 실시간의
한자 同期 : 같은 시기(時期). 같은 무렵
한글 동기 : 같은 기간. 또는 같은 시기
결국 세가지 경우 모두 같은 시간적 부분을 의미한다.
그렇다면 작업이 A, B, C 가 있을 때 동기는 같은 시간에 동작해야하는 것이지 않을까?
결과적으로는 잘못된 생각이다. 프로그래밍에서 의미하는 동기는 A,B,C의 각각의 작업에 대한 범위가 아닌 A라는 하나의 작업에대해 요정과 결과가 동시에 이루어지는 것을 의미한다.
동기는 작업을 순서대로 진행하는 것, 프로그램이 작업을 실행할 때, 해당 작업이 끝날 때까지 다른 작업을 기다리는 것을 의미한다.
즉, 동기 방식에서는 어떤 작업을 실행하고 그 결과를 받아오기 전까지는 다른 작업을 실행하지 않는다. 이것은 일종의 직렬적인 처리 방식으로 작업의 순서가 보장된다.
위의 동기의 의미와 언어별 해석은 완전히 상반된 결과를 가지고 있다. 오히려 언어별 해석은 같은 시간에 병렬적인 처리를 해야될 것 같은 의미를 지니고 있지만, 프로그래밍에서 동기는 순차적이고 단계적인 의미를 가진다.
동기 방식은 직렬적으로 동작하기 때문에 아래와 같은 장단점을 가지게 된다.
비동기는 동기의 반대적 개념이라고 생각하면된다.
비동기는 작업의 완료를 기다리지 않고 다음 작업을 실행하는 것, 한 작업이 실행될 때, 다른 작업도 동시에 실행되는 것 을 의미한다.
작업이 순차적으로 진행되는 것이 아니라, 여러개가 한번에 병렬적으로 동작한다. 비동기 방식에서는 작업을 요청한 후, 그 결과를 기다리지 않고 다음 작업을 실행한다.
비동기 방식은 동기방식과 반대되는 장단점을 가진다.
참고자료(출처)
동기, 비동기란? (+Promise, async/await 개념)
네이버 사전
동기, 비동기 처리