기타내용

[Server] Node.js

k9e4h 2016. 5. 2. 15:08

닉네임 실시간 중복확인 기능을 구현하기 위하여 NodeJS를 사용해야 할 일이 생겼다.

NodeJS 나 Tomcat 에 Ajax를 통하여 요청!!


실시간 통신 기술 : TCP socket, WebSocket

package.json







Nodejs.org





NodeJS란!

Apache와 같은 웹서버 들은 요청마다 쓰레드를 생성하는 쓰레드 기반 

따라서, realtime application 처럼 long-lived connection을 사용하는 app에서는 적합 x, 확장 어려움 

이러한 쓰레드 기반의 문제를 해결하기 위해 Event Loop 이용







1) 확장성 있는 네트워크 애플리케이션( 특히 서버 사이드)에 사용되는 소프트웨어 플랫폼 / javascript로 작성

=> eclipse와 java의 관계? (Node.js와 js의 관계?)

2)  웹서버와 같이 확장성 있는 네트워크 프로그램 제작을 위해 고안

3)  V8 (javascript 엔진)  위에서 동작하는 이벤트 처리 I/O framework 

4) javascript가 웹 브라우저에서 실행되는 것과는 달리 서버에서 실행

5) 파일 업로드 프로그래스바를 보았을 때, 파일이 얼마나 업로드 되었는지 알기 위해서 서버에 쿼리를 날려야 한다는 점을 보고 고안





* Event Loop : 동작을 요청한 뒤에 콜백을 지정하여 동작이 완료되면 콜백이 실행


* javascript 엔진 : Safari, Chrome,FireFox 등


* javascript는 Event Loop를 사용하도록 디자인 되어 비동기 function과 closure를 지원 

한번에 하나의 콜백만 실행, DOM event callback을 통한 I/O 지원


* V8

- 오픈 소스 JIT 가상 머신 형식의 자바스크립트 엔진

- 크롬&안드로이드 브라우저에 탑재










모던웹을 위한 Node.js 프로그래밍



chapter1 Node.js 개요


1.1 Node.js 배경사

javascript 사용률이 높아지자 웹 브라우저를 벗어나 자바스크립트를 사용하려는 시도가 시작.

대규모 네트워크 어플리케이션을 개발하고자 만들어짐

기존의 웹 서버는 대부분 스레드를 기반으로하는 동기 방식으로 네트워크 입출력 처리

반면 Node.js는 이벤틀르 기반으로 하는 비동기 방식으로 네트워크 입출력 처리


1.2 이벤트 기반 비동기 방식

기존 네트워크 프로그램 : 동기 방식으로 일을 처리하는 대신 스레드를 여러개 만들어 동시에 일처리, 일이 많아질수록 스레드를 더 많이 나누어야 하므로 메모리 사용량이 폭발적으로 증가

이벤트 기반 비동기 방식 : 대기표를 받은다음 대기번호 호출( 이벤트 발생)할 때 이를 처리, 몸뚱이는 하나이므로 단일스레드, 일이 아무리 많아도 스레드는 하나이므로 메모리 사용량과 같은 시스템 리소스 사용량에는 변화가 거의 없다. 따라서 대규모 네트워크 프로그램 개발할때 적함.


1.3 Node.js 장점과 단점

장점 : 

이벤트 기반 비동기 방식을 사용하여 대규모 네트워크 프로그램을 개발하기 적합

javascript를 사용, 구글이 만드는 자바스크립트 엔진 사용(구글이 무너지지 않는 이상 계속 발전 할 것이다.),C++을 사용하여 확장가능

단점 : 

프로그램 진행에 문제가 발생하는 순간(하나의 쓰레드에 문제가 생기면) 프로그램 전체가 영향을 받는다.

javascript 엔진이 아무리 빨라도 C,C++로 개발된 서버보다 느리다. 개발환경에 안정도가 부족


1.4 Node.js를 사용한 어플리케이션

Ebay : 웹 API를 Node.js를 사용하여 배포

linked in : 자사의 모든 서버를 Node.js를 사용하여 구성

yammer : 프록시 서버를 Node.js로 교체하여 동시에 여러 요청 빠르게 처리

cocos 2D : 등등등


chapter2 Node.js 개발 환경 구축

C:\Users\bit\nodejs


2.4 첫번째 Node.js 애플리케이션

Node.js는 확장자가 js인 파일 사용

window 환경에서 cmd 가 아닌 직접 파일 생성



chapter3 Node.js의 전역객체


3.1 전역 변수

웹 브라우저에서 동작하는 자바스크립트의 최상위 객체는 window (java에서 object 같은)

window 객체 : 웹 브라우저 자체와 관련된 속성과 메서드 가짐

but Node.js는 웹브라우저에서 동작하는 것이 아니므로 window 객체 없음 -> 그래서 전역변수와 전역함수를 가짐


3.2 console 객체

Node.js 콘솔 화면과 관련된 기능

%d,%s,%j(json)


3.3 process 객체

프로그램과 관련된 정보를 나타냄

javascript에 존재하지 않는 Node.js 만이 가진 객체

 

