일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 운영체제
- 파이썬
- context switching
- Python
- 알고리즘
- 자바
- algorithm
- codestates
- 파이썬 알고리즘 인터뷰
- typeScript
- react 기초
- 코드스테이츠
- 글또
- JavaScript
- python algorithm
- java
- REACT
- 비동기
- execution context
- OS
- Computer Science
- 자바스크립트
- 자료구조
- useState
- 개발공부
- Operating System
- Zerobase
- node.js
- 프로그래머스
- 컴퓨터공학
Archives
- Today
- Total
Back to the Basics
[JS/Node] 비동기 (Asynchronous) 본문
728x90
Asynchronous
Achievement Goals
- Synchronous의 개념에 대해 이해한다.
- Asynchronous의 개염에 대해 이해한다.
- Asynchronous를 왜 사용하는지 이해한다.
1. 비동기 호출이란?
1. 동기(Synchronous)
비동기를 이해하기 위해 동기(Synchronous)를 먼저 알아보자.
- 실행 완료 시점과 실행 시작 시점이 같은 것을 동기적(Synchronous)이다 라고 한다.
- 요청에 대한 결과가 동시에 일어난다. 요청에 blocking이 있다.
- blocking이란, "A process that is blocked is one that is waiting for some event" 앞의 실행이 끝날 때까지 다른 작업을 하지 못함을 의미한다.
- 상당리 long-running JS function이 있을 경우, 서버 또는 UI에서 이 함수가 끝날 때까지 어떠한 작업도 하지 못하게 된다.
- Hoisting이 된 뒤에 작성된 코드에 맞춰서 차례대로 동기적으로 실행하는 것을 말한다.
console.log("one")
console.log("two")
console.log("three")
위의 코드는 순서대로 one,two,three가 실행될 것이고 이런 실행을 동기적 실행이라고 한다.
- Web Server를 예로 들면 , website에서 무엇인가를 하고 있을 때, 클릭, 입력 등을 하고 나서 server에서 응답이 오고 나서 다른 행동을 할 수 있다. server에서 응답이 올 때까지 기다려야 하는데, legacy wdb application에서 사용하던 동기적인 방법이다.
2. 비동기 (Asynchronous)
- 비동기란, 요청에 대한 결과가 동시게 일어나지 않는 것을 말한다.
- 언제 code가 실행될지 예측할 수 없는 것을 말한다.
- Web Server로 예를 들면, Synchronous와는 다르게 클라이언트에서 요청을 해도 서버의 응답을 받을 때까지 기다리지 않고 다른 작업들을 진행하다가 응답을 받으면 계속 진행한다.
그림출처
console.log("one")
setTimeout(()=>console.log("two"),1000);
console.log("three");
/*
one
three
two
*/
위의 코드의 실행은 다음과 같다
- console.log("one")이 실행이 된다
- setTimeout()은 브라우저 API이기 때문에 브라우저에 요청을 보낸다.
- console.log("three")는 응답을 기다리지 않고 바로 실행이 된다.
- 1초 뒤에 브라우저에서 callback 함수를 실행하라는 응답이 오고 console.log("tow")를 실행하게 된다.* setTimeout에 대하여.."The global setTimeout() method sets a timer which executes a function or specified piece of code once the timer expires."
- mdn에 따르면, callback 으로 받은 함수를 두 번째 인자로 받은 시간이 지나고 실행하게 하는 함수.
3. 그렇다면, 왜 Asynchronous를 사용하는 것이 더 효율적일까??
- Javascript가 Synchronously 하게 실행이 된다면 그 함수가 끝날 때까지 다음 코드들은 막혀있을 것이다 (blocking).
- 위에서 언급했듯이, 서버의 경우 서버에서 응답이 올 때까지 유저들은 로딩을 기다려야 할 것이다.
참고한 사이트에서 퍼온 예시를 들어보면,
만약 내가 친구 한 명에게 카톡을 보내고 다른 친구에게 카톡을 보내려는데, 동기적으로 처리를 한다면 카톡이 다 보내지기 전까지 카톡방을 나가지도, 어떠한 클릭도 하지 못할 것이다.
이를 간단한 수도 코드로 확인해보자
katalk=loadKatalkSync();
// ..... Wait
// ..... Do something with the katalk
doSomeotherImportantThings();
katalk=loadKatalkAsync(function () {
// .... Wait
// Do something with the katalk
});
doSomeotherImportantThings();
첫 번째 코드에서는 doSomeotherImportantThings(); 을 하기 위해 앞의 코드가 끝날 때까지 기다려야 하지만, 두 번째 코드는 katalk이 다 보내질 때까지 기다릴 필요가 없다.
Node/JS는 non-blocking 하고 asynchronous 적으로 작동하는 런타임으로 개발되었다고 한다. 특히, 아래와 같은 작업들은 비동기적으로 작동되어야 효율적이다
- 백그라운드 실행 , 로딩 창 등의 작업
- 인터넷에 → 서버 요청 , 응답을 대기하는 작업
- 큰 용향의 파일을 로딩하는 작업
비동기가 쓰이는 주요 사례
- DOM ELEMENT의 이벤트 핸들러
- 마우스, 키보드 입력 (click, keyboard)
- 페이지 로등(COMContentLoaded)
- 타이머
- 타이머 API (setTimeout 등)
- 애니메이션 API (requestAnimationFrame)
- 서버에 지원 요청 및 응답
- fetch API
- AJAX (XHR)
이번 포스팅은 Asynchronous에 대해 정리를 해보았다. 다음 포스팅으로는 Asynchronous 적으로 프로그래밍을 하는 방법에 대해 알아보겠다.
참고한 사이트
JavaScript for Beginners: Async
코드 스테이츠 강의 자료 중 일부의 일부부
728x90
'Programming Languages > JavaScript & Node.js' 카테고리의 다른 글
[JS/Node] 비동기 - Node.js 에 대해 알아보자! (0) | 2021.10.08 |
---|---|
[JS/Node] 비동기 - Callback (0) | 2021.10.08 |
[JS/Node] 꼬리 재귀(Tail recursion in JavsScript) (0) | 2021.09.15 |
[JS/Node] 재귀 함수와 메모리 사용량 (0) | 2021.09.15 |
[JS/Node] Regular Expressions (0) | 2021.09.12 |
Comments