본문 바로가기

Back End/NodeJs

Node Js 기초

반응형

1. Node Js? JAVA랑 C#이랑 뭐가 달라?

 

Node.js

C#

Java

프로그래밍언어

JavaScript

C#

Java

플랫폼

Node.js

.NET

JVM

웹 프레임워크

Express

APT.NET / MVC

Spring MVC

템플릿() 엔진

EJS / Pug(Jade)

ASPX / Razor

JSP / Thymeleaf

DB

mySQL, MongoDB, Oracle.. 

mySQL, MongoDB, Oracle..  mySQL, MongoDB, Oracle.. 

Node js도 JAVA의 JVM 이나 C# .NET같이 Virtual Machines이 존재한다. 

 => 우리의 코드가 어느 OS든지 독립적으로 실행!! ( 2번 컴파일 후에 )

 

이전의 자바스크립트는 Language가 아닌, 라인 바이 라인으로 컴파일하지 않는 인터프리터 스크립트 였으나,

기계어 컴파일하는 크롬의 V8엔진은 기능이 들어가므로써 서버의 역활이 가능해졌다.

=> 속도가 엄청 빠른 서버단의 탄생 
=> 서버와 클라이언트 둘 다 가능하다! 
 https://trustyoo86.github.io/node.js/2017/11/17/javascript-v8-change-history.html

 

kern의 FE-Note

kern의 Front-end 개발 노트입니다.

trustyoo86.github.io

2. About NodeJs ..

https://nodejs.org/ko/about/

 

Index | Node.js v10.15.3 Documentation

 

nodejs.org

As an asynchronous event driven JavaScript runtime, Node is designed to build scalable network applications. 


☝🏻Asynchronous

 

JAVA도 C도 동기식의 멀티 스레드 
=> 멀티 스레드로 처리 ( 메모리 관리 지원 관리가 필요한 ) 프로세스 하나를 싱글 스레드가 아닌 스레드 풀을 만들어 한번에 순서대로 처리하기 때문에, 여러 작업 한번에 처리가 가능하다,

NodeJS는 비동기 싱글 스레드  
서버는 모든 클라이언트를 수용해야함... 처리가 빨라야 한다.. 그러나, 시간, 자원 소요 큰 I/O 작업은 작업 비동기로 처리한다면..?
=> 싱글 스레드 즉, 프로세스 하나에 스레드 하나 ! 스레드 하나로 모든 클라이언트 수용한다. 큐에 요청들 받아두고 비동시 식으로 (콜백) 처리한다
. 그러나, 노드안의 엔진 ( 80% 이상이 C/C++로 구현되어 있다고 한다 ) 은 멀티 스레드로! 완벽한 자원관리 엔진으로 자바나 c#보다 속도가 같거나 빠를 수 있다. 

이는 오늘날 OS 스레드가 일반적으로 사용하는 동시성 모델과는 대조적입니다. 스레드 기반의 네트워크는 상대적으로 비효율적이고 사용하기가 몹시 어렵습니다. 게다가 Lock이 없으므로 Node의 사용자는 프로세스의 dead-locking에 대해서 걱정할 필요가 없습니다. Node에서 I/O를 직접 수행하는 함수는 거의 없으므로 프로세스는 결과 블로킹 되지 않습니. 아무것도 블로킹 되지 않으므로 Node에서는 확장성 있는 시스템을 개발하는 게 아주 자연스럽습니다.
참고 > https://nodejs.org/ko/docs/guides/blocking-vs-non-blocking/

☝🏻Event Driven

대기하다가 요청에 응답하기 위해
=> 이벤트 기반으로 계속 listening.... 클라이언트의 요청이 오면 그에 대해 응답. 
서버에서는 클라이언트가 요청할 이벤트를 정의하고, 그 이벤트에 이벤트리스너에 등록하기만 하면 OK!

☝🏻Network Applications 

네트워크 애플리케이션을 위한 플랫폼이라고 한다. 
http는 한번 요청에 응답 한번
tcp/utp를 이용한 소켓통신 : 주식이나 카톡 같이 페이지를 다시 로딩 하지 않아도, 실시간으로 변화를 반영해야하는.. 즉, 한번의 요청에 계속적인 응답을 주는 통신 방식 => 노드는 소켓 관련 모듈이 너무 잘 되어있어!

 

자바스크립트 엔진

 

 

작성한 자바스크립트 소스 코드는 구문 분석과 어휘 분석 과정을 거쳐 Abstract Syntax Tree(AST) 를 생성한다. AST를 바탕으로, 인터프리터는 바이트 코드를 생성한다. 여기까지가 자바스크립트로 작성된 코드를 실제로 엔진이 실행하는 부분입니다.

코드를 더 빠르게 실행하기 위해, 바이트코드는 프로파일링 된 데이터와 함께 최적화 컴파일러(optimizing compiler)로 보내집니다. 이곳에서는 프로파일링 데이터를 기반으로 매우 최적화 된 기계어를 생성합니다. 만약 정확하지 않은 결과가 나왔다면 다시 deoptimizes하여 바이트 코드로 되돌립니다.

이제 노란 박스에 들어있는 과정을 자세히 봅시다!

인터프리터/컴파일러 파이프라인

인터프리터가 코드를 해석하고, 최적화 할 때 주요 자바스크립트 엔진들 사이에 어떤 차이가 있는지 알아봅시다. 일반적으로는 다음과 같은 공통된 파이프라인을 가집니다.

 

 

https://velog.io/@godori/JavaScript-%EC%97%94%EC%A7%84-%ED%86%BA%EC%95%84%EB%B3%B4%EA%B8%B0-mdjowmjlcb

https://velog.io/@godori/JavaScript-%EC%97%94%EC%A7%84-%ED%86%BA%EC%95%84%EB%B3%B4%EA%B8%B0-2-pujpqum2ji

 

velog

velog 개발자들은 대체 글을 어디서 써야 할까....? 마크다운, 코드 하이라이팅 등... 개발자들의 취향저격하는 글쓰기 플랫폼이 바로 여기에, 고민하지 말고 지금 시작하자.

velog.io

 

JavaScript 엔진 톺아보기 (1)

이 포스트의 내용은 구글의 V8엔진 엔지니어인 Benedikt Meurer와 Mathias Bynens 의JavaScript Engines: The Good Parts 세션을 기반으로 작성하였습니다. 자바스크립트를 사용하면서, 그리고 내부적으로 V8 엔진을 사용하는 Electron이나 Node.js을 사용하여 개발하면서 그 근본이 되는 엔진이 어떻게...

velog.io

 

2. 다운로드 및 설치

https://nodejs.org/ko/ 

PS> 회사에서는 LTS 안정화 버전 (long term service)
 짝수만 받기 ! 홀수버전은 개발 버전이어서 Active가 되지 않음

 

설치가 완료되면, npm도 같이 설치된 모습을 볼 수 있다.

 

3. About npm

https://docs.npmjs.com/about-npm/

 

 

https://nodejs.org/dist/latest-v10.x/docs/api/

반응형

'Back End > NodeJs' 카테고리의 다른 글

Node.js 관련  (0) 2019.02.11