본문 바로가기
javascript/모던 자바스크립트 Deep Dive

동기 처리(Synchronous)와 비동기 처리(Asynchronous)

by yongfront 2024. 2. 21.
반응형
SMALL

동기 처리(Synchronous)와 비동기 처리(Asynchronous)는 프로그래밍에서 작업 실행 순서와 완료 시점을 다루는 두 가지 주요 방식입니다. 이 두 방식은 특히 웹 개발과 같이 I/O(Input/Output) 작업이 빈번한 환경에서 중요한 개념입니다.

동기 처리 (Synchronous)

동기 처리는 한 작업이 완료된 후에 다음 작업이 실행되는 방식입니다. 이는 작업 실행 순서가 코드의 작성 순서와 일치하며, 어떤 작업을 실행하는 동안 프로그램은 해당 작업의 완료를 기다립니다. 동기 처리는 코드의 가독성이 높고 로직을 이해하기 쉽지만, I/O 작업 등 시간이 많이 소요되는 작업을 처리할 때 프로그램의 실행이 블로킹(대기 상태)되어 전체적인 효율성이 떨어질 수 있습니다.

console.log('첫 번째 작업 시작');
// 시간이 많이 걸리는 작업
console.log('첫 번째 작업 완료');
console.log('두 번째 작업 시작');
// 다음 작업
console.log('두 번째 작업 완료');

비동기 처리 (Asynchronous)

비동기 처리는 현재 실행 중인 작업이 완료되지 않았더라도, 다음 작업을 바로 실행할 수 있는 방식입니다. 비동기 작업은 주로 네트워크 요청, 파일 시스템 작업 등의 I/O 작업에 사용됩니다. JavaScript에서는 Promise, async/await, callback 함수 등을 통해 비동기 처리를 구현할 수 있습니다. 비동기 처리는 프로그램의 실행 흐름을 블로킹하지 않아 애플리케이션의 반응성과 성능을 향상시킬 수 있으나, 코드의 복잡성이 증가하고 에러 처리가 어려워질 수 있습니다.

console.log('첫 번째 작업 시작');
setTimeout(() => {
  console.log('첫 번째 작업 완료');
}, 2000); // 2초 후에 실행될 비동기 작업
console.log('두 번째 작업 시작');
// 두 번째 작업은 첫 번째 작업의 완료를 기다리지 않고 바로 실행됨

비동기 처리의 예: Promise

let promise = new Promise(function(resolve, reject) {
  // 비동기로 수행될 작업
  setTimeout(() => resolve('작업 완료!'), 1000);
});

promise.then(
  result => console.log(result), // '작업 완료!'가 출력됨
  error => console.log(error) // 실행되지 않음
);

async/await 사용하기

async function asyncFunction() {
  let promise = new Promise((resolve, reject) => {
    setTimeout(() => resolve('비동기 작업 완료!'), 1000);
  });

  let result = await promise; // 프로미스가 완료될 때까지 기다림
  console.log(result); // '비동기 작업 완료!'
}

asyncFunction();

동기 처리와 비동기 처리는 각각의 장단점을 가지고 있으며, 상황에 따라 적절히 선택하여 사용하는 것이 중요합니다. 비동기 처리는 특히 웹 애플리케이션에서 사용자 경험을 크게 개선할 수 있는 방법 중 하나입니다.

728x90
반응형
LIST