멋쟁이사자처럼 프론트엔드 스쿨 2기 31_Day

aydennote·2022년 5월 13일
0
post-thumbnail

📖 오늘 학습 뽀인트!

  1. Node.js
    1-1 이벤트 기반 논 블로킹 I/O
    1-2 싱글스레드

1. Node.js

🕵️‍♀️Node.js 란?
Node.js 는 자바스크립트 런타임으로 확장성 있는 네트워크 프로그래밍을 위해 개발되었다.(머신러닝, 서버, 데스크탑 앱)
이벤트 기반, 논 블로킹 I/O 모델을 사용해 가볍고 효율적이다.


장점 :
1. 싱글 스레드, 논 블로킹 I/O 에 따른 빠른 속도
2. 컴퓨터 자원을 효율적으로 사용.
3. I/O 작업이 많은 서버로 적합.(채팅, 스트리밍, 비동기 방식)
4. 자바스크립트 기반으로 프론트엔드 개발자 사용 용이.
5. 빠르게 개발이 가능하기에 생산성이 높음


단점 :
1. 싱글 스레드이기 때문에 자원을 많이 사용하는 작업 요청이 오면 부하가 크게 걸림.
2. 1번 단점과 같은 이유로 CPU 작업이 많은 작업으로는 부적합(게임 서버)
3. 로직이 복잡한 경우, 콜백지옥에 빠질 수 있음.
4. 에러가 발생한 경우, 프로세스 자체가 죽음.


✍ 위와 같은 장단점으로 자원을 많이 필요로 하지 않은 가벼운 서버 개발시에는 node.js가 적합할 것 같다.

1-1 이벤트 기반 논 블로킹 I/O

🕵️‍♀️이벤트 기반 동작이란?
Node.Js는 이벤트를 통해 수행하여야 하는 작업을 등록해놓고, I/O 작업이 종료되면 이벤트를 감지하여 등록된 작업을 실행하게 되는데, 이를 이벤트 기반 동작이라 한다.


✍ 이벤트 기반 동작 프로세스
1. 실행 순서대로 호출 스택에 작업이 쌓인다.
2. 백그라운드가 필요한 특정 작업은 백그라운드로 이동.(setTimeout 처럼)
3. 백그라운드에서 테스크 큐로 이동하여 대기.
4. 호출 스택 작업들이 완료되면 테스크 큐에서 호출 스택으로 이벤트 이동.
💬 4번 프로세스에서 테스크 큐에 있는 이벤트들을 큐에 들어있는 순서대로 호출 스택에 이동시켜 주는데, 이 작업은 이벤트 루프가 진행한다.
만약, 테스크 큐에 이벤트가 없다면 이벤트 루프는 대기한다. 테스크 큐에 이벤트가 있다면 이벤트 루프는 호출 스택과 테스크 큐를 빙글빙글 돌면서 상태를 체크하고 호출 스택 작업이 완료되면 테스크 큐에서 이벤트를 호출 스택으로 이동시키는 형태이다.


🕵️‍♀️논 블로킹 I/O란?
위 와 같은 이벤트 기반 동작 프로세스로 이전 작업이 완료될때 까지 기다리면서 멈추지 않고, 다음작업이 지연되지 않게 동작한다. 이러한 패러다임을 논 블로킹 I/O라고 한다. 약간 비동기적인 느낌인 것 같다.


✍블로킹 I/O의 경우, 서버 작업이 필요한 경우 서버에서 작업할 동안 클라이언트는 작업을 못 하고 대기한다. 이 블로킹 I/O는 클라이언트가 서버에 많은 분량의 작업을 요청할 경우 서버는 열심히 작업하겠지만, 클라이언트는 긴 시간 동안 다음 작업을 못 하는 치명적인 단점이 있다.
논 블로킹 I/O의 경우, 오래 걸리는 작업은 백그라운드에서 처리하기 때문에 기다리지 않고, 요청과 작업을 한다.

1-2 싱글스레드

🕵️‍♀️싱글 스레드란?
브라우저에서 발생하는 모든 작업 요청과 응답을 하나의 스레드에서 진행한다. 직접 제어할 수 있는, 자바스크립트를 실행하는 스레드는 하나이기 때문에 싱글 스레드라고 한다.


장점 :

  • 메모리나 기타 자원을 효율적으로 사용 가능.(놀고 있는 스레드가 없다.)

단점 :

  • 스레드에 문제가 생길 경우, 전체에 문제가 발생할 수 있다.
profile
기록하는 개발자 Ayden 입니다.

0개의 댓글