Node.js 핵심개념

2022. 7. 20. 11:27·개발/node.js
728x90
반응형

1.노드의 핵심개념

[1] 서버
클라이언트는 서버에 요청을 보내고 서버는 그 요청에 응답한다.
서버는 응답만 하는것이 아니라 다른 서버에 또 요청하는 클라이언트가 될수 있다.

[2] 자바스크립트 런타임
런타임이란? 특정언어로 만든 프로그램들을 실행할수 있는 환경
노드란 자바스크립트 런타임이다. 자바스크립트 실행기라고 봐도 무방하다.

[3] 이벤트 기반
노드는 이벤트 기반 방식으로 동작하기 때문에 이벤트가 발생하면 콜백 함수를 호출한다.
발생한 이벤트가 없거나 발생했던 이벤트를 다 처리하면 다음 이벤트 발생까지 대기한다.

함수를 실행하면 호출스택에 쌓이고 반대순으로 실행된다.
이벤트 루트가 있다면 함수의 콜백함수가 백그라운드로 간 후 태스크 큐에 대기한다.
호출스택이 비워진 후 태스크큐에 있는 콜백함수들을 호출스택으로 올려 실행한다.

[4] 논 블로킹 I/O
I/O 는 input(입력)/output(출력) 을 의미한다.
기본적으로 자바스크립트 코드는 동시에 실행 될수 없다. 그러나 네트워크 요청과 같은 I/O 작업은 동시에 실행될수 있다.
논 블로킹이란 이전 작업이 완료 될때 까지 대기하지 않고 다음 작업을 수행함을 뜻한다.
블로킹은 반대로 이전 작업이 끝나야 다음 작업을 수행할 수 있다.

*setTimeout(콜백, 0) : 브라우저와 노드에서는 기본적인 지연시간이 있으므로 바로 실행되지 않는다.

[5] 싱글 스레드
프로세스와 스레드의 차이점
프로세스는 노드와 웹브라우저같은 프로그램이다. 프로세스는 메모리 등의 자원을 공유하지 않는다.
프로세스에서 여러개의 스레드를 생성해 작업을 동시에 처리할 수 있다. 
스레드들은 부모 프로세스의 자원을 공유한다.
스레드들은 같은 주소의 메모리에 접근 가능하므로 데이터를 공유할 수 있다.

노드를 실행하면 하나의 프로세스를 생성한다.
프로세스에서 여러개의 스레드를 생성하지만 제어할수 있는 스레드는 한개 뿐이다.

노드가 싱글스레드로 동작하지 않는 두가지 경우
스레드풀 : 특정 동작을 수행할 때 멀티 스레드를 사용 (암호화, 입출력, 압축)
워커스레드 : 노드12버전에서 멀티 스레드를 이용할 수 있다. CPU작업이 많은경우 이용하면 된다.

노드는 싱글스레드 논블로킹 방식이다.

728x90
반응형

'개발 > node.js' 카테고리의 다른 글

[Node.js] socket.io 로 채팅방 만들기  (0) 2022.07.26
[Node.js] 삭제, 수정버튼 만들기  (0) 2022.07.26
[node.js] express, MySQL  (0) 2022.07.25
[node.js] formatting, linting  (0) 2022.07.19
[node.js] node.js  (0) 2022.07.19
'개발/node.js' 카테고리의 다른 글
  • [Node.js] 삭제, 수정버튼 만들기
  • [node.js] express, MySQL
  • [node.js] formatting, linting
  • [node.js] node.js
TeTedo.
TeTedo.
  • TeTedo.
    TeTedo 개발 일기
    TeTedo.
  • 전체
    오늘
    어제
    • 분류 전체보기 (319)
      • 개발 (274)
        • Article (4)
        • 정리 (21)
        • Spring Boot (17)
        • JPA (2)
        • JAVA (6)
        • Database (4)
        • 자료구조 (11)
        • 알고리즘 (32)
        • React (20)
        • Docker (10)
        • node.js (18)
        • Devops (11)
        • Linux (4)
        • TypeScript (3)
        • Go (10)
        • HyperLedger (4)
        • BlockChain (43)
        • html, css, js (48)
        • CS (3)
        • AWS (3)
      • 모아두고 나중에 쓰기 (3)
      • 팀프로젝트 (18)
        • SNS(키보드워리어) (9)
        • close_sea (9)
      • 개인프로젝트 (1)
        • Around Flavor (1)
        • CHAM (13)
        • ethFruitShop (5)
      • 독서 (0)
        • 스프링부트와 AWS로 혼자 구현하는 웹 서비스 (0)
  • 블로그 메뉴

    • 홈
    • 개발일기
    • CS
    • 실습
    • 코딩테스트
    • 웹
    • Go
    • node.js
    • 팀플
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    ERC721
    프로그래머스
    go
    블록체인
    하이퍼레저
    30일 챌린지
    go언어
    node.js
    도커
    nodejs
    html
    명령어
    React
    30일챌린지
    erc20
    js
    CSS
    컨테이너
    node
    mysql
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
TeTedo.
Node.js 핵심개념
상단으로

티스토리툴바