매번 나오는 API 호출에서 나오는 이 친구 '비동기 처리' 이것이 무엇인가?
자바스크립트에서 비동기처리가 가능한 이유? Event Loop - Task Queue 와 Call Stack
자바스크립트는 싱글쓰레드이지만 논블로킹 I/O로 작동함으로써 비동기로 실행이 가능합니다
Call Stack
Task Queue
Microtask Queue
Event Loop
이벤트루프가 계속 call stack이 비었는지 확인하며, 비었다면 Micotask Queue부터 callstack으로 가져옵니다!
그다음에 macrotask Queue를 가져오게될겁니다
이벤트 루프는 위에서부터 call stack을 가져올건데
그리고 setTimeout 비동기로 동작하는 web api를 통해서 실행되는 함수이다 그렇기에 web API로 이동
Web API로 실행 후 콜백함수를 Macrotask Queue에 전달한다, 그동안 이벤트 루프는 promise 객체를 call stack으로 가져와 microTask Queue에 전달을 합니다. resolve는 해결되었다는 뜻으로 바로 실행 그안에 .then은 비동기로 동작하기에 microtask queue로 이동한다.
나머지 console.log가 실행이됩니다
자 이제, 우선 순위가 더 높은 Microtask Queue부터 해결해보겠습니다
Microtask Queue에 있는 콜백함수부터 call stack에 가져와 출력한다
그리고 나서 , callstack이 비웠으므로 이제 나머지 남은 Macrotask Queue에 있는 콜백함수를 가져와
클리어 해주면 된다!
앞서 본거처럼 기본적인 원리를 알게 되었지만 비동기를 쓰게 되면 코드가 너무 어지러워질 수 있다
가독성있게 예측가능하게 할 방법이 필요하다 그래서 준비해보았습니다!
Event Loop 로 싱글스레드인 자바스크립트에서 비동기처리가 가능해짐 but, 비동기 함수가 많은 경우 어떤 코드가 먼저 실행되는지 알 시 힘들고 가독성이 좋지 않음.
이런 문제를 해결하기 위해서 비동기 프로그레밍 방법이 나타났다..!
- 대표적으로 callback 패턴 ,Promise , async / await 패턴
그래서 콜백 패턴의 단점을 보완하기 위해 Promise 객체가 둥-----장
비동기적으로 실행하는 작업의 결과를 쉽게 나타내는 객체
resolve에 값을 주어지면 then에 data에 값을 넘겨받아 처리가 가능!
하지만 이것도 길어지면 콜백지옥이 연상이 되어 이것보다 업그레이드 된
를 가져와봤습니다.
프론트엔드에서 서버와 통신하기 위해서는 http통신을 해야한다 그렇기에 자바스크립트에서 http통신을 위한 http client로 fetch와 axios를 사용한다
이 둘은 Promise 기반이기에 비동기 동작을 한다
근데 이 둘의 차이점? 자동 JSON 데이터변환 지원, 다양한 라이브러리
자바스크립트의 내장 라이브러리 이므로 별도로 import 할 필요가 없다
Promise 기반으로 만들어졌기 때문에 데이터 다루기 편리
내장 라이브러리이기 때문에 업데이트에 따른 에러 방지가 가능
1. 지원하지 않는 브라우저가 존재 (IE11...)
2. 네트워크 에러 발생 시 response timeout이 없어 기다려야 한다
3. JSON으로 변환해주는 과정 필요
4 상대적으로 axios에 비해 기능이 부족
크로스 브라우징 최적화로 브라우저 호환성이 뛰어남
fetch에 비해 기능이 많다.
사용을 위해 모듈 설치
Next.JS가 React를 위해 부릅니다 - 헤어지자 말해요 (0) | 2024.04.27 |
---|