노드 시작하기
노드 서버를 만들 일이 생겼습니다. 700페이지짜리 두껍고 무서운 책을 한권 샀습니다. 이름도 무려 Node.js 교과서.
그래도 뷰 공부할때보다는 확실히 덜 막막하고, 서버는 처음 개발해보는거라 약간 설레는 마음이 있습니다.
구입한 책은 Node.js 교과서 - 길벗출판사 .
노드란?
Node.js는 Chrome V8 Javascript엔진으로 빌드된
Javascript 런타임
이다.
서버로서의 노드
- 노드의 가장 큰 특징 : 1) 싱글스레드 2) 논-블로킹 모델
- 노드를 서버로 사용할때의 장단점
- 노드는 IO 처리를 잘한다(논블로킹 방식으로 처리).
- 하지만 노드는 CPU부하가 큰 작업에는 적합하지 않다. >> 작성한 코드 전체가
스레드 하나에서 처리
되기 때문
따라서 노드는
개수는 많지만 크기는 작은 데이터를 실시간으로 주고받는 데에
적합하다.
+) 노드에서 멀티스레드 사용이 불가능한건 아닌듯. 노드12에서 안정화된 워커스레드 기능으로 멀티스레딩 작업 가능하다고 한다.
+) 당연히 그래도 그냥 C++, Ruby, Go에 비해선 느리다.
- 노드에는 웹서버가 내장되어 있다. 따라서 nginx, Apache와 같은 별도 웹서버를 설치할 필요가 없이 그냥 내장 웹서버 사용할 수 있다.
- 물론 나중에 서버 규모가 커지면 nginx같은 별도 웹서버를 노드 서버와 연결해야 한다.
REPL
- 입력한 코드를 읽고, 해석하고, 결과를 반환하고, 종료할때까지 반복한다고 해서 REPL(Read Eval Print Loop) 라고 부른다.
- node의 REPL도 간단하게 터미널에 node 쳐서 실행해볼 수 있다.
- 종료하려면 ctrl+c 두번, 혹은 .exit 입력하면 된다.
모듈화
1 | // var.js |
module.exports로 파일의 객체들을 모듈화 후 export함으로써, var.js 파일은 모듈로서 기능한다.
require
함수로 불러온다.1
2
3
4
5
6// func.js
const { odd, even } = require('./var');
function chkNum(n) => { return n % 2 ? odd : even }
module.exports = chkNum;1
2
3
4
5
6
7
8// index.js
const { odd, even } = require('./var');
const chkNum = require('./func');
function chkStrNum(s) => { return s.length % 2 ? odd : even }
console.log(chkNum(10)); // even num 출력
console.log(chkStrNum('hello')); // odd num 출력
노드 내장객체
노드는 내장객체로 window와 document가 없다!
- global
- console
- 타이머
- module, exports, require
- process
노드 내장모듈
- os : 운영체제 정보를 가져온다
- path : 폴더와 파일 경로를 조작한다
url
: 인터넷 주소를 조작한다querystring
: url의 쿼리부분을 사용하기 쉽게 객체로 만드는 모듈crypto
: 다양한 방식의 암호화를 도와주는 모듈util
: 다양한 편의 기능을 모아둔 모듈fs
: 파일시스템에 접근하는 모듈