-
Node-js 그게 뭔디?CodeingTestPrac 2022. 5. 6. 22:24
https://hanamon.kr/nodejs-%EA%B0%9C%EB%85%90-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0/
위에 나오는 설명에 부가적으로 알아보자
node.js.
이름에서 나온다 , 노드와 js
기존 웹 서버 + 프론트
front =. html ,css, js , server side : others of js
after node js -> build app and server all just use of JavaScript
정의 : Node.js는 Chrome V8 JavaScript 엔진으로 빌드 된 JavaScript 런타임입니다.
JS - oop base language like python , c
node.js = program & not language !
how to build ? - chrome V8 Js engine
what is chrome v8 engine ?
1. usually javascript run as interpreter like python But ! v8 engine compile script code into Bytecode
2. J.S higher than C++ , we could run C++ language code in j.s application by v8 -> could be more powerful
Ignition
Ignition은 자바스크립트 코드를 바이트 코드(ByteCode)로 변환하는 인터프리터이다. 원본 소스 코드보다 컴퓨터가 해석하기 쉬운 바이트 코드로 변환하여, 수시로 코드를 파싱(Parsing)하는 작업을 최소화하고 코드의 양도 줄임으로써 메모리 공간도 효율적으로 관리할 수 있게 된다.
-참고 https://helloinyong.tistory.com/290
JS - 동적 타이핑 언어 so -> 최적화가 힘들다 why ...? 실행전 값들을 알 수없잖아 ,, dynamic
js compile ---- 기계어(Binary code ) vs Bytecode
바이트 코드로 전부 변환하는 작업이 있어서 시간이 걸리지만 그 이후부터는 컴퓨터에 더 가까운 언어인 바이트 코드를 이용함으로써 컴파일 언어에 가까운 성능을 보일 수 있다.
. 기계어는 0과 1로 이루어진 바이너리 코드이다.
기계어는 특정한 언어가 아니다.
단지 CPU제조사에서 CPU를 만들 때 해당 CPU에서 사용하는 명령어 집합을 공개하는데, 이것을 '기계어'라고 부를 뿐이다.
때문에 CPU가 변경되면 기계어가 달라진다. 같은 동작을 하는 명령어지만 완전히 다른 0과 1의 나열이 될 수 있다는 말이다.
CPU가 이해할 수 있는 언어가 바이너리 코드라면 바이트 코드는 가상 머신이 이해할 수 언어이다.
CPU가 아닌 가상 머신에서 이해할 수 있는 코드를 위한 이진 표현법이다. 즉, 가상 머신이 이해할 수 있는0과 1로 구성된 이진코드를 의미.
https://shrtorznzl.tistory.com/82
Non-blocking I/O와 단일 스레드 이벤트 루프를 통한 높은 처리 성능을 가지고 있는 것이 특징이다.
-> 스템 호출 종료를 기다리지 않고 다음 처리로 넘어가는 것이 가능하다.
노드는 실행기
- 프로세스 : 운영체제에서 할당하는 작업의 단위이다. 노드나 웹 브라우저 같은 프로그램은 개별적인 프로세스이다. 프로세스 간에는 메모리 등의 자원을 공유하지 않는다.
- 스레드 : 스레드는 프로세스 내에서 실행되는 흐름의 단위이다. 프로세스는 스레드를 여러 개 생성해 여러 작업을 동시에 처리할 수 있다. 스레드들은 부모 프로세스의 자원을 공유한다. 같은 주소의 메모리에 접근 가능하므로 데이터를 공유할 수 있다.
싱글 스레드는 하나의 힙 영역과 하나의 콜 스택을 가진다.
->싱글 스레드는 동기적으로 일을 처리한다. 웹 브라우저의 WebAPIs는 비동기적으로 일을 처리한다.
동기적 일처리 => 순서대로 일을 처리한다,
- 자바스크립트 자체는 비동기적으로 요청을 처리할 수 없다.
- 자바스크립트 런타임 안에 지원하는 API로 비동기로 요청을 처리할 수 있게 하는 것이다.
- 힙은 변수와 객체의 메모리 할당에 사용되는 비정형 메모리이다.
- 콜 스택은 코드를 읽고 함수가 실행되는 순서를 기억하고 있다.
cf , spring 과 비교
spring 정적 - > 컴파일 오류 발견 가능큼
node single thread, spring multi thread
->따라서 I/O 작업과 같은 커넥션이 많고, 적은 CPU 연산을 처리하는 시스템에서는 Node.js가 CPU 연산이 많고, 커넥션이 적은 시스템에서는 Spring이 더 적합하고 할 수 있다.
'CodeingTestPrac' 카테고리의 다른 글
Node.js - study part 2 (0) 2022.05.13 Node.js - study part 1 (0) 2022.05.13 3월 10일 ,Flutter const vs final (0) 2022.03.10 3월 8일 ,flutter async await (0) 2022.03.08 Mac에서 CocoaPods설치 에러해결,rbenv update (0) 2022.02.17