Programming/FULL STACK

[Node.js/Server] NodeJS의 개요

RosyPark 2020. 10. 10. 16:26

1. Node JS의 소개

- 2009년 Ryan Dahl 처음 소개한 프로젝트

- 자바 스크립트 언어를 응용 프로그램에서도 사용할 수 있도록 만들어내는 프레임워크

- 자바 스크립트를 사용해서 서버용 어플리케이션을 만들 수 있음 

 

* 특징

- 싱글 쓰레드를 기반으로 비동기 I/O 사용

- 이벤트 기반으로 동작하게 됨

- 네트워크 애플리케이션에 적합(디스크, 데이터 베이스와 같은 I/O를 처리해야 하는 일이 많음)

- 멀티 쓰레드를 서버를 다루기에는 어려움, 그에 비해서 싱글 쓰레드로 작성하게 되면 서버 만들기에 굉장히 쉬움

- 비동기 I/O를 이용하여 코드작성도 쉽고 , 동기식 I/O가 가지는 기다림이 없는 서버를 만들 수 있음 

 

* 비동기 I/O란?

- 시간이 걸리는  I/O? 하드디스크 접근, 데이터베이스 서버, 네트워크를 이용해서 다른 서비스 접근

-  I/O 동작이 끝날때까지 대기 :  동기식,  I/O동작이 끝날때까지 대기하지 않는것 :비동기식 

 

* 장점

- 싱글 쓰레드로 작성

- 비동기  I/O

- 간단한 구조의 경량 프레임워크와 풍부한 라이브러리

- 서버와 클라이언트에서 사용하는 언어 동일 

- 실시간 소셜 서비스, 데이터 중심 서비스에서 많이 사용 , IOT 분야에서도 많이 사용

 

* 아키텍쳐

- 상위레벨 - Javascript

- 로우레벨 - C / 바인딩, v8 엔진, libev : Event, libeio : I/O 엔진 

 

* Node.js 재단

- Node.js 플랫폼과 관련된 모듈 개발 지원하는 협업 오픈 소스 프로젝트

- 주요 멤버 : 레드헷, 마이크로 소프트 등등 ... 

 

 

* 버전 구성

- LTS(Long Term Support) -> 짝수 버전 Stable 6개월 이후 LTS로 전환 

- 호환성이 깨지는 변경 없음 

 

* 프로그래밍 모델

- 동기(Synchronous) -> 실행이 끝나고 다음 실행 

- 비동기(Asynchronous) -> 실행결과가 끝날때까지 기다리지 않음

 

ex) 동기식 파일 읽기 - 순차적으로 실행 

1. var fs = require('fs');

2. var content = fs.readFileSync("readme.txt", "utf8");

3. console.log(content);

4. console.log("Reading file ... ") ; 

 

ex) 비동기식 파일 읽기

1. var fs = require('fs');

2. fs.readFile("readme.txt", "utf8", function(err, content) {

   3. console.log(content); 

});  -> 안에있는 callback함수가 나중에 실행

4. console.log('Reading file.."); 

 

* 콜백 함수 형태 

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

cf) 콜백함수란? 다른 코드의 인수로서 넘겨주는 실행 가능한 코드

* 대부분 비동기 API 

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

    if(error){

     // 에러처리 

    return;

   }

   //정상처리

  } 

 

 

2. Node js 설치 

>> node -v 

 

* node js 콘솔 명령어

>> node --help

 - v : 버전

 - e, p : 스크립트 평가

 - c : 실행하지 않고 문법 체크

 - r : 모듈을 미리 로딩 

Options:

  -v, --version              print Node.js version

  -e, --eval script          evaluate script

  -p, --print                evaluate script and print result

  -c, --check                syntax check script without executing

  -i, --interactive          always enter the REPL even if stdin

                             does not appear to be a terminal

  -r, --require              module to preload (option can be repeated)

  -                          script read from stdin (default; interactive mode if a tty)

 

* REPL 환경

- 한줄자리 코드 실행할때

- >> node  

 

 

 

3. Example 

(1)  Hello World 작성

// helloworld.js 
console.log("Hello World");

 

실행 -> node helloWorld.js (js) 생략가능

 

(2) 간단한 서버 설치 

// helloworld2.js 
var http = require('http');

http.createServer(function(request,response){

    response.writeHead(200, {'Content-Type' : 'text/html'});

    response.end('<h1> Hello World! </h1>');

}).listen(3000);

 

실행 -> node helloworld2.js / 127.0.0.1:3000

 

 

 

4. 모듈

- Node.js 간단한 구조

- 필요한 모듈을 로딩

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

 

* 도큐먼트 보기 -> stability를 보고 deprecated된건 사용되지 않음 

- Node.js 사이트 

- DOCS - nodejs.org/api/

- API 

 

* 모듈 사용하기

- 모듈 Readlie 1) 클래스 2) 메소드 3) 이벤트 4) 모듈 함수

 

* 모듈 로딩

- require("모듈 이름")

- 절대경로 혹은 상대 경로 , var readline = require('readline');

 

* 모듈 종류

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

   위치 : Node.js 라이브러리 디렉토리 

- 확장모듈 : npm으로 별도설치필요 

   위치 : 같은 폴더 or node_modules 이름 폴더 or 상위 폴더의 node_modules 

 

 

 

 

 

 

 

 

<출처>

1. www.youtube.com/watch?v=truL1LwV3_I&t=1262s

2.