문제
항해99 3주차에 접어들었다.
앞으로 장장 3주 동안 주특기를 연마하게 된다.
나는 node js를 선택했다.
자바스크립트의 대표적인 특징은 비동기적 처리를 한다는 것이다.
Sync(동기) & Async(비동기)의 개념에 대해서 흐릿하게 알고 있었는데
이번엔 제대로 짚고 넘어가야겠다는 생각이 들었다.
시도
영상 강의를 통해 학습을 진행했다.
동기 & 비동기의 개념에 대해 상세하게 설명이 진행되었는데
깊이 들어가니 더 헷갈렸다.
게다가 처음 들어보는 Blocking & Non-Blocking에다
promise, await까지......
동기 비동기 개념을 확실히 짚고 넘어가야겠다는 의지가 꺾이는 순간이었다.
하지만 이번에 제대로 학습하지 않으면 부채는 점점 쌓여갈 것이기 때문에
영상과 노션 자료를 토대로 천천히 정리해보겠다.
다만 promise와 await까지 다루기엔 너무 길어질 것 같아
위의 두가지는 나눠서 정리할 계획이다.
해결
Sync (동기)
쉽게 말해 선입 선출이라고 볼 수 있겠다.
먼저 들어간 놈이 먼저 나오는 것이다.
먼저 실행된 코드가 끝나야 다음 코드를 실행할 수 있다.
Async (비동기)
세상에 태어나는 것은 순서가 있어도 떠나는 것에는 순서가 없다고 했다.
비동기란 그런 것이다. 먼저 실행된 코드의 연산이 끝나지 않아도 다른 코드가 실행 될 수 있다.
결과 또한 실행된 순서에 관계 없이 나올 수 있다.
Blocking Model이란
먼저 실행된 코드의 연산이 끝나기 전까지 실행 제어권을 다른 곳에 넘기지 않는 것이다.
그럼 다른 코드들은 먼저 실행된 놈이 끝날 때까지 기다리고 있어야 한다.
Non - Blocking Model이란
먼저 실행된 코드의 연산이 끝나지 않아도 실행 제어권을 넘겨 다른 코드가 실행될 수 있도록 하는 것이다.
자바스크립트는 Async + Non - Blocking Model을 채택하고 있다.
따라서 기본적인 규칙은 코드가 위에서부터 순서대로 실행되지만,
사용자의 필요에 의해서 비동기적으로 코드를 실행할 수 있다 이말이다.
핵심은 제어권에 있다. 비동기적 처리가 가능하더라도 제어권을 넘겨주지 않으면
결국 코드는 순차적으로 실행될 수 밖에 없다.
알게된 것
동기 & 비동기적 처리에 대한 것은 어렴풋이 알고 있었지만
제어권이라는 개념에 대해 새롭게 알 수 있었다.
비동기적 처리가 가능한 환경이라도 제어권을 넘겨주지 않으면
동기적 처리가 된다는 것.
그리고 사용자의 의도에 따라 조절할 수 있다는 것.
promise와 await에 대해서도 추가로 정리하여
더욱 깊게 탐구해봐야겠다.
'Development > TIL' 카테고리의 다른 글
mongoose objectId와 new 키워드 (0) | 2023.04.18 |
---|---|
TIL - Promise와 await 연산자 (feat. vs GPT) (0) | 2023.04.16 |
TIL(feat.프로그래머스 1차 비밀지도) (0) | 2023.04.13 |
소수 구하기 (feat.에라토스테네스의 체) (0) | 2023.04.12 |
문자열과 영단어 (0) | 2023.04.11 |