본문 바로가기
코답노트

동기(sync), 비동기(async)의 차이 / Promise 란? / async(), await 란?

by 아모르형 2022. 8. 1.

동기 방식(synchronous)

요청과 그 결과가 동시에 일어난다는 약속.

바로 요청을 하면 시간이 얼마나 걸리던지 요청한 자리에서 결과가 주어져야 한다.

(요청과 결과가 한 자리에서 동시에 일어남)

(A노드와 B노드 사이의 작업 처리 단위(transaction)를 동시에 맞춘다.)

 

비동기 방식(Asynchronous)

요청과 결과가 동시에 일어나지 않을 거라는 약속

(요청한 그 자리에서 결과가 주어지지 않음)

(노드 사이의 작업 처리 단위를 동시에 맞추기 않아도 된다.)

 

장단점

 

동기 방식 

 - 장점 : 설계가 매우 간단하고 직관적

 - 단점 : 결과가 주어질 때까지 아무것도 못하고 대기해야 함

 

비동기 방식

 - 장점 : 결과가 주어지는데 시간이 걸리더라도 그 시간 동안 다른 작업을 할 수 있으므로 자원을 효율적으로 사용

 - 단점 : 동기보다 복잡

 

 

 

 

Promise 란?

Promise 객체는 비동기 작업이 맞이할 미래의 완료 또는 실패와 그 결과 값을 나타낸다.

 

프로미스가 생성된 시점에는 알려지지 않았을 수도 있는 값을 위한 대리자로,

비동기 연산이 종료된 이후에 결과 값과 실패 사유를 처리하기 위한 처리기를 연결할 수 있다.

프로미스를 사용하면 비동기 메서드에서 마치 동기 메서드처럼 값을 반환할 수 있다.

다만 최종 결과를 반환하는 것이 아니고, 미래의 어떤 시점에 결과를 제공하겠다는 약속(프로미스)를 반환한다.

 

Promise 상태

 - 대기(pending) : 이행하지도, 거부하지도 않은 초기 상태

 - 이행(fulfilled) : 연산이 성공적으로 완료됨

 - 거부(rejected) : 연산이 실패함

 

 

 

 

 

async 함수 - async()

async는 function 앞에 위치한다.

function 앞에 async를 붙이면 해당 함수는 항상 promise를 반환한다.

promise가 아닌 값을 반환하더라도 이행 상태의 promise로 값을 감싸 이행된 promise가 반환된다.

 

await 키워드

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

자바스크립트는 await 키워드를 만나면 promise가 처리될 때까지 기다린다.

결과는 그 이후에 반환한다.