JavaScript

[JavaScript] JavaScript는 동기적 처리? 비동기적 처리?

joheamin 2025. 2. 8. 17:25

오늘은 JavaScript의 동작원리에 대해서 알아보겠다.

 

실행 동작은 크게 두가지로 나뉜다.

 

1️⃣ 동기적 처리

2️⃣ 비동기적 처리

 

언어마다 각각 지원하는 처리 방식이 다르며,

오늘은 JavaScript에 처리 방식이 무엇인지 알아보려고 한다.  

 

🔷 동작원리 종류

 

🔹 동기적 처리

 

❓ 동기적 처리란

 

싱글 스레드 기반의 언어로, 한 번에 하나의 작업만 처리할 수 있다.

 

동기적 처리는 자바스크립트의 처리 방식으로

자바스크립트는 실행 단계에서 코드를 위에서 순차적으로 한 줄씩 처리하는 방식을 사용한다.

 

한 줄의 코드 작업이 완료되기 전까지는 그 다음 작업이 실행되지 않게 된다.

 

 

🔍 실생활 예시

 

줄 서서 대기하고 있는 상황에선 앞 사람의 주문이 끝날 때까지 주문을 할 수 없고 대기한다.

 

 

✔️ 동기 장점

  • 순차적으로 실행되는 것을 보장한다.
  • 코드가 단순하고 이해하기 쉽다.

✔️ 동기 단점

  • 시간이 오래 걸릴 수 있다.
  • 중간에 막히면 그 뒤에 작업이 실행되지 않아 막히게 된다.

 

🔹 비동기적 처리

 

비동기적 처리란

 

병열적으로 한번에 여러 작업을 처리해주는 것을 의미한다.

 

특정 코드가 처리되고 있을 때 다음 코드가 기다리지 않고 먼저 처리하며

JS 자체에서는 비동기를 지원하지 않기 때문에 비동기 처리로 정해진 함수를 사용하여 비동기 작업을 할 수 있다.

 

ex ) 지연함수 setTimeOut 를 통하여 비동기적 처리 

 

 

❓ setTimeout 함수란

 

특정한 시간이  지난 다음에 실행 코드를 실행하는 함수이다.

setTimeout 함수에 대해선 따로 포스팅하겠다.

 

 

✔️ 비동기 장점

  • 멀티태스킹이 가능하여 앞선 작업을 기다릴 필요 없이 바로 실행 가능
  • 여러 일을 동시에 실행 하기 때문에 속도가 빠르다.

✔️ 비동기 단점

  • 작업 완료 시점을 예측하기 어렵다.
  • 코드가 복잡해지며, 에러를 찾기가 힘들다.

 

🤔 그럼 자바스크립트는 동기적 일까 비동기적 일까?

 

일반적으로 자바스크립트는 동기적 처리를 지원한다고는 들었는데

비동기적 처리도 가능해보인다.

 

한 가지 언어에서 두 가지 방식을 동시에 지원하는것이 가능한걸까?

 

👉 알아보자

 

✏️ 일단 엄연히 말하면 자바스크립트는 동기식 처리를 하는것이 맞다.

 

자바스크립트는 기본적으로 동기식으로 처리를하며, 순차적으로 한 줄씩 실행한다.

실행되는 작업들은 순서대로 스택 이라는 저장 구조에 쌓이게된다.

 

 

⁉️ 이때 비동기적 처리를 할 수 있게 해주는 setTimeout 함수를 사용할 경우

 

Web API 라는 웹 브라우저가 있다.

웹 브라우저와 서버 간의 데이터 교환을 가능하게 해주는 인터페이스를 의미한다.

 

자바스크립트에서 setTimeout 함수를 실행할 경우 실행문 통째로 Web API로 전달 된다.

 

Web API 는 전달 받은 함수를 JavaScript 대신 처리를 해주게 된다.

그리고 난 이후 JavaScript는 자기 자신의 작업을 그대로 이어서 실행한다. 

 

 

👉 JS 와 WebAPI 의 통신

😲JS : setTimeout 함수네?  
            웹 브라우저야 넘겨줄테니까 대신 좀 처리해줘~
🤓WebAPI : 알겠어 내가 대신 처리해줄게 넌 너꺼 일해~
😲JS : 고마워 나는 바로 다음 작업 처리 할게 ~

 

 

✔️ 결론

 

자바스크립트는 동기적 처리를 지원하는 언어가 맞으며 자바스크립트 자체로는비동기 처리를 할 수 없지만

필요 시에 외부 브라우저에 도움을 요청하여 처리를 하며 비동기 처럼 처리할 수 있게 하는 것 이다.