동기와 비동기, 차이가 무엇일까?
소프트웨어 개발 개념JS

JS개발을 처음으로 시작하면 가장 먼저 만나는 개념 중 하나가 바로 동기와 동기다.
JS에서 "동기(Synchronous)"와 "비동기(Asynchronous)"는 코드 실행 방식의 차이를 나타내는 개념이다.
동기 (Synchronous)
동기는 작업을 순차적으로 진행하는 것 을 의미한다.
앞선 작업이 완료되기 전까지는 그다음 작업을 시작할 수 없다
1console.log("작업을 시작합니다!!"); 2let result = prompt("값을 입력하세요:"); // 동기적 대기 방식 3console.log("입력된 값 : " + result); 4console.log("작업이 끝났습니다!!");
이 JS 코드를 살펴보자면, 작업의 처리가 위에서 아래로 순차적으로 실행된다.
장점
😀 이해하기 쉽다
- 코드가 순차적으로 실행되어 흐름이 단순하고 예측 가능하다
단점
❌ 비효율적이다
- 긴 작업이 있을 때, 그 작업을 처리하는 동안 다른 작업을 처리할 수 없어서 동시에 여러 작업을 처리해야 하는 상황에서 비효율적이다
비동기 (Asynchronous)
비동기는 작업을 동시에 처리하는 방식을 의미한다.
전의 작업을 기다릴 필요 없이 다른 작업을 진행할 수 있다.
🤷♂️ 실제로는 비동기 처리는 실행할 작업을 예약하고, 그 작업이 완료되기를 기다리지 않고 넘어가서 다음 작업을 진행하게 된다
1console.log("작업을 시작합니다!!"); 2 3setTimeout(() => { // 비동기적 대기 방식 4 console.log("비동기 작업이 완료되었습니다."); 5}, 2000); 6 7console.log("작업이 끝났습니다!!");
이 JS 코드를 살펴보면, setTimeout을 사용하여 2초 후에 작업을 비동기적으로 실행할 수 있게 한다.
장점
🚀 효율적이다
- 기다리는 동안 다른 작업을 미리 처리할 수 있어 시간 낭비를 줄일 수 있다
단점
❓ 복잡하다
- 여러 작업이 동시에 진행되므로 코드 흐름을 파악하기 어려울 수 있다. JS에서는 "콜백 지옥" 같은 문제가 발생하기도 한다
동기 vs 비동기
집에서 배달을 시켜먹는 시나리오를 가정하자,

왼쪽 그림에서는 배달 진행이 완료될때까지 아무 작업도 할 수 없다! -> 동기적 상황
오른쪽 그림에서는 배달이 진행되는 중에도, 다른 작업을 계속할 수 있다 -> 비동기적 상황
동기와 비동기를 언제 사용해야 할까?
동기를 사용하는 상황
🚶♂️➡️ 작업의 순서가 먼저 실행되어야 하는 경우
- 앞선 작업이 반드시 끝난 후에 다음 작업을 실행해야 하는 경우에는 동기를 사용한다
🚗 작업의 처리 완료 시간이 빠르게 끝나는 경우
- 단순한 계산이나 로직의 경우 비동기 작업이 필요하지 않다
비동기를 사용하는 상황
☕ 병렬 처리가 필요한 경우
- 여러 작업을 동시에 처리하거나, 작업 완료까지 다른 작업을 진행햐야 하는 경우에는 비동기를 사용한다
❓ 작업의 처리 완료 시간을 알 수 없거나 느린 경우
- 파일을 읽거나 네트워크 통신을 하는 경우 처리 완료 시간이 길 수 있기에 비동기를 사용해서 처리한다
동기, 비동기 중 비동기가 더 좋다?
❌❌ 두 방식 중 더 좋은 방식은 없다!
비동기는 효율적이지만 항상 적합한 건 아니고, 동기는 이해하기 쉽지만 성능 문제를 일으킬 수 있다
따라서 상황에 맞게 적절히 사용하는 것이 최선이다!