동기(Synchronous)와 비동기(Asynchronous)는 코드 실행 방식을 나타내는 용어입니다.
동기(Synchronous)
동기 코드 실행 방식은 코드를 순차적으로 실행하면서 한 작업이 끝날 때까지 기다리는 방식입니다. 예를 들어, 함수를 호출하면 그 함수의 작업이 완료될 때까지 코드 실행이 중지되며, 그 다음 코드가 실행됩니다
- 장점
- 코드 실행이 순차적으로 진행되므로, 코드의 이해와 디버깅이 쉽습니다.
- 동기식으로 실행되는 함수나 작업이 완료될 때까지 다음 코드 실행을 기다리므로, 코드 실행 순서가 명확하고 예측 가능합니다.
- 단점
- 한 작업이 끝날 때까지 기다려야 하므로, 실행 시간이 길어질 수 있습니다.
- 작업이 블로킹(Blocking)되므로, 다른 작업을 수행할 수 없습니다.
- 병렬 처리를 할 수 없기 때문에, 시스템의 확장성이 제한될 수 있습니다.
비동기(Synchronous)
비동기 코드 실행 방식은 코드를 순차적으로 실행하지 않고, 작업이 완료될 때까지 기다리지 않고 즉시 다음 코드를 실행하는 방식입니다. 이 방식은 작업이 완료될 때까지 기다리지 않기 때문에 다른 작업을 동시에 수행할 수 있습니다. 예를 들어, 네트워크 요청을 보낼 때, 요청이 완료될 때까지 기다리지 않고 다음 코드를 실행하며, 요청이 완료되면 콜백 함수를 호출하여 결과를 받아옵니다.
- 장점
1. 작업이 완료될 때까지 기다리지 않기 때문에, 실행 시간이 짧아집니다.
2. 다른 작업을 수행하면서도 작업을 처리할 수 있기 때문에, 시스템의 확장성이 높아집니다.
3. 비동기식으로 실행되는 함수나 작업이 완료될 때까지 기다리지 않으므로, 다른 코드와 병렬로 실행될 수 있습니다.
- 단점
1. 코드 실행 순서가 예측하기 어렵고, 이해와 디버깅이 어려울 수 있습니다.
2. 동기식에 비해 구현이 복잡할 수 있습니다.
3. 비동기식으로 실행되는 함수나 작업이 완료되면, 콜백 함수를 호출해야 하기 때문에, 콜백 지옥(Callback Hell)이 발생할 수 있습니다.