NodeJS- 더 북 정리 -1

박경현·2022년 10월 12일
0

개발 공부를 하다보니 결국 중요한거는 언어를 얼마나 잘알고 클론코딩을 많이 해봤냐가 아닌

이 시스템 전체를 이해하고 원리를 파악 하는것이 중요하다는 것을 깨달았다

그래서 핵심 원리를 정리해 놓은 책을 찾았고 거기에 있는 내용을 정리 해보았다

노드 JS는 서버가 아니다

Node js는 크롬 자바스크립트 엔진으로 빌드된 js 런타임(실행환경)

자바스크립트 런타임

런타임은 특정언어로 만든 프로그램들을 실행할 수 있는 환경

노드는 자바스크립트 프로그램을 컴퓨터에서 실행할 수 있습니다

기존의 자바스크립트는 웹 브라우저에서만 가능 => 브라우저는 자바스크립트 런타임을 내장해서
자바스크립트의 실행 속도 문제 때문에 다른 환경에서는 못 사용함!

구글의 V8엔진에서 노드 사용가능 => 노드는 v8과 더불어 libuv라이브러리 사용
v8과 libuv는 c와 c++로 구현되어 있다.
자바스크립트 코드는 노드가 알아서 v8과 libuv에 연결해주므로,
노드를 사용할때는 c++을 몰라도 됨

libuv 라이브러리는 노드의 특성인 이벤트 기반, 논 블로킹 I/O모델을 구현

NodeJS의 특징(이벤트 기반, 논 블로킹)

이벤트 기반

이벤트가 발생할 때 미리 지정해둔 작업을 수행
	-> 클릭이나 네트워크 요청등
이벤트 리스너에 콜백 함수를 등록한다 라고도 표현!

ex )클릭 이벤트 리스너에 경고창을 띄우는 콜백함수를 등록해두면 클릭 이벤트 마다 호출됨

이벤트를 다 처리하면 노드는 이 다음 이벤트가 발생할때까지 대기!

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

중요!! => 노드는 자바스크립트 코드의 맨 위부터 한 줄 씩 실행
함수 호출 부분 발견하면 호출 스택에 넣는다!! => 스택이기 때문에 위에 무언가 있으면 그것부터 나옴!

노드에서 코드 처리 할 때 필요한 부분 들

전역컨텍스트

컨텍스트는 함수가 호출되었을때 생성되는 환경
자바 스크립트는 기본적으로 전역 컨텍스트 안에서 돌아감
함수는 호출 스택에 머물 렀다가 호출시 스택에서 삭제!

이벤트 루프

: 이벤트 발생 시 호출할 콜백 함수들을 관리하고,
호출된 콜백 함수의 실행 순서를 결정하는 역할을 담당

백그라운드:

setTimeout같은 타이머나 이벤트 리스너들이 대기하는 곳 자바스크립트가 아닌 다른 언어로
작성된프로그램, 여러 작업이 동시에 실행 가능
=> setTimeout 3초면 백그라운드에서 3초 지나고 태스크 큐로 이동!

태스크 큐

: 이벤트 발생 후 백그라운드에서는 태스크 큐로 타이머나 이벤트 리스너의 콜백 함수를 보냄
정해진 순서대로 콜백이 줄 서있어서 콜백 큐라고도 불림 => 특정한 경우에 따라 순서 바뀌기도 함

논 블로킹

이벤트 루프를 활용하면 효과적으로 작업 처리 가능

자바스크립트는 동시에 실행 될수 없지만 I/O 작업은 동시 처리 가능 -
	ex) 파일 시스템 접근, 네트워크 요청 등 
    결국 이전 일 안끝나도 대기 안하고 다음 작업 수행 가능

노드는 I/O작업을 백그라운드로 넘겨서 동시에 처리!
=> 동시처리 가능한 작업들을 최대한 묶어서 백그라운드로 넘겨여 시간 절약
내가 코딩해야함?? => setTimeout같은 방식이 논 블로킹으로 코드를 만들어줌!

논블로킹은 동시와 같은 의미가 아니다! => 오래 걸리는 작업일 경우 실행 순서를 바꿔주면서 효율적인 상황 연출

싱글 스레드

자바스크립트가 동시에 실행 될수 없는 이유! =>

프로세스간에는 메모리 공유 안함,
노드나 웹브라우저 같은 프로그램은 개별적 프로그램

노드가 싱글 스레드인이유 -> 노드를 실행하면 하나의 스레드 나옴
-> 애가 내부적으로 스레드 생성 -> 하지만 직접제어는 하나만가능

스레드 풀 - 노드가 특정 동작 수행시 멀티 스레드 사용, 대표적으로 암호화

워커 스레드 - 노드가 멀티 스레드 가능! 내가 직접 다수의 스레드를 다루기 가능

필수 내용

노드는 싱글 스레드이면서 논블로킹 모델! => 하나만 일을 하지만 이걸 순서보다는 논블로킹으로 처리하려고 함

멀티스레드는 손님 한명이 올때마다 점원이 붙는다!! => 점원의 수가 늘어나고 해고 까다로움

노드의 단점은 CPU의 부하가 큰 작업은 적합하지 않다는 것!! -> 싱글 스레드 이기 때문에 코드 하나를 스레도에서 처리!!
노드는 이래서 개수는 많지만 크기가 작은 데이터를 실시간 주고 받을때 유용!! - 주식차트 채팅어플리케이션등

노드는 웹서버 내장, 생산성은 매우 좋지만 Go처럼 비동기에 강점을 보이는 언어나 로드밸런싱에 특화될 ![](https://velog.velcdn.com/images/rudgus/post/c1cc01b9-8ba7-4164-a7b3-ff183062b80c/image.png)

업로드중..
서버 - 네트워크를 통해 클라이언트에 정보나 서비스를 제공하는 컴퓨터 또는 프로그램
클라이언트 - 요청을 보내는 주체로 브라우저나 모바일 앱

profile
SW로 문제를 해결하려는 열정만 있는 대학생

0개의 댓글