IT/NodeJS

Node.js

KeepGooing 2019. 12. 4. 00:12
반응형

>NodeJS의 특징

1. 싱글 쓰레드

2. 비동기I/O

3. 이벤트기반(evenet driven)

 

--> 네트워크 애플리케이션에 적당함

 

 

 

>비동기 I/O

 

시간이 걸리는 I/O

-하드 디스크 접근

-데이터베이스 서버

-네트워크를 이용해서 다른 서비스 접근

----------------------------------------

I/O 동작이 끝날 때까지 대기 : 동기식

I/O 동작이 끝날 때까지 대기하지 않음 : 비동기식 

 

 

비동기 I/O의 장점

 

아파치(멀티 쓰레드로 동작(동기식) ) VS Nginx(비동기 기반으로 동작)

 

performance 

사용자 많아질 수 록 성능이 Nginx보다 아파치 더 가파르게 떨어짐

 

 

 

 

Memory usage

사용자 많아질 수 록 메모리 사용량은 Nginx보다 아파치가 더 압도적으로 높아짐 (Nginx 낮은 수준으로 일정하게 유지)

 

 

 

 

 

출처: https://dvlp.tistory.com/10

 

Apache VS Nginx 서버 비교

웹서버로 Apache를 많이 사용하실겁니다. 범용적이고, 그래서 설정 관리등도 참조할수 있는곳이 많아서 대체적으로 쉽게 웹서버를 구축할 수 있기 때문입니다. 여기 또 다른 웹서버인 nginx와 Apache를 비교한 페..

dvlp.tistory.com

 

 

 

>Node.js의 장점

 

  • 싱글 쓰레드로 작성
  • 비동기 I/O
  • 간단한 구조의 경량 프레임워크와 풍부한 라이브러리
  • 서버와 클라이언트에서 사용하는 언어가 같다.

>Node.js 권장 분야

 

  • 실시간 소셜 네트워크 서비스
  • 데이터중심의 서비스
  • IoT 기기 연동

>아키텍처

  • 상위 레벨 - 자바스크립트
  • 로우 레벨 - C언어
  • 바인딩
  • v8엔진
  • libev : Event (event loop)
  • libeio : I/O (Thread pool : 싱글 쓰레드 이지만 내부적으로는 멀티 쓰레드로 작동)

 

Node.js홈페이지

https://nodejs.org/ko/

 

Node.js

Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine.

nodejs.org

 

>Node.js 역사

 

>Node.js 재단

 

>Node.js 버전

짝수 버전(stable LTS)

 

 

 

>프로그래밍 모델

 

동기 :

실행이 끝나고 다음 실행

순차적

ex1)

 

function add(i,j){

return i+j

}

 

var result = add(1,2);

console.log('Result', result);

 

 

비동기 :

실행 결과가 끝날 떄까지 기다리지 않는다.

비순차적

ex)

 

function add(i, j, callback) {

 var result = i+j;

 callback result;

}

 

add(1,2,function(result){

 console.log('Result', result);

}

 

ex2)

콜백을 이용한 파일 읽기

 

fs.readFile('textfile.txt', 'utf8', fuction(err,text) {

 console.log('Read File Async', text);

});

ex3)

콜백 함수 형태

 

>비동기 함수의 에러 처리 : 콜백 함수의 파라미터로

 

>대부분 비동기 API

callbackFunc(arg1, arg2, function (error, result) {

 if( error ) {

     //에러 처리

     return;

   }

     //정상 처리

}

 

 

*참고

async와 await를 활용하여 동기식으로 활용할 수 있다.

 

---------------------------------------------------

 

return 값을 활용해서 하느냐 (동기식)

callback 활용해서 하느냐(비동기식)

 

 

----------------------------------------------------------------

 

 

>Node.js 개발 환경

 

>HelloWorld 출력

 

>도큐먼트

 

- 모듈

Node.js 간단한구조

필요한 모듈을 로딩

모듈 : 다른 언어의 라이브러리에 해당

 

-도큐먼트 보기

1 .Node.js 사이트에서 

2 .DOCS

3. API

 

-API 문서 보기

API 안정도

Stability

 

0: Deprecated

1: Experimented

2: Stable

3: Locked

 

 

 

-모듈 사용하기

모듈 문서 보는 법을 알아보자!

모듈 Readline

  • 클래스 interface
  • 메소드
  • 이벤트
  • 모듈 함수

-모듈 로딩

 

>모듈 로딩

require('모듈 이름')

절대 경로 혹은 상대 경로

var readline = require('readline');

 

>모듈 종류

기본 모듈 : 미리 컴파일된 상태로 라이브러리 디렉토리 - 설치 불 필요

확장 모듈: npm 별도 설치

 

 

-모듈 로딩 위치

>기본 모듈 로딩 위치

Node.js 라이브러리 디렉토리

 

 

-확장 모듈

같은 폴더에 있거나

node_modules 이름의 폴더에 있거나

상위 폴더의 node_modules에 있으면 활용할 수 있따.

 

 

모듈 로딩 - 객체 생성

>클래스

interface

 

모듈 로딩과 객체 생성

 

var readline = require('readline');

var rl = readline.createInterface();

 

 

>객체 생성 함수 옵션

 

var rl = readline.createInterface({

 input: process.stdin

 output: process.stdout

})

 

 

 

-메소드 사용

>모듈 로딩, 객체 생성 후 메소드 사용

 

 var readline = require('readline');

 var rl = readline.createInterface();

 rl.setPrompt('>>');

 

 

-이벤트

 

>이벤트 - 이벤트 핸들러

> .on([이벤트 이름], [리스너 함수])

 rl.on('line', function (cmd) {

 console.log('You just typed: ' + cmd);

});

 

-모듈함수

>객체 생성없이 모듈에 직접 사용

 

 var readline = require('readline');

 readline.cursorTo(process.stdout,60,30);

 

 

 

 

 

학습 정리

 

Node.js란

비동기 방식으로 자바 스크립트 언어를 이용해서 네트워크 애플리케이션 플랫폼 제작에 적합한 프레임워크

 

Node.js의 프로그래밍 모델

비동기 방식으로 작성하고, 콜백을 이용하는 방식으로 코드를 작성한다.

 

Node.js 환경

Node.js를 다운로드해서 설치하고 개발환경을 준비

 

Hello World

Node.js 애플리케이션을 작성하고 실행

 

도큐먼트 보기

API 문서를 보고 모듈을 로딩하고 객체 생성 그리고 함수 실행하는 방법 알아봄

 

 

출처: T아카데미 Node.js 프로그래밍 강의 

 

 

 

 

 

 

 

반응형