JavaScript

JS에서 동기(Synchronous)와 비동기(Asynchronous)

2025년 10월 28일

자바스크립트의 동기(Synchronous)와 비동기(Asynchronous)

자바스크립트는 싱글 스레드(Single Thread) 언어다.

즉, 한 번에 하나의 작업만 실행할 수 있다.

그래서 여러 작업을 효율적으로 처리하기 위해 동기와 비동기 개념이 존재한다.


🔹 1. 동기(Synchronous)

  • 코드가 순서대로 실행된다.
  • 이전 작업이 끝나야 다음 코드가 실행된다.
  • 하나의 작업이 오래 걸리면, 그 다음 작업은 대기 상태가 된다.
console.log("A");
console.log("B");
console.log("C");
// 실행 순서: A → B → C

📌 예시 상황:

사용자가 버튼을 눌렀는데, 서버에서 데이터를 받는 데 5초 걸린다면

그 5초 동안 브라우저는 멈춘 것처럼 보인다.

👉 그래서 긴 작업이 있는 경우 동기 처리는 비효율적이다.


🔹 2. 비동기(Asynchronous)

  • 작업이 완료될 때까지 기다리지 않고 다음 코드를 실행한다.

  • 오래 걸리는 작업은 백그라운드에서 처리되고,

    완료되면 나중에 결과를 받아서 실행된다.

console.log("A");
setTimeout(() => console.log("B"), 1000);
console.log("C");
// 실행 순서: A → C → (1초 후) B

📌 핵심 개념:

  • 비동기 처리를 통해 프로그램이 멈추지 않고 부드럽게 동작한다.
  • 서버 요청, 파일 읽기, 타이머 등 시간이 걸리는 작업에 주로 사용된다.
  • 사용자 경험(UX) 향상에 필수적인 개념이다.

🔹 3. 왜 비동기가 필요한가?

  • 동기 방식으로 서버 통신이나 이미지 로딩을 처리하면

    브라우저가 응답하지 않는 상태가 될 수 있다.

  • 비동기는 이런 상황을 피하면서 동시에 여러 작업을 진행하는 효과를 낸다.

📍 예시로 보면

1️⃣ 서버에 데이터를 요청 (시간이 걸림)

2️⃣ 그동안 사용자는 화면에서 다른 작업을 진행

3️⃣ 서버 응답이 오면 그제서야 결과를 화면에 표시


🔹 4. 이벤트 루프(Event Loop)

비동기 처리가 가능한 이유는 이벤트 루프 구조 덕분이다.

자바스크립트는 한 번에 한 줄만 실행하지만,

비동기 작업은 별도의 큐(Task Queue) 에 저장해 두었다가

메인 스레드(Call Stack) 가 비면 순서대로 다시 실행시킨다.

즉,

“먼저 할 일(동기 코드)부터 처리하고,

나중에 끝난 일(비동기 작업)은 다시 불러서 실행하는 구조”


📘 정리

구분실행 방식특징예시
동기순차적 실행앞의 코드가 끝나야 다음 코드 실행일반 함수 호출
비동기병렬적 처리오래 걸리는 작업을 기다리지 않음setTimeout, 서버 요청, 이벤트 처리

💡 한 줄 요약

자바스크립트는 싱글 스레드지만,

비동기 처리(Event Loop) 를 통해 멈추지 않고 여러 일을 동시에 하는 것처럼 동작한다.