# 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 |