일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- mock service worker
- 리액트쿼리
- 기본
- front-end mocking
- 자바스크립트
- sprinkles
- 리액트네이티브
- next.js
- 아키텍처
- Basic
- 리액트
- link
- react-native
- JavaScript
- styled-component
- amplify
- 컴포넌트
- mockoon
- Babel
- 비동기
- 동기
- MSW
- react-query
- 쓰레드
- Cache
- 목킹
- next hydration
- React
- Critical Rendering Path
- react server component
- thread
- Concurrent Mode
- 기초
- async
- 캐쉬
- CSS-in-JS
- 최적화
- SWC
- vanilla-extract
- 개발자
- Today
- Total
Don’t worry about failures
block, non-black, sync, async에 대해 본문
이 네가지의 개념을 이해하기 위해서는 '권한', '응답' 이 두 키워드가 가장 도움이 되었다.
권한을 가지고 있냐 없냐, 응답에 관심이 있냐 없냐에 따라 Block, None-Block, Sync, Async가 분류가 된다.
자세히 살펴보자.
1. Bloacking
자신의 작업을 진행하다가 다른 주체의 작업이 시작되면 다른 작업이 끝날 때까지 기다렸다가 자신의 작업을 시작.
'권한'이라는 단어로 이를 이해해보자.
실험실에 중요한 실험이 있다고 생각해보자.
이 실험실을 들어가기 위해서는 권한 키를 가지고 있어야 찍고 입장을 할 수가 있다. 실험실에 들어가 실험을 하다 외부 실험자에게 요청할게 있어 밖으로나가 외부 실험자에게 부탁과 함께 권한 키를 제공했다. 이 권한 키를 통해 외부 실험자가 들어가서 실험을 도와주지만, 나는 입장을 하지못해 나의 할일을 못하고 외부 실험자가 나올 때까지 기다려야한다.
이처럼 권한이 상대방에게 넘어가서 다른 작업을 못하고 계속해서 기다려야한다. 이게 Blocking이다
2. Non-Blocking
다른 주체의 작업에 관계 없이 자신의 작업을 하는 것.
위의 예제로 이어가보자.
위의 예제에서 조건이 하나가 변경 되었다고 해보자. 조건은 외부 실험자와 동시 입장이 가능한 것이다.
즉, 외부 실험자에게 요청을 하고 실험실에 자신이 권한 키를 그대로 가지고 있으면서 키를 찍어주고 같이 들어가는 것이다.
이렇게 되면, 권한은 나에게 있고, 외부 실험자와 관계없이 나의 작업을 그대로 진행할 수 있다.
3. Synchronous
동기. 동기는 blocking, non-blocking과는 다르게 '응답'에 관심이 있다.
즉, 요청을 하고 응답을 기다리냐 안기다리냐에 초점이 있는 것이다.
위의 예제를 봐보자. 이제 권한에 따른 출입에 따른 조건 및 환경에 대해서는 상관이 없다.
오직 내가 외부 실험자에게 요청한 것에 대한 응답에 관심이 있고, 이 응답을 옆에서 동동거리며 기다리는 것이 Synchronous이다.
4. Asynchrous
비동기. 동기와 반대로 '응답'에 관심이 없다. 요청하고 그 응답이 어떻든 나의 할일을 진행한다.
위의 개념 기반으로 이해하기 좋은 예제도 하나 더 설명해보자면,
게임을 할 때 처음 화면 진입 시나 맵을 이동할 때 아래와 같은 로딩 화면을 많이 볼 것이다.
이는 내부적으로 서버에서 계속 데이터를 가져오면서 그거에 맞게 퍼센트를 프런트에서 그려주고 있는 상황이다.
이를 Blocking or Non-Blocking, Sync or Async로써 생각을 해보자.
이는 Sync이면서 Non-Blocking이다.
왜인지 봐보자.
위에서 설명했듯이. '권한', '응답'을 초점으로 생각해보자.
요청자는 클라이언트고, 응답자는 서버이다.
클라이언트는 "서버에게 데이터를 줘~, 응답에 맞게 화면을 그릴게!"
즉, 화면을 그리기 위해서는 요청에 대한 응답에 관심이 존재한다. 하지만 계속해서 로딩중의 퍼센트와 로딩바를 그려줘야하기 때문에 권한 자체를 서버에게 넘겨주면서 블락이 돼서 안된다. 권한은 내가 가지고 있고, 그대신 계속 서버에게 끝났어? 끝났어? 물어는 것이다.
정리하면, 응답에 관심이 있으면서 권한은 나한테 있는 Sync, Non-Blocking이다.
'cs' 카테고리의 다른 글
멀티태스킹 멀티프로세싱.. (0) | 2024.03.13 |
---|---|
쓰레드에 대해 (0) | 2024.03.13 |
CORS에 대해 (0) | 2021.06.20 |
Process & Thread (0) | 2021.06.13 |
컴파일러와 인터프리터 (0) | 2021.06.05 |