본문 바로가기

개인공부 기록/JavaScript

비동기처리(async/await)

node.js로 서버를 실행하고 동작시키며 공부하다보니 async await이라는게 항상 사용되는게 눈에 들어왔다, 짝을 이뤄 사용한다는 것은 알겠는데 왜 쓰는지, 어떤 개념인지 몰라서 글로 정리해본다.

 

동기와 비동기?

동기(sychronous) 는 설계가 간단하고 직관적이지만, 해당 프로세스가 종료될때까지 다른 것을 못하고 대기하고 있어야한다. 연산이 오래걸리는 작업의 경우 대기시간이 무한하게 길어질수있다.

 

비동기(asynchronous) 는 동기보다 설계가 복잡하지만, 해당 프로세스가 종료 될 때까지 대기하지 않고, 다른작업을 진행할 수 있다. 연산이 오래걸리는 작업이더라도 실행시켜놓고 종료될때까지 다른 작업을 진행하고 있으면 된다.

 

내가 이해한 예시로는

요리사가 A 주문과, B주문을 받았는데 동기의 경우 A주문을 다 요리한 다음 B 주문을 처리하는 것이고 비동기의 경우 A주문을 요리하는 동안 B주문도 처리를 하는 것이다. A주문을 처리하며 끝나지 않더라도 B주문에 필요한다른 행동을 하는 방식으로 말이다. 그러다 A주문이 끝나면 내주면된다. 이후 B주문도 완료되는대로 내주면된다.

 

왜 사용할까?

  • 일반적으로 자바스크립트에서 비동기 처리를 하는데 사용되는 방법은 Callback 함수, Promise, async/await 이 있다. Callback 함수의 경우 콜백지옥(callback hell)이 발생할 수 있다는 문제점이 있고 그것을 해결하기 위한 Promise는 코드가 길다는 문제점이 있다.

 

어떻게 사용할까?

 

1. async는 function 앞에 위치한다.

  • function 앞에 async가 위치하는 경우 해당 function은 항상 promise를 반환한다.
  • promise가 아닌 값을 반환하더라도 이행 상태의 프로미스로 값을 감싸 반환한다.

2. await 은 async 함수 안에서만 동작한다.

  • JavaScript는 await 키워드를 만나면 프로미스 처리가 될때까지 기다리고, 결과는 그 후에 반환된다.

promise는 JavaScript 비동기 처리에 사용되는 객체이다.

 

 

 

Recent Posts
Popular Posts
Recent Comments