동기는 데이터의 요청과 결과가 한 자리에서 동시에 일어나는것을 말한다.
요청을 하면 시간이 얼마나 걸리던지 요청한 자리에서 결과가 주어져야 한다.
비동기는 동시에 일어나지 않는다는 의미로 요청한 결과는 동시에 일어나지 않을 거라는 약속이다.
동기와 비동기는 데이터를 처리하는 방식이라고 할 수 있다.
사용자가 데이터를 서버에게 요청한다면
그 서버가 데이터 요청에 따른 응답을 사용자에게 다시 리턴해주기 전까지
사용자는 다른 활동을 할 수 없으며 기다려야만 한다.
그래서 결과가 주어질 때까지 아무것도 못하고 대기해야 하는 단점이 있으나
장점은 설계가 매우 간단하고 직관적이다.
서버에게 데이터를 요청한 후 요청에 따른 응답을 계속 기다리지 않아도 되며
다른 외부 활동을 수행하여도 되고 서버에게 다른 요청사항을 보내도 상관없다.
그래서 요청에 따른 결과가 반환되는 시간 동안 다른 작업을 수행할 수 있으나
동기식보다 설계가 복잡하다는 단점이 있다.
동기와 비동기는 어떤 작업 혹은 그와 연관된 작업을 처리하고자 하는 목적의 차이가 있다.
동기는 추구하는 행위 와 목적이 동시에 이루어지고,
비동기는 추구하는 행위 와 목적이 다를 수도 있고, 동시에 이루어지지도 않는다.
비동기 프로그래밍의 필요성은 주로 다음과 같은 상황에서 나타난다.
성능 향상:
비동기 프로그래밍은 동시에 여러 작업을 수행할 수 있으므로,
하나의 작업이 완료되는 동안 다른 작업을 진행할 수 있다.
이로 인해 전체 작업의 처리 시간을 단축할 수 있으며 사용자 경험을 향상시킬 수 있다.
응답성 향상:
긴 작업을 수행하는 동안 UI가 차단되지 않으므로, 사용자는 다른 작업을 계속 수행할 수 있다. 이는 특히 웹 및 모바일 애플리케이션에서 중요하며,
사용자와의 상호 작용을 유지하면서 백그라운드에서 복잡한 작업을 수행할 수 있다.
자원 최적화:
비동기 프로그래밍을 사용하면 시스템 자원을 보다 효율적으로 사용할 수 있다.
예를 들어, 네트워크 요청을 기다리는 동안 CPU는 다른 계산을 수행할 수 있으며,
이로 인해 전체 시스템의 효율성이 향상된다.
유연성과 확장성:
비동기 코드는 모듈화 및 재사용이 용이하며,
다양한 환경과 상황에서 확장성 있게 동작할 수 있다.
비동기 프로그래밍은 성능과 응답성을 향상시키며,
복잡한 작업을 효율적으로 처리할 수 있게 해준다.
JavaScript와 같은 싱글 스레드 환경에서는 특히 중요한데,
이를 통해 병렬 처리와 같은 여러 작업을 동시에 수행할 수 있는 능력을 확보할 수 있다.