Node.js의 특징

kshired·2021년 7월 29일
0

Node.js의 특징

이벤트 기반

이벤트 기반이란 이벤트가 발생할 때 미리 지정해둔 작업을 실행하는 방식이다.

이벤트는 클릭 혹은 네트워크 요청등이 존재하는데, 이 이벤트 기반 시스템에서는 미리 특정 이벤트가 발생할 대 무엇을 할지 미리 등록해놓아야한다.

이걸 이벤트 리스너에 콜백을 등록한다고 표현하는데, Node.js는 이벤트 기반이기 때문에 이벤트가 발생하면 콜백이 작동한다고 이해하면 된다.

이벤트 루프

여러 이벤트가 동시에 발생했을 때 어떤 순서로 콜백을 처리할지 판단하는 것이 이벤트 루프이다.

이벤트 루프는 노드가 종료될 때까지 이벤트 처리를 위한 작업을 반복하기에 이벤트 루프라고 불린다.

태스크 큐

이벤트 발생 후 호출되어야 할 콜백들이 기다리는 공간이다.

이벤트 루프가 정한 순서대로 콜백들이 여기서 기다리고 있다.

백그라운드

타이머, I/O 작업 콜백, 그리고 이벤트 리스너들이 기다리는 공간이다.

논블로킹 I/O

논블로킹이란 이전 작업이 완료될 때까지 멈추지 않고 다음 작업을 수행하는 것을 뜻한다.

오래걸리는 함수를 백그라운드로 보내서 다음 코드가 먼저 실행되게 하고, 그 함수가 다시 태스크 큐를 거쳐 호출 스택으로 올라오기를 기다리면서 논블로킹으로 작업 수행.

싱글 스레드

노드는 싱글 스레드이기 때문에, 어떠한 작업에서 블로킹이 발생하면 다음 일을 처리하지 못함.

하지만, 노드는 스레드는 하나지만 논블로킹 모델이기 때문에 혼자서 많은 요청을 처리할 수 있음.

요청을 받으면, 완료될 때까지 다른 요청을 거부하면서 기다리지않고 다른 요청도 받다가 요청이 완료된 순서대로 바로바로 응답하는 방식.

프로세스와 스레드

  • 프로세스는 운영체제에서 할당하는 작업의 단위. 프로세스 각각은 서로 메모리나 자원을 공유하지 않음.
  • 스레드는 프로세스 내에서 실행되는 흐름의 단위. 하나의 프로세스는 여러 스레드를 가질 수 있음. 스레드들은 부모 프로세스의 자원을 공유함.

노드는 스레드가 하나기 때문에 이 스레드가 에러 때문에 죽으면, 서버가 죽어버림. 죽지않게 조심히 에러처리 해야함.

비동기와 동기

Synchronous (동기)

동기는 요청과 결과가 한자리에서 일어남.
한 작업이 끝날 때까지 다른 작업을 시작할 수 없음.

Asynchronous (비동기)

비동기는 요청을 보냈을 때 응답 상태와 상관없이 다음 동작을 수행 할 수 있다.
즉 어떤 작업이 시작하면 동시에 다른 작업이 실행된다.

profile
글 쓰는 개발자

0개의 댓글