-
[Javascript] 비동기 처리■ Front-End/- JavaScript & TypeScript 2020. 1. 30. 21:58
Javascript를 공부하다보면 비동기 처리에 대해 배우게 되는데, 이부분에 대해 정리해보려고 한다.
1. 콜백 함수(Callback Function)
가장 일반적인 비동기 요청 결과를 처리하는 방법이다. 대표적인 예로는 HTTP 요청에 따른 응답 처리가 있다.
Callback Function 예제 일반적으로 비동기 요청이 한 개인 경우에는 콜백 함수를 쓰는 것이 가장 편리하다. 하지만 실제로 개발을 하다보면, 여러 개의 비동기 요청을 처리해야할 때가 있다. 이럴 때, 계속해서 콜백함수를 쓰게되면 아래와 같이 콜백 헬(Callback Hell)이 발생한다.
위 예제를 보면, 콜백 함수와 if/else 문들이 여러 개 사용되어서 코드 가독성이 좋지 않다. 이런 경우, 나중에 유지보수를 할 때 매우 불편하다. 잘못 건드리면 모든 호출이 다 망가질 수 있다.
2. Promise
콜백 함수의 단점(콜백 헬)을 해결하기 위해 나타난 것이 바로 Promise 이다. 여기서는 Promise에 대해 간단히 설명할 예정이다. 보다 자세한 설명은 아래 링크에 정리해두었다.
https://gogomalibu.tistory.com/72?category=748783
[ES6] Promise에 대하여
Promise란? ES6에서 비동기 처리를 위한 패턴. 전통적인 콜백 패턴이 가진 단점을 보완하고, 비동기 처리 시점을 명확하게 표현한다. 아래 코드는 전통적인 콜백 패턴이 가진 단점을 보여준다. 위 코드를 개선하기..
gogomalibu.tistory.com
Promise는 ES6에서 제한된 객체로, 콜백 헬의 특징인 중첩 스코프를 대신해서 나열식으로 비동기 요청 결과를 처리한다.
Promise의 가장 기본적인 사용 방법은 아래와 같다.
Promise에는 3가지 상태가 존재한다.
- 대기 : Promise가 실행되고 값이 결정되지 않은 상태
- 충족 : 대기 상태가 끝나고 값이 결정된 상태(resolve). resolve() 함수를 호출하면 then() 메서드를 호출한다.
- 거부 : Promise가 제대로 처리되지 않고 거부된 상태(reject). reject() 함수를 호출하면 catch() 메서드를 호출한다.
3. Observable/Observer
Observable/Observer는 반응형 프로그래밍의 대표적인 예제이다. 반응형 프로그래밍은 웹 페이지에 들어오는 stream 형태의 입력 이벤트를 감지해서 반응을 처리하는 방법이다. 이에 대한 자세한 내용은 아래 페이지에 정리해두었다.
https://gogomalibu.tistory.com/131?category=851911
[Angular] Observable & Observer
Angular tutorial 프로젝트를 따라하면서 Observable를 사용했는데, Observable, Observer 두 단어로 설명하다보니 잘 이해가 되지 않았다. 두 용어에 대해 찾아보다가 PoeimaWeb에 아주 좋은 예시가 나와있어 정..
gogomalibu.tistory.com
4. async/await
여러 개의 비동기 요청을 순서대로 실행해야할 때는 어떻게 해야할까?
만약 비동기 요청 결과가 이어서 호출되는 비동기 요청에 영향을 미친다면?
여러 개의 비동기 요청을 순서대로 처리하는 방법에는 Promise.all() 과 aync/await이 있다.
(1) Promise.all()
Promise.all() Promise.all()은 작업 완료 시점이 다르지만, 마치는 순서를 호출한 순서대로 출력해주는 역할을 한다.
위 그림을 살펴보면, 작업 완료 시점은 프로그램을 시작할 때마다 다르다. 하지만, 응답 순서는 작업1 -> 작업2 -> 작업3 -> 작업4 로 호출한 순서대로 응답한다.
(2) async/await 함수
async/await 함수 async/await 함수는 종료 시점도 호출 순서와 같다는 점에서 Promise.all() 함수와 차이가 있다. 이를 비동기 호출을 동기화한다고 한다.
비동기 호출을 동기화해야할 때는 언제일까?
비동기 호출은 한 작업이 다 끝나기 전에 다른 작업을 시작하는 방식으로 진행된다. 하지만 어떠한 비동기 요청 결과가 다음에 처리될 비동기 요청에 필요할 경우가 있다. 예를 들면, 사용자의 id를 가지고 사용자 정보 조회 API를 호출한 뒤, 그 호출한 값을 이용해 어떤 이벤트를 처리해야할 때가 있다. 이런 경우, 사용자 정보 조회 API 호출이 완전히 끝난 다음에 이벤트가 이뤄져야 하므로 async/await을 사용할 수 있다.
(일반적으론 한 이벤트만 처리하므로 콜백함수를 쓴다. 이는 이해를 위해 든 예시이다.)
참고 도서 : http://www.yes24.com/Product/Goods/59719961
타입스크립트 퀵스타트
타입스크립트 기초부터 활용까지 차세대 자바스크립트로 시작하는 대규모 웹 애플리케이션 개발이 책은 자바스크립트 개발자가 타입스크립트를 빠르게 배워서 바르게 적용할 수 있도록 합니다. 타입스크립트 개발 방법은 기존 자바스크립트와 어떤 점이 다른지 그리고 타입스크립트 소스를 컴파일하면 어떤 소스가 나오는지, 문법이 어떻게 다르며 활용할...
www.yes24.com
'■ Front-End > - JavaScript & TypeScript' 카테고리의 다른 글
[Javascript] XSS, CSRF 공격 대응하기 (0) 2020.07.09 [Javascript] Array.prototype.findIndex() (0) 2020.07.07 [Javascript] this에 대하여 (0) 2019.07.23 [Javascript] Hoisting 호이스팅 (0) 2019.07.23 [Javascript] Closure (0) 2019.06.22