Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

덕배의 블로그

웹 개발에 필요한 Node.js에 대해 알아보자 본문

서버

웹 개발에 필요한 Node.js에 대해 알아보자

김덕배_KDB 2023. 7. 8. 03:18
반응형

 

node js
Node.js

Node.js란?

Node.js는 Chrome V8JavaScript 엔진으로 빌드된 JavaScript 런타임이다.

 

Node.js 특징

  • 노드를 통해 다양한 자바스크립트 애플리케이션을 실행할 수 있으며, 서버 실행에 자주 사용 된다.
  • Node.js는 서버사이트 스크립트 언어가 아니다. 프로그램이다.
  • Node.js는 웹서버와 같이 확장성 있는 네트워크 프로그램을 제작하기 위해 만들어졌다.
  • Non-blocking I/O와 단일 스레드 이벤트 루프를 통한 높은 처리 성능을 가지고 있다.
  • 내장 HTTP 서버 라이브러리를 포함하고 있어 웹 서버에서 아파치 등의 별도 소프트웨어 없이 동작이 가능하다. 이로써 웹 서버의 동작에 있어 더 많은 통제에서 벗어나 여러 가지 기능을 가능하게 한다.
  • 스크립트 언어는 특정한 프로그램 안에서 동작하는 프로그램이기 때문에 웹 브라우저 프로그램 안에서만 동작을 한다.
  • JavaScript를 웹 브라우저에서 독립시킨 것으로 Node.js를 설치하게 되면 터미널 프로그램에서 Node.js를 사용 가능하다.

 

JavaScript Runtime

  • 런타임이란 특정 언어로 만든 프로그램을 실행할 수 있는 환경을 뜻한다.
  • 노드는 자바스크립트 프로그램을 컴퓨터에서 실행할 수 있게 하는 자바스크립트 실행기이다.

 

Event-Driven

  • 노드는 V8 더불어 libuv라는 라이브러리를 사용한다.
  • libuv 라이브러리는 노드의 특성인 이벤트 기반, 논 블로킹 I/O 모델을 구현하고 있다.
  • 이벤트 기반이란 이벤트가 발생할 때 미리 지정해 둔 작업을 수행하는 방식을 의미한다.
  • 특정 이벤트가 발생할 때 무엇을 할지 미리 등록, 이를 이벤트 리스너에 콜백함수를 등록한다.
  • 이벤트가 발생하면 리스너에 등록해 둔 콜백함수를 호출하며, 이벤트가 끝난 후 노드는 다음 이벤트가 발생할 때까지 대기한다.

 

 

Event-Loop

event loop
Event loop

  • 이벤트 루프는 여러 이벤트가 동시에 발생했을 때 어떤 순서로 콜백함수를 호출할지를 이벤트 루프가 판단한다.
  • 노드는 이벤트가 종료될 때까지 이벤트 처리를 위한 작업을 반복하므로 루프라고 부른다.

 

 

Non blocking I/O

  • 이벤트 루프를 잘 활용하면 오래 걸리는 작업을 효율적으로 처리할 수 있다.
  • 작업은 동시에 실행될 수 있는 작업과 동시에 실행될 수 없는 작업으로 나뉜다.
  • 파일 시스템 접근, 네트워크를 통한 요청 작업은 입력/출력의 일종이며 이러한 작업을 할 때 노드는 비동기 방식으로 블로킹을 만들지 않게 끔(논 블로킹) 처리한다.
  • 비동기란 이전 작업이 완료될 때까지 대기하지 않고 동시에 작업을 수행 한하고 동기는 이전 작업이 끝나고 다음 작업을 수행한다.
  • 함수 호출 시 당장 실행하는 것이 아니라(동기→블로킹) 일단 어느 곳에 쌓아 놓고 동시에 요청을 처리하고(비동기→논 블로킹) 요청이 완료된 순서대로 처리(스택 이용) 한다는 말이다.

 

 

Single Thread

  • 이벤트 기반, 논 블로킹 모델과 더불어 노드를 설명하는 키워드 중 하나는 싱글 스레드이다. 자바 스크립트 코드는 동시에 실행될 수 없는데 그 이유는 노드가 싱글 스레드 기반이기 때문이다.
  • Node.js는 싱글스레드, 논 블로킹 모델로 싱글 스레드가 혼자서 일을 처리하지만 들어오는 요청 순서가 아닌 논 블로킹 방식으로 이전 작업이 완료될 때까지 대기하지 않고 다음 작업을 수행한다.

여기서 프로세스에 대해서 알면 좋다

- 프로세스 : 운영체제에서 할당하는 작업의 단위이다. 노드나 웹 브라우저 같은 프로그램은 개별적인 프로세스이다. 프로세스 간에는 메모리 등의 자원을 공유하지 않는다. 스레드 : 스레드는 프로세스 내에서 실행되는 흐름의 단위이다. 프로세스는 스레드를 여러 개 생성해 여러 작업을 동시에 처리할 수 있다. 스레드들은 부모 프로세스의 자원을 공유한다. 같은 주소의 메모리에 접근 가능하므로 데이터를 공유할 수 있다.

 

 

참고

  • 노드는 기본적으로 싱글 스레드, 논 블로킹 모델을 채용하므로 I/O 요청이 많이 발생하면 노드를 서버로 사용하는 것이 좋다. 하지만 노드는 CPU 부하가 큰 작업에는 적합하지 않다.
  • 우리가 작성하는 코드는 모두 스레드 하나에서 처리되기 때문에 코드가 CPU 연산을 많이 요구하면 스레드 하나가 혼자서 감당하기 어렵다.
  • 즉, 개수는 많지만 크기는 작은 데이터를 실시간으로 주고받는데 노드는 적합하다. 예를 들어 네트워크나 데이터베이스, 디스크 작업 같은 I/O에 특화되어 있다. 실시간 채팅 애플리케이션, 주식 차트도 포함된다.
  • 결론적으로 노드의 장점은 첫 째, 멀티 스레드 방식에 비해 적은 컴퓨터 자원을 사용한다. 둘째, I/O 작업이 많은 서버로 적합하다. 셋째, 웹 서버가 내장되어 있어 별도의 웹서버를 설치할 필요가 없다. 넷째, 자바스크립트를 사용하기 때문에 JSON 형식과 쉽게 호환된다.

 

 

 

이렇게 Node.js에 대해서 알아보았는데 좋은 자료가 되었으면 좋겠습니다!