본문 바로가기

Node.JS

[Node.js 교과서] 0-1. 자바스크립트와 NodeJS

자바스크립트란?

 

웹브라우저에서 화면을 띄울 때 세가지 프로그래밍 언어를 씀

1)  HTML (HyperText Markup Language) : HTML로 이 엘리먼트에 정보를 담는 언어

※ 엘리먼트 : 웹 브라우저 화면에 보이는 컨텐츠

2) CSS (Cascading Style Sheets) : 엘리먼츠를 디자인하는 언어

3) JavaScript (자바스크립트) : 엘리먼츠를 움직이게하는 언어

 

 

자바스크립트의 대표적 단점

Implicit type conversion (암시적 형 변환)

아래와 같이 브라우저의 콘솔창에서 JS를 실행하면

왼쪽과 같이 예상가능한 결과가 나옴

But 뺄셈의 경우 오른쪽 그림과 같이 두개의 값을 비교 또는 연산할 때 예상된 결과가 안나옴

(다른 언어의 경우 "101"-"1"의 경우 에러가 나옴)

오른쪽 뺄셈 결과는 예상하지 못한 결과

자바스크립트는 열흘만에 급하게 만든 언어여서 문법적인 부분이 완벽하지 않음

 

하지만 자바스크립트는 배우기 쉬운 언어라 대중성이 있기 때문에

 

크롬의 V8 엔진으로 자바스크립트를 컴퓨터가 이해할 수 있게 해석 

 

 

Node.JS

면접용 공식 표현 : 크롬 V8엔진으로 빌드 된 자바스크립트 런타임

(런타임 : 특정 언어로 만든 프로그램들을 실행할 수 있게 해주는 가상 머신의 상태 -> 크롬의 V8엔진사용

다른 런타임으로는 웹 브라우저 (크롬, 엣지, 사파리, 파이어폭스 등...)가 있음

)


현실용 표현 : 자바스크립트를 프런트뿐만 아니라 백엔드를 설계할 수 있는 툴 

Node.JS는 서버가 아님 But 서버의 역할도 수행할 수 있는 JS 런타임

노드로 JS로 작성된 서버를 실행할 수 있음

서버 실행을 위해 필요한 http/https/http2 모듈을 제공

 

node js가 나옴에 따라 JS는 브라우저로부터의 종속성에서 벗어날 수 있게됨

html이 아니어도 node js로 JS를 실행할 수 있게

이것은 JS가 웹뿐만 아니라 앱, 게임, 서버도 만들 수 있게되어 JS 언어의 확장성을 넓어짐

 

Node.JS 특징

(1) 프론트엔드 엔지니어들이 쉽게 백엔드 서버를 개발할 수 있음

(2) 배우기 쉬운 대중적인 언어인 자바스크립트로 백엔드 서버를 개발 할 수 있음

(3) 비동기 이벤트 주도, 논-블로킹으로 효율적이고 확장성 있는 네트워크 앱을 만들 수 있도록 설계

(비동기 처리 구현은 루비의 이벤트머신, 파이썬의 트위스티드가 먼저)

싱글스레드이면서 비동기 모델이여서 빠른 성능을 이끌어 낼 수 있음 -> Node Js의 내부 구조중 libuv 라이브러리 (이벤트 기반, 논블로킹 I/O 모델을 구현한 라이브러리)덕분