Node.js

(Node.js) Node.js

JJeongHyun 2023. 1. 17. 14:52
반응형

node.js

  • JS를 브라우저 환경이 아닌 OS환경에서 실행하기 위한 런타임 환경
  • Chrome V8 JS 엔진으로 빌드된 JS 런타임. 노드를 통해 다양한 JS 애플리케이션을 실행할 수 있으며, 서버를 실행하는데 제일 많이 사용
    • JS를 서버에서도 사용할 수 있도록 만든 프로그램
    • V8이라는 JS 엔진위에서 동작하는 JS 런타임(환경)
      • 런타임(RunTime) : 특정 언어로 만든 프로그램을 실행할 수 있는 환경
    • 서버사이트 스크립트 언어가 아니라 프로그램
    • 웹서버와 같이 확장성 있는 네트워크 프로그램을 제작하기 위해 만들어짐 
    • 싱글스레드(Single Thread)
    • 이벤트 기반(Event Driven)
    • 넌 블로킹(Non-Blocking)

 

싱글스레드(Single Thread)

  • 한번에 여러 작업을 실행하지 못한다
  • JS는 기본적으로 싱글스레드인데, 다만 멀티 스레드 기능을 사용할 수 있게 해주는 라이브러리가 존재하긴 한다
  • 스레드(Thred)
    • CPU의 작업 단위, 프로세스가 실행하기 위해서 CPU에게 받는 혹은 할당받는 영역
    • 프로세스 내에서 실제로 작업을 수행하는 주체
    • 모든 프로세스는 한 개이상의 스레드가 존재하여 작업을 수행, 또한 두 개 이상의 스레드들 가지는 프로세스를 멀티 스레드 프로세스(Multi-thread process)
  • 프로세스(Process)
    • 프로그램 단위, 우리가 실행한 프로그램에 대한 것
    • 단순히 실행 중인 프로그램, 즉 사용자가 작성한 프로그램이 운영체제에 의해 메모리 공간을 할당받아 실행 중인 것. 이러한 프로세스는 프로그램에 사용되는 데이터와 메모리 등의 자원 그리고 스레드로 구성

 

이벤트 기반(Event Driven)

  • 이벤트 루프가 있어 정의된 이벤트에 대해서 코드를 실행
  • 특정 이벤트 발생 시 미리 예약 혹은 지정해놓은 작업을 수행하는 방식
  • 지정한 작업을 수행하기 위해서 작업이 일어나야 할 시점에 이벤트를 미리 등록해두어야 한다, 이러한 작업을 이벤트 리스너에게 콜백함수를 등록한다고 한다

동기 / 비동기 (Synchronous / Asynchronous)

  • 동기
    • 실행되는 작업이 서로 연관이 있어서 하나가 실행이 되고 완료된 후에야 그 반환값을 사용하여 다른 작업을 실행
      모든 요청, 응답이 일련의 순서가 있다
  • 비동기
    • 작업을 실행하는데 별 관계가 없어서 함께 실행이 될 수 있다. 요청을 보냈을 때 응답 상태와 다음 동작을 수행, 따라서 작업의 순서가 보장 되지 않는다고 볼 수 있다

동기 / 비동기 작업

 

블로킹 / 논 블로킹 (Blocking / Non-Blocking)

  • 블로킹
    • I/O 작업이 진행되는 동안 유저 프로세스는 자신의 작업을 중단한 채 대기하는 방식
    • I/O 작업이 진행되는 동안 유저 프로세스는 자신의 작업을 중단한 채 대기
    • 애플리케이션에서 다른 작업을 수행하지 못하고 대기하므로 자원 낭비
  • 논블로킹
    • I/O 작업이 진행되는 동안 유저 프로세스의 작업을 중단 시키지 않는 방식
    • I/O 진행시간과 관계가 없기 때문에 애플리케이션에서 작업을 중지하지 않고도 I/O 작업을 진행 가능하다
    • 반복적으로 시스템 호출이 발생하기 때문에 자원낭비

블로킹 / 논블로킹

 

 라운드 로빈(Round Robin)

  • 시분할, 코드를 일정 시간으로 짤라서 실행
  • 여러 작업을 할 때 각 코드에 대해서 일정한 시간 동안 진행 후 다른 코드를 진행한다. 한번 다 돌린 후에 다시 이어서 진행