코규리
article thumbnail

 

 

⚑ Node의 기본적인 특징


기본특징

  • 비동기 방식을 이용하는 이벤트 기반 입출력 모델(Event Driven, Non-blocking I/O model)
  • 가볍다, 효율적이다
    • 많은 데이터를 주고받는 실시간 프로그램에서 큰 효과가 발휘된다
  • Chrome과 사용하는 것이 궁합에 맞다
    • 기존의 인터프리터(코드 한 줄씩 해석)방식에선 속도 저하가 발생하였었음
    • 크롬의 *V8엔진은 JS코드를 native코드로 변환하여 실행하여 속도가 향상됨
  • server동작을 주로 함 (socket, HTTP프로토콜을 통한 데이터 송수신 기능을 포함함)

*V8엔진

  • 필요한 기능을 병렬로 실행하는 ‘thread pool’ & 이벤트를 받아 처리하는 ‘event loof’ 존재
  • 네트워킹 기능을 담당하는 Socket, http 라이브러리 존재
  • 표준 라이브러리 구현
  • 위의 서술한 라이브러리를 사용하고 싶다면 JS기반 프로그램을 만들면 됨

 

⚑  동기와 비동기


비동기(nonBlocking)

  • 작업 동시 처리
file.read("a.text", fuction (contents) {
	doShow(contents);
});
// file.read()가 실행된 직후, doAdd()도 같이 실행
var result = doAdd(10, 10); 
  • file.read() 함수 실행시 파라미터로 파일 하나와 함수를 보냄
    • a.text 파일 : 이 파일을 읽어라
    • function(contents): 읽기 작업이 끝나면 이 함수를 실행하라 *callback()
  • doAdd()는 읽기작업이 끝나기 전에도 호출되어 계산작업이 진행됨
  • 즉, 읽는 중 → (계산 중 →) 읽는게 다 끝났으면 보여줌

동기(Blocking)

  • 작업 순차 처리
var contents = file.read("a.txt");

// contents 변수에 a.txt가 다 읽어와질 때까지 대기

doShow(contents);

// contents변수작업이 다 끝난다면 doAdd함수를 통해 result의 덧셈계산이 작동
var result = doAdd(10, 10);
  • 읽기 → 보여주기 → 계산하기
  • 순서대로 진행

Callback

  • 네 일이 다 끝나면 날 불러줘.
  • callback함수의 등장 배경: javaScript는 변수에 함수를 할당 가능
    • 변수에 할당된 함수a를 다른 함수의 parameter로 전달
    • 전달된 함수a를 다른 함수의 내부에서 호출

 

⚑  Node의 http를 통합 웹 서버 요청/응답


http.request(options, function(res) {
	res.on('data', function(chunk) {
		console.log("body;" + chunk);
	});
});
  • http 객체
    • HTTP프로토콜로 웹 서버에 데이터를 요청할 수 있는 기능을 가짐
  • request() 함수
    • 웹 서버에 데이터 요청 가능, 응답을 받으면 콜백 함수가 자동으로 호출됨
    • 응답을 받으면 callback 함수가 자동으로 호출됨
    • 응답을 처리할 수 있는 콜백함수가 res라는 이름의 객체를 전달받음
      • res는 수신한 데이터를 이벤트 이름으로 구별함
      • data이벤트 존재시, 해당 이벤트 이름으로 콜백 함수 등록 ⇒ 콜백함수에 data이벤트로 응답 데이터 가 전달됨
  • res.on()
    • on()메소드를 통해 이벤트를 콜백함수와 바인딩함
    • 응답 객체인 res 객체의 on()메소드를 사용해 data 이벤트와 콜백 함수를 바인딩하면 data란 이름의 이벤트를 받았을 때 등록한 콜백 함수가 실행됨
    • 예제에선 이벤트 이름이 data, 응답으로 받은 데이터는 chunk변수에 존재