Node.js

sang one leee·2023년 8월 2일
0

Node.js

1. Node.js란?

노드가 JavaScript로 쓰여졌지만 언어로 작성되지 않았다. Node.js는 빠르고 확장 가능하며 이해하기 쉬운 여러 가지 이유에서 배울 수 있다. 이 기술은 개발자가 애플리케이션 서버측에서 JavaScript를 사용할 수 있도록 해주는 기술이다. Node.js는 서버측 및 네트워킹 애플리케이션에 초점을 맞춘 오픈 소스 교차 플랫폼 JavaScript 런타임 환경이다. Node.js를 통해 개발자는 이해하기 쉬운 코드를 사용하여 빠르고 확장 가능한 네트워크 애플리케이션을 구축할 수 있다. Windows OS, Mac OSX, Linux, Unix 및 기타 운영 체제에서 실행 가능하다.

Keyword

  • 구글 V8 자바스크립트 엔진
  • 고성능 네트워크 서버
  • 단일 쓰레드(Single Thread) 이벤트 루프(Event Loop) 기반
  • 비동기 I/O 처리(Non-Blocking I/O)
  • 자바스크립트
  • 개발 생산성 향상
  • 방대한 모듈 제공(NPM)

1-1. Thread

스레드는 CPU의 이용의 기본 단위다. 프로세스 내에서 프로그램 명령을 실행하는 기본 단위이자 흐름, 개체라고 할 수 있다. 스레드는 스레드 ID, 프로그램 카운터, 레지스터 집합, 스택 으로 구성된다. 스레드는 같은 프로세스에 속한 다른 스레드와 코드, 데이터 섹션, 열린 파일이나 신호와 같은 운영체제 자원들을 공유한다.

1-2. 단일 쓰레드 이벤트 루프 기반 비동기 방식

하나의 쓰레드가 request를 받으면 바로 다음 처리에 요청을 보내놓고 다른 작업을 처리하다가 먼저 요청한 작업이 끝나면 이벤트를 받아서 응답을 보낸다. 동시 request가 오더라도 처리가 완료될때까지 기다리지 않아도 되기 때문에 서버 부하가 적다.

1-3. Non-Blocking

블로킹은 Node.js 프로세스에서 추가적인 JavaScript의 실행을 위해 JavaScript가 아닌 작업이 완료될 때까지 기다려야만 하는 상황이다. 이는 이벤트 루프가 블로킹 작업을 하는 동안 JavaScript 실행을 계속할 수 없기 때문이다. Node.js에서, I/O 등의 JavaScript가 아닌 작업을 기다리는 것보다 CPU 집약적인 작업 때문에 나쁜 성능을 보여주는 JavaScript는 보통 블로킹이라고 부르지 않는다. libuv를 사용하는 Node.js 표준 라이브러리의 동기 메서드가 가장 대표적인 블로킹 작업이다. 네이티브 모듈도 블로킹 메서드를 가질 수 있습니다. Node.js 표준 라이브러리의 모든 I/O 메서드는 논블로킹인 비동기 방식을 제공하고 콜백 함수를 받는다. 일부 메서드는 같은 작업을 하는 블로킹 메서드도 가지는데 이는 이름 마지막에 Sync가 붙는다.

2. Node.js 동작원리

출처 : https://sjh836.tistory.com/149

3. Node.js를 왜 사용하는가

3-1. Google javascript 엔진이라는 것: 빠르고 확장가능한 웹앱이다.
3-2. 서버 측 애플리케이션: 노드는 특정 이벤트(사용자 작업, 메시지 등)에 의해 흐름이 결정되는 이벤트기반 프로그래밍 모델이다.
3-3. 아주 쉽게 확장가능하다. Uber와 Trello와 같은 앱처럼 여러 CPU 서버로 확장하기가 쉽다.
3-4. 노드는 개별 프로세스 기반으로 확장되어 멀티 코어 서버에 부하를 분산시킬 수 있습니다.
3-5. 데이터를 순수 JSON으로 관리할수 있습니다.
3-6. 실시간 어플을 만들기 좋다. 채팅앱 혹은 게임을 만들기 좋다.
3-7. 데이터 스트리밍에 좋습니다.

4. Node.js를 통한 개발

  • Node.js 가 어울리는 웹서비스
    간단한 로직.
    대용량(동시에 여러 request를 처리)
    빠른 응답시간 요구
    빠른 개발 요구
    비동기방식에 어울리는 서비스(네트워크 스트리밍 서비스, 채팅 서비스 등)
  • Node.js 가 어울리지 않는 웹서비스
    단일 처리가 오래 걸리는 경우 : 싱글 쓰레드이기 때문
    서버 체크로직이 많은 경우 : 비동기방식이기 때문에 CallBack Hell에 빠지지 않기 위해
    업무 복잡도/난이도가 높은 경우 : 에러가 나면 서버가 죽기 때문에 코드 품질 중요
profile
코린이 화이팅

1개의 댓글

comment-user-thumbnail
2023년 8월 2일

좋은 글 감사합니다.

답글 달기