Node.js를 이용해 백엔드를 공부하기 전에 비동기처리와 동기처리의 개념을 잡고자 한다.
동기(synchronous )
- 코드가 위에서 아래로 순차적으로 실행된다.
- 하나의 작업이 끝날 때까지 기다렸다가 다음 작업을 실행한다.
JS코드를 실행하면 동기처리를 하더라도 함수나 변수 선언과 같은 경우에는
순서가 바뀌는 것처럼 보이는 경우가 있는데 이는 호이스팅이라는 것 때문이다.
*호이스팅 : 브라우저에서 자바스크립트 코드를 실행시키기 전 함수나 변수같은 선언문을 가장 위로 올리는 작업
그렇다면 비동기처리는 왜 필요한 것일까?
오래걸리는 작업을 동기처리한다면?? Blocking 발생
-> 하나의 작업이 끝나야지만 다음 작업을 시작하므로 오래 걸리는 작업을 실행 시 나머지 작업의 대기시간이 길어짐.
비동기(asynchronous)
- 무거운 이벤트는 다른 스레드로 전달하여 작업한다.
특정 로직의 실행이 끝날 때까지 기다려주지 않고 나머지 코드를 먼저 실행한다
자바스크립트는 싱글스레드인데 어떻게 한번에 두가지 일을 하는거지?
Web APIs에 포함된 setTimeout()과 같은 비동기적 메소드는 별도의 브라우저 환경에서 실행되며 멀티스레드이므로 해당 API를 사용하며 다른 일도 할 수 있는 것이다.
단, 이러한 비동기적 API를 제외한 코드가 모두 실행되고 나서 비동기적 메소드가 실행된다.
비동기처리를 할 때 사용되는 콜백
비동기 콜백
비동기처리를 할 때 사용되는 콜백
콜백함수 : 다른 함수의 인자로 전달되는 함수
비동기 작업이 끝나고 후처리를 하는 경우 콜백함수를 사용하는 것이다.
콜백함수를 통해 비동기 작업이 끝난 후에 실행되어야 하는 코드를 명시할 수 있음.
콜백지옥
온라인 쇼핑몰 예제
1. 로그인
2. 장바구니
3. 결제
위 코드처럼 계속해서 호출해야 함에 따라 depth가 깊어지고 가독성이 떨어지며 유지보수 또한 힘들어 질것임.
이러한 콜백지옥을 해결하기 위해 Promise라는 것을 사용한다.
추후 공부 : Call stack, event loop, promise, async&await
출처
'백엔드' 카테고리의 다른 글
[JS] 비동기 프로그래밍 #2 Promise (0) | 2024.01.09 |
---|