Node/node 시작하기

노드의 특성

webmaster 2022. 7. 21. 20:41
728x90

이벤트 기반

이벤트가 발생할 때, 미리 지정해둔 작업을 수행하는 방식

  • 이벤트의 예 : 클릭, 네트워크 요청, 타이머 등
  • 이벤트 리스너 : 이벤트를 등록하는 함수
  • 콜백 함수: 이벤트가 발생했을 때  실행될 함수

이벤트 기반

  • 대부분을 프로그램은 이벤트 기반이다(어떤 동작을 클라이언트가 할때, 다른 동작이 일어나야 한다)
  • 프로그램 같은 경우 이벤트 리스너에 콜백함수를 등록하기 떄문에 어떤 이벤트를 동작했을때는 같은 기능을 동작한다.

논 블로킹 I/O

오래 걸리는 함수를 백그라운드로 보내서 다음 코드가 먼저 실행되게 하고, 나중에 오래 걸리는 함수를 실행
동기 : 코드가 순서대로 실행, 비동기 : 코드가 순서대로 실행되지 않는다.
노드에서는 동기-블로킹, 비동기-논블록킹 형식으로 많이 사용된다
  • 논 블로킹 방식 하에서 일부 코드는 백그라운드에서 병렬로 실행됨
  • 일부 코드: I/O 작업(파일 시스템 접근, 네트워크 요청), 압축, 암호화 등
  • 나머지 코드는 블로킹 방식으로 실행됨
  • I/O 작업이 많을 때 노드 활용성이 극대화

프로세스 VS 스레드

프로세스와 스레드
  • 프로세스: 운영체제에서 할당하는 작업의 단위, 프로세스 간 자원 공유 X
  • 스레드: 프로세스 내에서 실행되는 작업의 단위, 부모 프로세스 자원 공유
노드 프로세스는 멀티 스레드이지만 직접 다룰 수 있는 스레드는 하나이기 때문에 싱글 스레드라고 표현
  • 노드를 실행하면 스레드를 여러개가 뜰 수 있지만, 사용자가 컨트롤하는 스레드가 하나이기 때문에 싱글스레드라 한다.
  • 멀티 스레딩은 프로그래밍이 어렵기 때문에 싱글 스레드를 사용했다
노드는 주로 멀티 스레드 대신 멀티 프로세스 활용
노드는 14버전부터 멀티 스레드 사용 가능

싱글 스레드

싱글 스레드라 주어진 일을 하나밖에 처리하지 못함

  • 블로킹이 발생하는 경우 나머지 작업은 모두 대기해야 함 -> 비효율 발생
주방에 비유(점원: 스레드, 주문: 요청, 서빙: 응답)

싱글 스레드

  • 고객이 왔는데 대기하고 있는 단점이 있다

싱글 스레드 논 블로킹 모델

대신 논 블로킹 모델을 채택하여 일부 코드(I/O)를 백그라운드(다른 프로세스)에서 실행 가능
  • 요청을 먼저 받고, 완료될 때 응답함
  • I/O 관련 코드가 아닌 경우 싱글 스레드, 블로킹 모델과 같아짐

싱글 스레드, 논 블로킹 모델

  • 현재 노드에서 채택한 모델
  • 점원이 죽는순간, 서비스가 죽는 단점이 있다.

멀티 스레드 모델과의 비교

 
싱글 스레드 모델은 에러를 처리하지 못하는 경우 멈춤
  • 프로그래밍 난이도 쉽고, CPU, 메모리 자원 적게 사용

멀티 스레드 모델은 에러 발생 시 새로운 스레드를 생성하여 극복

  • 단, 새로운 스레드 생성이나 놀고 있는 스레드 처리에 비용 발생
  • 프로그래밍 난이도 어려움
  • 스레드 수만큼 자원을 많이 사용함

멀티 스레드 모델

점원: 스레드, 주문: 요청, 서빙: 응답

멀티 스레드 활용

노드 14버전
  • 멀티 스레드를 사용할 수 있도록 worker_threads 모듈 도입
  • CPU를 많이 사용하는 작업인 경우에 활용 가능
  • 멀티 프로세싱만 가능했던 아쉬움을 달래줌.

728x90

'Node > node 시작하기' 카테고리의 다른 글

노드, VSCode 설치하기  (0) 2022.07.22
노드의 역할  (0) 2022.07.22
노드의 정의  (0) 2022.07.21