일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 객체지향의 사실과 오해
- DevOps
- 백준
- 쿠버네티스
- 배열파티션
- 10869번
- LeetCode
- hoisting
- Python
- 실행 컨텍스트
- 프리코스
- 젠킨스
- 이벤트캡쳐링
- v-on
- 파이썬
- 리스트복사
- v-if
- 도커
- 코어자바스크립트
- 이벤트버블링
- JavaScript
- 우테코
- 빅오표기법
- v-model
- 2588번
- vue
- MSA
- 10926번
- v-for
- 3003번
- Today
- Total
새오의 개발 기록
Javascript: 동기와 비동기의 차이 본문
개발을 하다 보면 동기와 비동기가 무엇이 다르냐는 질문을 많이 들어봤을 텐데요.
둘의 차이는 데이터를 받는 방식이 다르다는 겁니다.
커피를 주문하려고 줄을 서 있는 상황으로 동기와 비동기를 이해해 봅시다.
커피를 데이터라고 생각한다면
커피를 주문하는 건 데이터 요청,
주문한 커피를 받는 건 데이터 응답 이라고 볼 수 있을 텐데요.
이 데이터 처리 방식을 동기와 비동기로 나누어보면

(a) 동기 방식일 경우에는
우선 직원이 1명입니다. 맨 앞에 있는 손님이 커피를 주문하고, 그 커피를 받을 때까지 계속 기다려야 합니다.
즉, "커피를 주문하기 위해서는 한 줄로 서서 한 명씩만 주문이 가능"합니다.
여기서 뒷사람이 주문을 하지 못하고 계속 기다려야 하는 상황을 "blocking"이라고 부릅니다.
(b) 비동기 방식일 경우에는
직원이 2명입니다. 한 명은 주문을 받고 한 명은 커피를 내려 손님에게 커피를 전달하는 일을 맡습니다.
동기 방식과는 다르게 앞사람이 커피를 받기 전에 뒷사람이 커피 주문을 할 수 있기 때문에
"non-blocking"이라고 할 수 있습니다.
결과가 주어지는데 시간이 걸려도, 다른 작업을 할 수 있기 때문에 효율적입니다.
동기(synchronous)
- 데이터의 요청과 결과가 한 자리에서 동시에 일어남
- 사용자가 데이터를 서버에게 요청한다면 그 서버가 데이터 요청에 따른 응답을 사용자에게 다시 리턴해주기 전까지 사용자는 다른 활동을 할 수 없으며 기다려야만 합니다.
- 직렬 방식
- 태스크는 순차적으로 실행되며 어떤 작업이 수행 중이면 다음 작업은 대기
- 서버에서 데이터를 가져와서 화면에 표시하는 작업을 수행할 때, 서버에 데이터를 요청하고 데이터가 응답될 때까지 이후 태스크들은 블로킹(blocking)됨
동기의 장단점
장점 : 설계가 매우 간단하고 직관적
단점 : 결과가 주어질 때까지 아무것도 못하고 대기해야 함
비동기(Asynchronous)
- 데이터의 요청과 결과가 한 자리에서 동시에 일어나지 않음
- 서버에게 데이터를 요청한 후 요청에 따른 응답을 계속 기다리지 않아도 되며 다른 외부 활동을 수행하여도 되고 서버에게 다른 요청사항을 보내도 상관없습니다
- 병렬 방식
비동기의 장단점
장점 : 요청에 따른 결과가 반환되는 시간 동안 다른 작업을 수행할 수 있음
단점 : 동기식보다 설계가 복잡
참고
https://breezebm.tistory.com/35
'Javascript' 카테고리의 다른 글
Javascript: Array.fill() (0) | 2023.01.14 |
---|---|
Javascript: fs 모듈로 입력 받기 (0) | 2023.01.12 |
javascript: hoisting 호이스팅 (0) | 2022.10.03 |
Javascript: 이벤트 버블링과 캡쳐 (0) | 2022.09.28 |
Javascript: 비동기 처리 (0) | 2022.09.28 |