본문 바로가기

Node.js

Node.js에 대하여

# Node.js가 뭘까?

Node.js에 대해서 찾아보면 "자바스크립트 런타임"이라는 답변이 많다. 

 

 

## HTML

- 웹페이지에 글쓰고 그림 넣는 언어. 그냥 정적인 페이지를 만들 수 있었다. 워드 문서랑 똑같다. 글있고 그림있고. 

사이트를 돌아다니다 보면 버튼 누르면 모달뜨고, 스크롤바 내리면 상단 메뉴가 디자인이 바뀌고 이런 동적인건 JS가 담당한다.

 

## JavaScript

- 웹페이지를 다이나믹하게 바꿔줄 수 있다. JS는 HTML 조작을 할 수 있기 때문. 

웹개발자들이 HTML을 조금더 다이나믹하게 만들고싶어서 JS를 HTML안에 끄적임.

- HTML에 종속된 언어이다. 즉, HTML 페이지를 위해 만든 언어.

프로그래밍을 위해 1+1 = 2 이런걸 하기위해 만들어진 언어가 아니다. HTML 조작을 위해 만든 언어.

 

 

그럼, JS는 누가 동작을 시킬까?

HTML 파일 하단에 조그맣게 JS를 쓰면 웹사이트가 다이나믹해지는데 이 JS해석은 누가 할까?

→ 바로, 브라우저가 담당한다. (Chrome, Internet Explorer, Firefox etc..)

브라우저마다 자바스크립트를 해석할 수있는 엔진이 있다. 

브라우저를 설치하면 같이 설치가 된다.

 

 

브라우저마다 자바스크립트 엔진이 다르다. 

  • Chrome - V8
  • FireFox - SpiderMonkey
  • Internet Explorer - Chakra

 

# V8

JS는 보잘것없는 언어였다. 그냥 HTML 내에  종속적으로 있으면서 웹페이지를 예쁘게 꾸미는 언어. 그 이상도 이하도 아니었다. 

그러다가 크롬이 V8을 만들어냈다.

 

V8은 굉장히 빠르다. 자바스크립트 해석을 잘해서 그렇다.

너무나도 뛰어나서 살을 덧붙여 V8이라는 자바스크립트 엔진을 크롬에서 떼어내어 이것 자체로 출시를 하게된다.

→ 그게 바로 Node.js

Node.js는 실은 크롬의 자바스크립트 해석 엔진으로 이루어져있다.

 

- Node.js를 만든 이유 : JS를 브라우저 내 말고도 다른 환경에서도 실행할 수 있게 만들어 놓은 것.

Node.js는 JS를 실행하기위한 창, 실행 환경(=런타임)이다. 자바스크립트 엔진을 이용할 뿐.

그래서 Node.js를 설치하면 브라우저 내 뿐만 아니라 로컬 컴퓨터 안에서도 JS문법을 실행할 수 있다.

 

 

 

Node.js덕분에 JavaScript를 프로그래밍 언어처럼 사용하기 시작.

Node.js로 서버도 만들 수 있네? 만들기 쉽다. 

 

 

# Node.js로 서버를 만드는 이유

왜 하필 Node.js로 서버를 만들까?

→ Non-blocking I/O 

 

 

 

예시)

- Server : 그냥 요청 처리하는 기계.

- Node.js로 만든 서버 vs 그냥 일반 언어로 만든 서버

 

영화관 웹서버를 하나 만들었다고 치자.

이 서버의 역할 : 누가 예매해달라고 하면 예매해서 고객에게 티켓을 보내준다.

 

 

1/ 일반 프로그래밍 언어로 만든 서버 : 네 명의 요청이 들어왔다.

첫번째 사람 : A 1장 예매요. 1초기다리세요.

..

세번째 고객 : 오래걸리는 요청을 보냄. 영화 200석을 예매하고싶은데?

서버입장에서는 굉장히 오래걸리는 작업이다.

200개를 예매하는동안 서버는 멈춘다. 다 끝난 다음에 네 번째 고객의 차례가 된다.

- 단점 : 버거운 요청을 중간에 만나면 서버가 잠시 중지를 해야한다. 다른 고객을 못받는다. 

 

 

2/ 똑같은 서버를 Node.js로 만들었다고 치자.

Node.js는 처리방식이 조금 특이하다. Non-blocking I/O라는 특성을 가지고 있다.

고객이 4명오면, 고객에게 일단 요청을 다 받는다. 그리고 결과를 바로바로 주지 않는다. 

처리속도가 빠른것부터 처리한다. 그리고 오래걸리는 작업들을 한다.

빨리오든, 늦게오든 순서는 상관없다.  

네번째 손님이어도 처리가 빠르면, 빠르게 결과를 받을 수 있다. 

 

 

이러한 Non-blocking I/O 특성을 가지고 있기 때문에 Node.js는 쓸모가 많다.

특히 요즘 SNS, 채팅서비스가 많다. 이런 서비스들의 특징은 서버가 1초에 몇십만개의 요청을 처리할 수있어야한다. ex: 카카오톡..

요청이 매우 많다. 일반 서버의 경우는 요청이 많거나 오래걸리는 요청이 있으면 멈추거나 대기시간이 발생한다.

 

반면, Node.js 서버인 경우에는 요청이 많거나 오래걸리는 요청이 있어도 멈추거나 요청 대기시간이 없다.

 

물론 일반서버로 할 수도있다. 서버 스케일링(서버의 인스턴스를 늘리는것) 또는 멀티쓰레딩. ex: 영화예매 접수창구를 늘림

 

 

# 정리

Node.js 

- Non-blocking 덕분에 채팅/SNS에 자주 사용된다.

- 코드가 매우 짧고 쉬움(두,세줄만 적으면 서버 완성됨) → 빠른 개발 가능

- Node.js는 웹서비스 만들 때만 많이 쓴다. 웹서비스가 아닌 경우는 좀...

(이미지 처리 서버가 필요하면?) Node.js는 안좋을 수 있다. 왜냐하면 이미지처리 라이브러리가 좋은게 없다. 파이썬이 낫다..

 

 

*출처 : 코딩애플

https://www.youtube.com/watch?v=pTm5E3jcOeY

https://www.youtube.com/watch?v=k2GWnDb5zoQ

 

 

 

'Node.js' 카테고리의 다른 글

package.json에 있는 "dependencies"의 역할 및 npm install(ft. 모듈이란?)  (0) 2021.11.20
Statesairline-Server  (0) 2021.09.27
mininode-server with Express  (0) 2021.09.24
mini-node server  (0) 2021.09.23
fs.readFile 메소드  (0) 2021.09.21