01. NodeJS 시작하기

Kim Sang Yeob·2023년 1월 7일
0

NodeJS Book 3th

목록 보기
1/9
post-thumbnail

1.1 노드의 정의

1) 노드의 정의

  • Node.js는 크롬 V8 자바스크립트 엔진으로 빌드된 자바스크립트 런타임
  • 서버의 역할도 수행할 수 있는 자바스크립트 런타임
  • Node.js를 통해 자바스크립트로 작성된 서버를 실행할 수 있다.

2) 내부 구조

  • V8 엔진 : 오픈소스 자바스크립트 엔진 -> 속도 문제 개선
  • libuv : 노드의 특성인 이벤트 기반, 논블로킹 I/O 모델을 구현한 라이브러리

1.2 노드의 특성

1) 이벤트 기반

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

2) 논블로킹 I/O

논 블로킹 : 오래 걸리는 함수를 백그라운드로 보내서 다음 코드가 먼저 실행되게 하고, 나중에 오래 걸리는 함수를 실행.

  • 논 블로킹 방식 하에서 일부 코드는 백그라운드에서 병렬로 실행됨
  • 일부 코드 : I/O 작업(파일 시스템 접근, 네트워크 요청), 압축, 암호화 등
  • I/O 작업이 많을 때 노드 활용성 극대화
  • 나머지 코드는 블로킹 방식으로 실행

3) 프로세스 vs 스레드

  • 프로세스 : 운영체제에서 할당하는 작업의 단위, 프로세스 간 자원 공유 X
  • 스레드 : 프로세스 내에서 실행되는 작업의 단위, 부모 프로세스 자원 공유
  • 노드 프로세스는 멀티 스레드이지만 직접 다룰 수 있는 스레드는 하나이기 때문에 싱글 스레드라고 표현
  • 노드는 주로 멀티 스레드 대신 멀티 프로세스 활용
  • 노드는 14버전부터 멀티 스레드 사용 가능

4) 싱글 스레드

  • 블로킹이 발생하는 경우 나머지 작업은 모두 대기 -> 비효율

대신 논 블로킹 모델을 채택하여 일부 코드(I/O)를 백그라운드(다른 프로세스)에서 실행 가능

  • 요청을 먼저 받고, 완료될 때 응답함
  • I/O 관련 코드가 아닌 경우 싱글 스레드, 블로킹 모델과 같아짐

5) 멀티 스레드 vs 싱글 스레드

  • 싱글 스레드 모델은 에러를 처리하지 못하는 경우 멈춤
  • 멀티 스레드 모델은 에러 발생 시 새로운 스레드 생성하여 극복

6) 멀티 스레드의 활용

노드 14 버전

  • 멀티 스레드를 사용할 수 있도록 worker_threads 모듈 도입
  • CPU를 많이 사용하는 작업인 경우 활용 가능
  • 멀티 프로세싱만 가능했던 아쉬움 해결

1.3 노드의 역할

1) 서버와 클라이언트

  • 서버 : 네트워크를 통해 클라이언트에 정보나 서비스를 제공하는 컴퓨터 또는 프로그램
  • 클라이언트 : 서버에 요청을 보내는 주체 (브라우저, 데스크탑 프로그램, 모바일 앱, 다른 서버에 요청을 보내는 서버)

2) 서버로서의 노드

노드 서버의 장단점

  • CPU 작업을 위해 AWS Lambda나 Google Cloude Functions같은 별도 서비스 사용
  • 페어팔, 넷플릭스, 나사, 월마트, 링크드인, 우버 등에서 메인 또는 서브 서버로 사용

3) 서버 외의 노드

  • 자바스크립트 런타임이기 때문에 용도가 서버에만 한정되지 않음
  • 웹, 모바일, 데스크탑 애플리케이션에도 사용
    • 웹 프레임워크 : Angular, React, Vue, Meteor 등
    • 모바일 앱 프레임워크 : React Native
    • 데스크탑 개발 도구 : Electron(Atom, Slack, VSCode, Discord 등 제작)
profile
Studying NodeJS...

0개의 댓글