3.4 exports 객체와 모듈

Node.js 는 모듈을 사용하여 기능을 확장

모듈 : 기능을 쉽게 사용하고자 메서드와 속성을 미리 정의해 모아 놓은 것

!! 모듈을 생성할때는 exports 객체를 사용하고 모듈을 추출할 때는 require() 함수를 사용한다!!!'

require 안에 string으로 추출할 모듈을 쓰면 node.js 문서에서 찾아옴



chapter4 기본 내장 모듈


Nodee.js 는 다양한 모듈 지원


http://nodejs.org/api


4.1 os 모듈

모듈의 기본적인 사용법 익히기에 적당, 실제 많이 사용 x


4.2 url 모듈

.parse(urlStr,[,parseQueryString=false,slashesDenoteHost=false]) URL 문자열을 URL 객체로 변환하여 리턴


4.3 Query String 모듈

URL 객체의 쿼리와 관련된 모듈


4.4 util 모듈

보조적인 기능을 모아둠


4.5 crypto 모듈

해시 생성과 암호화를 수행


4.5 File System 모듈

중요중요

동기/비동기적인 읽기/쓰기 지원


chapter5 이벤트 중요중요


5.1 이벤트 연결


5.2 이벤트 연결 개수 제한


5.3 이벤트 제거


5.4 이벤트 강제발생


5.5 이벤트 생성

EventEmitter 객체의 상속을 받음




chapter6 http 모듈

http 모듈은 Node.js의 가장 기본적인 웹 모듈 http 웹 서버와 클라이언트를 생성하는 것과 관련된 모든 기능 담당


6.1 요청과 응답


6.2 server 객체

method보다 event가 중요.

EventEmitter 객체를 기반으로 만들어졌으므로 이벤트를 연결할 수 있다.

request, connection,close,checkContinue,upgrade,clientError


6.3 response 객체


6.3.1 file system 모듈을 사용한 HTMl 페이지 제공

javascript file 위에서 모든 html 페이지를 작성하는 것은 불가능

서버에 존재하는 html 페이지를 클라이언트에게 제공


6.4 request 객체

server 객체의 request 이벤트가 발생할때 이벤트 리스너의 첫번째 매개변수에 request 객체가 들어감


6.4.1 url 속성을 사용한 페이지 구분


6.4.2 method 속성을 사용한 페이지 구분

get/post에 따라


6.4.3 Get 요청 매개변수 추출

url 모듈 함께 사용


6.4.4 Post 요청 매개변수 추출

Post 방식은 Get 방식과 달리 데이터를 더 많이 담을 수 있고 보안 측면에서도 좋음

Get: 요청 하면서 데이터를 전달 ( 친구한테 직접 책 선물)

Post : 요청한 후 데이터를 별도로 전달 (친구한테 택배로 냉장고 선물)





chater7 외부모듈


7.1 ejs

ejs 문자열을 HTMl 문자열로 변환

동적 웹 페이지 생성할 때 사용


7.2 jade 모듈

들여쓰기는 탭과 띄어쓰기 중 한가지로만


7.3 서버 실행 모듈

전역 모듈로 javascript file 내에서 require 하는 것이 아니라 바로사용


chapter8 express 모듈


8.1 기본 서버

http 모듈이 함께 필요


8.2 기본 응답 메서드

XMLHttpRequest 객체로 Ajax 요청을 수행할 때에 적절한 처리를 수행할 수 있다.


8.3 기본 요청 메서드


8.4 미들웨어 개요

express 모듈은 request 이벤트 리스너를 연결할 때 use() 를 사용

use(request,response,next) : 여러번 사용가능,  요청의 응답을 완료하기 전까지 요청 중간중간에서 여러가지 일을 처리할 수 있다.

다양한 미들웨어가 존재함


ex) logger 미들웨어

var app = express();

app.use(express.logger());


8.5 logger 미들웨어

웹 요청이 들어왔을때 로그 출력


8.6 static 미들웨어

웹서버에서 손쉽게 파일을 제공


8.7 router 미들웨어

페이지 라우팅을 구현

페이지 라우팅 : 클라이언트 요청에 적절한 페이지를 제공


8.8 cookie parser 미들웨어

요청 쿠키 추출


8.9 body parser 미들웨어 

Post 요청 데이터 추출


8.10 session 미들웨어


8.11 RESTful 웹 서비스 개발


////////////////////////

middleware 













http://javakorean.com/linkedin%EC%97%90%EC%84%9C%EC%9D%98-node-%EB%8D%94-%EC%96%87%EA%B2%8C-%EA%B0%80%EB%B3%8D%EA%B2%8C-%EB%B9%A0%EB%A5%B4%EA%B2%8C/

반응형

'기타내용' 카테고리의 다른 글

Auto Provisioning  (0) 2016.07.13
VM과 VDI의 SBC차이  (0) 2016.07.06
NFC BEACON 수정  (0) 2016.05.11
O2O ( Online to Offline )  (0) 2016.05.10
[Hardware] PC 해체하기  (0) 2016.04.18