개발기초

[자바스크립트] 동기와 비동기, 코드 실행 방식에 대해서

Veams 2023. 4. 14.

동기(Synchronous)와 비동기(Asynchronous)는 코드 실행 방식의 두 가지 주요 접근 방식이다.

 

동기는 직렬적으로 태스크를 수행하는 방식으로, 이전 태스크가 완료되어야 다음 태스크를 수행할 수 있다. 한 작업이 실행하는 동안, 다른 작업은 실행을 기다린다. 다시 말해, 코드의 실행이 순차적으로 일어나기에 이전 작업이 완료되지 않으면 다음 작업을 수행할 수 없다.

 

이 방식은 코드가 실행될 때 보통 호출한 함수가 반환될 때까지 기다릴 필요가 있을 때 사용된다. 만약, 동기 방식에서 순차적으로 실행되는 코드에서 문제가 발생하면 전체 애플리케이션이 멈추거나, 느려지는 문제가 발생할 수 있다. 자바스크립트는 기본적으로 동기적인 방식으로 실행되지만, 동기적인 실행방식의 단점이 있기 때문에 비동기적으로 프로그래밍한다.

 

비동기는 병렬적으로 태스크를 수행하는 방식으로, 이전 태스크의 완료 여부와 관계없이 다음 태스크를 수행할 수 있다. 한 작업이 완료되기를 기다리는 대신, 다른 작업을 실행한다. 다시 말해, 코드가 실행되는 동안 다른 태스크가 실행될 수 있으며, 완료 여부를 기다리지 않아도 된다. 비동기적 방식은 작업을 실행하는 동안 코드 실행이 차단되지 않기에 효율적으로 작동할 수 있다. 

 

자바스크립트에서 비동기적인 코드 실행 방식은 대개 콜백 함수Promise 객체, async/await 문법을 사용한다. 콜백 함수는 비동기적인 코드 실행 방식에서 가장 오래된 방식으로, 코드의 실행 순서를 예측하기 어렵고 콜백 지옥(callback hell)이라는 문제가 발생할 수 있다. Promise 객체는 ES6에서 콜백 지옥을 해결하기 위해 도입된 객체로, 코드의 구조가 간결해지고 오류를 처리하기도 쉽다. async/await 문법은 Promise 객체를 기반으로 하는데, 비동기적인 코드를 동기적인 코드처럼 작성할 수 있어서 코드의 가독성이 좋아지고 오류 처리도 쉬워진다.

댓글