본문 바로가기

BE/Node.js 교과서

1장 노드 시작하기

728x90

1.1 핵심 개념 이해하기

  • Node.js란
    • Chrome V8 Javascript 엔진으로 빌드된 자바스크립트 런타임
     

  • libuv 라이브러리
    • 이벤트 기반
    • 논블로킹 I/O 구현

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

  • 이벤트 루프(event loop)
    • 여러 이벤트가 동시에 발생했을 때 어떤 순서로 콜백 함수를 호출할지 이벤트 루프가 판단
    function first() {
    	second();
    	console.log('첫번째');
    }
    function second() {
    	third();
    	console.log('두번째');
    }
    function third() {
    	console.log('세번째');
    }
    first();
    
    • 호출순서: first() → second() → third()
    • 실행 완료 순서 : 세번째 → 두번째 → 첫번째
     

  • anonymous: 전역 콘텍스트 (global context) 의미
//시작 -> 끝 -> 3초후 실행
function run () {
	console.log('3초 후 실행');
}
console.log('시작');
setTimeout(run, 3000);

console.log('끝');
  • 이벤트 루프: 이벤트 발생 시 호출할 콜백 함수들 관리, 호출된 콜백 함수의 실행 순서를 결정하는 역할을 담당, 노드가 종료될 때까지 이벤트 처리를 위한 작업을 반복
  • 백그라운드: setTimeout 같은 타이머나 이벤트 리스너들이 대기하는 곳 자바스크립트가 아닌 다른 언어로 작성된 프로그램이라고 봐도 무방, 여러 작업이 동시에 실행될 수 있음
  • 태스크 큐: 이벤트 발생 후 백그라운드에서는 태스크 큐로 타이머나 이벤트 리스너의 콜백함수를 보냄, 정해진 순서대로 콜백들이 줄을 서 있으므로 콜백 큐라고도 부름, 콜백들은 보통 완료된 순서대로 줄을 서지만 특정한 경우 순서가 바뀌기도 함

  • 호출 스택 실행이 끝나 비워지면 이벤트 루프가 태스크 큐의 콜백을 호출 스택으로 올림
  • run이 호출 스택에서 실행되고 제거되면 이벤트 루프는 태스크 큐에 콜백이 들어올 때까지 대기

  • 논블로킹 I/O
    • I/O : 입력(Input)/ 출력(Output)을 의미
    • 논블로킹(non-blocking, 비동기): 이전 작업이 완료될 때까지 대기하지 않고 다음 작업을 수행하는 것
    • ↔ 블로킹(blocking, 동기): 이전 작업이 끝나야만 다음 작업을 수행하는 것
//블로킹 예제 
function longRunningTask() {
	console.log('작업 끝');
}

console.log('시작');
longRunningTask();
console.log('다음 작업');

콘솔: 시작 → 작업 끝 → 다음작업

//논블로킹 예제
function longRunningTask() {
	console.log('작업 끝');
}
console.log('시작');
setTimeout(longRunningTask,0);
console.log('다음 작업');

콘솔: 시작 → 다음작업 → 작업 끝

  • setTimout(콜백,0)이 바로 실행되지 않는 이유: 브라우저와 노드간 지연시간이 존재하기 때문
  • 논블로킹 ≠ 동시
    • 동시성은 동시 처리가 가능한 작업을 논블로킹 처리해야 얻을 수 있는 것

  • 싱글 스레드

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

cf. 노드가 싱글 스레드인 이유 : 내부적으로 여러개의 스레드를 생성하긴 하나, 직접 제어할 수 있는 스레드는 하나뿐이기 때문

1.2 서버로서의 노드

노드의 장단점

장점 단점 보완
멀티 스레드 방식에 비해 컴퓨터 자원 적게 사용 싱글 스레드라서 CPU 코어 하나만 사용 멀티 프로세싱으로 커버
I/O 작업이 많은 서버로 적합 CPU 작업이 많은 서버로는 부적합 AWS Lambda나 Google Cloud Functions 같은 서비스에서 작업 처리 지원해줌으로써 커버
멀티 스레드 방식보다 쉬움 하나뿐인 스레드가 멈추지 않도록 관리해야 함 try catch문으로 에러처리로 커버
웹 서버가 내장되어 있음 서버 규모가 커졌으 때 서버를 관리하기 어려움 nginx 등의 웹서버와 노드 서버 연결로 극복
자바스크립트를 사용함 자바스크립트 자체의 문제점(ex. 암시적 형변환 등..) Typescript를 사용해 커버
JSON 형식과 호환하기 쉬움    

1.3 서버 외의 노드

웹 프레임워크

  • 앵귤러,리액트,뷰

모바일 개발도구

  • 리액트 네이티브

데스크톱 개발도구

  • 일렉트론

1.4 개발 환경 설정하기

노드 설치

728x90

'BE > Node.js 교과서' 카테고리의 다른 글

4장 http 모듈로 서버 만들기  (1) 2023.11.03
3장 노드 기능 알아보기  (1) 2023.11.03
2장 알아둬야 할 자바스크립트  (1) 2023.10.31