1장 노드 시작하기 🚀

1.1 핵심 개념 이해하기

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

1.1.1 서버

서버란 : 네트워크를 통해 클라이언트에 정보나 서비스를 제공하는 컴퓨터 또는 프로그램.

노드는 서버인가🤔

노드는 자바스크립트 프로그램이 서버로서 기능하기 위한 도구를 제공하므로 서버 역할을 수행할 수 있다.

1.1.2 자바스크립트 런타임

런타임

특정 언어로 만든 프로그램들을 실행할 수 있는 환경. = 노드는 자바스크립트 실행기

1.1.3. 이벤트 기반

이벤트 기반(event-driven) : 이벤트가 발생할 때 미리 지정해둔 작업을 수행하는 방식.

이벤트 기반 시스템에서는 특정 이벤트가 발생할 때 무엇을 할지 미리 등록해야 한다. ⇒ 이벤트 리스너에 콜백 함수를 등록한다.

이벤트 루프 : 여러 이벤트가 동시에 발생했을 때 어떤 순서로 콜백 함수를 호출할지를 판단.

일반적인 동기 자스 실행 순서
0. 전역 컨텍스트인 anonymox가 콜 스택에 들어간다.
 1. 함수를 발견하면 전역 컨텍스트 위로 콜 스택에 쌓는다.
 2. 호출된 순서와 반대로 실행이 완료된다.

궁금한 거 : 컨텍스트는 함수가 호출되었을 때 생성되는 환경이라고 했고, 자스 코드는 실행 시 기본적으로 전역 컨텍스트 안에서 돌아간다고 했는데...음 잘 개념이 안잡힌다.

비동기
  • 이벤트 루프 : 이벤트 발생 시 호출할 콜백 함수들을 관리하고, 호출된 콜백 함수의 실행 순서를 결정하는 역할을 담당. 노드가 종료될 때까지 작업을 반복하므로 loop.
  • 백그라운드 : setTimeout 같은 타이머나, 이벤트 리스너들이 대기하는 곳. 자스가 아닌 다른 언어로 작성된 프로그램.
  • 태스크 큐 : 이벤트 발생 후, 백그라운드에서는 태스크 큐로 타이머나 이벤트 리스너의 콜백 함수를 보낸다. (=콜백 큐)
  • 정리 : 콜 스택에서 이벤트 리스너가 실행되면 이벤트와 콜백을 백그라운드로 보내고, 이벤트가 끝나면 콜백은 콜백 큐로 들어간다. 그리고 콜 스택이 비어 있으면 이벤트 루프는 콜백 큐에서 콜백 함수를 하나씩 가져와 콜 스택에 넣고 실행한다.
  • 콜 스택에 함수들이 너무 많이 들어 있으면 setTimeout 의 경우 정확한 시간에 맞춰 나오지 않을 수 있다.

1.1.4. 논 블로킹 I/O

이전 작업이 완료될 때까지 대기하지 않고 다음 작업을 수행하는 것.

I/O : input & output. 파일 시스템 접근(파일 읽기, 파일 쓰기, 폴더 만들기 등)이나 네트워크를 통한 요청 등.

자바스크립트 코드는 기본적으로 동시에 실행될 수 없으나, 자바스크립트 상에서 돌아가는 것이 아닌 I/O 작업 같은 것은 동시에 처리 가능하다.

setTimeout(콜백, 0) 자주 사용하는 논 블로킹 기법.

1.1.5 싱글 스레드

스레드가 하나뿐이라는 것을 의미. 다만 노드는 스레드는 여러 개인데 제어할 수 있는 건 하나 뿐이라 그렇게 여겨짐.

프로세스와 스레드
  • 프로세스 : 운영체제에서 할당하는 작업의 단위. 노드나 웹 브라우저 등. 프로세스 간에는 메모리 등의 자원을 공유하지 않음.
  • 스레드 : 프로세스 내에서 실행되는 흐름의 단위. 프로세스는 스레드를 여러 개 생성해 작업을 동시에 처리할 수 있다. 스레드들은 부모 프로세스의 자원을 공유한다.

1.2 서버로서의 노드

노드는 I/O 요청을 논 블로킹 방식으로 처리하므로 많은 수의 I/O 요청이 들어오는 서버 작업에 적합하다.

다만 싱글 스레드이므로 CPU 부하가 큰 작업(대규모 데이터 처리 등)에는 적합하지 않다.

so, 개수는 많지만 크기는 작은 데이터를 주고받는 데 적합하다.

주의할 점 : 스레드가 하나뿐이라 에러로 멈추지 않도록 잘 관리해야 한다.

장점
  1. 멀티 스레드 방식에 비해 적은 컴퓨터 자원 사용
  2. I/O 작업이 많은 서버로 적합
  3. 멀티 스레드 방식보다 쉬움
  4. 웹 서버가 내장되어 있음
  5. JSON 형식과 쉽게 호환됨
단점
  1. 기본적으로 싱글 스레드라서 CPU 코어를 하나만 사용
  2. CPU 작업이 많은 서버로는 부적합
  3. 하나뿐인 스레드가 멈추지 않도록 관리가 필요함
  4. 서버 규모가 커졌을 때 서버를 관리하기 어려움
  5. 어중간한 성능

1.3 서버 외의 노드

웹 프레임워크 개발. (Angular, React, Vue etc.)

데스크톱 개발 도구 (Electron)

1.4 개발 환경 설정하기

LTS와 Current 버전의 차이

  • LTS : 기업을 위해 3년간 지원. 짝수 버전만 LTS가 될 수 있음. 서버를 안정적으로 운영해야 하는 경우
  • Current : 최신 기능. 짝수 버전은 나중에 LTS가 되므로 Current부터 사용 고려 추천.

노드, npm 버전 확인 : node -v npm -v

npm 버전 업데이트 : npm install -g npm

results matching ""

    No results matching ""