2017년 10월 20일 금요일

Chapter1. NodeJS의 개요


학습 목표

1. Node.js의 특징을 이해할 수 있습니다.
2. Node.js 프로그래밍 방법을 이해할 수 있습니다.
3. Node.js개발 환경을 준비할 수 있습니다.
4. API 문서를 보고 코드 작성을 할 수 있습니다.

1. Node.js 소개

◎ Node.js

  • 2009년 Ryan Dahl
  • 자바 스크립트 언어
  • 크롬 V8 엔진
◎ Node.js의 특징
  • 싱클 쓰레드
  • 비동기 I/O
  • 이벤트 기반(event driven)
네트워크 애플리케이션에 적당
- 인터넷 서비스하는 서버
- 디스크, 데이터베이스기반 I/O 
기존 멀티스레드 : 스레드 다루기 어려움, 스레드 개수가 많아질수록 성능↓, 동기식 I/O 기반
싱글 스레드 기반 : 서버작성하는 코드 다루기 쉬움, 비동기 I/O, 성능 향
atom.io : 데스크탑 에디터의 기반

◎ 비동기 I/O
▷ 시간이 걸리는 I/O
  • 하드 디스크 접근
  • 데이터베이스 서버
  • 네트워크를 이용해서 다른 서비스 접근
▷ I/O 동작이 끝날 때까지 대기 : 동기식
▷ I/O 동작이 끝날 때가지 대기하지 않음 : 비동기식

◎ 비동기 I/O의 장점
아파치 vs Nginx
서능 및 메모리 사용 측면에서 유리

◎ Node.js의 장점
  • 싱글 쓰레드로 작성
  • 비동기 I/O
  • 간단한 구조의 경량 프레임워크와 풍부한 라이브러리
  • 서버와 클라이언트에서 사용하는 언어가 같다.(JavaScript)
◎ Node.js 권장 분야
  • 실시간 소셜 네트워크 서비스
  • 데이터 중심의 서비스
  • IoT 기기 연동
◎ 아키텍처
▷ 상위레벨 - JavaScript
▷ 로우레벨 - C
  • 바인딩
  • V8 엔진
  • libev : Event
  • libeio : I/O
◎ Node.js 홈페이지(nodejs.org)

◎ Node.js 재단
▷ Node.js 재단
  • Node.js 플랫폼과 관련된 모듈 개발 지원하는 협업 오픈 소스 프로젝트
  • open governance model
  • 기술 결정 위원회(Technical Steering Committee)
▷ 주요 멤버
  • IBM, intel, Joyent, Microsoft, PayPal, redhat
◎ 버전 구성과 지원
  • Node.js 버전을 두 단계로 진행
  • 기존 : 짝수버전(Stable), 홀수버전(Unstable)
  • 4.x 이후:Stable, LTS
  • LTS : 짝수 버전 Stable 6개월 이후 LTS로 전환
    LTS(Long Term Support)
    LTS : 호환성이 깨지는 변경 없음.
    LTS 18개월. 그후 Maintain 상태(12개월)
    매년 새로운 메이저 버전의 LTS 시작
  • 현재 4.2가 LTS 상태(2016. 9. 28)
    현재 4.2가 LTS 상태(v4.2.0->v4.2.3)

2. 프로그래밍 모델

◎ 프로그래밍 모델
  • 동기(Synchronous)
    A실행 - A결과 - B실행 - B결과
    실행이 끝나고 다음 실행
  • 비동기(Asynchronous)
    A실행 - B실행 - (B결과) - (A결과)
    실행 결과가 끝날 때까지 기다리지 않는다.
◎ 동기식
▷ 파일 읽기
var fs = require('fs');                             // 1
var content = fs.readFileSync("read.txt", "utf8");  // 2
console.log(content);                               // 3
console.log('Reading file...');                     // 4

◎ 비동기식
▷ 파일 읽기
순차적으로 실행되지 않음.

var fs = require('fs');                                      // 1
fs.readFile("readme.txt", "utf8", function(err, content) {   // 2
    console.log(content);                                    // 4
});
console.log('Reading file...');                              // 3

◎ 동기/비동기 방식의 코드 차이점
▷ 동기식 함수 구현과 사용
동기식 함수 구현
function add(i, j) {
    return i + j;
}

동기식 함수 사용
var result = add(1,2);
console.log('Result: ', reslt);

▷ 비동기식 함수 구현과 사용
비동기식 함수 구현
function add(i, j, callback) {
    var result = i + j;
    callback(result);
}

비동기식 함수 사용
add(1, 2, function(result) {
    console.log('Result:', result);
});

◎ 비동기 방식의 API로 파일 읽는 코드 예
▷ 콜백을 이용한 파일 읽기
fs.readFile('textfile.txt', 'utf8', function(err, text) {
    console.log('Read File Async', text);

◎ 콜백 함수 형태
▷ 비동기 함수의 에러 처리
콜백 함수의 파라미터로
▷ 대부분 비동기 API
callbackFunc(arg1, arg2, function(error, result) {
    if(error) {
        // 에러 처리
        return;
    }
    // 정상 처리
}

3. Node.js 개발환경

◎ 다운로드
▷  홈페이지(nodejs.org)
▷ 플랫폼에 맞는 설치 파일 다운로드
▷ 설치
◎ 설치
▷ 설치 완료
▷ 환경 설정
▷ 자동으로 환경 설정 안되면 수동 설정

  • node 설치 폴더 위치 설정

▷ 콘솔에서 node 명령 실행
▷ node -v

  • v : 버전 확인 옵션
▷ node 콘솔 명령
▷ node [SOURCE.JS][ARGS]
  • v : 버전
  • e, p : 스크립트 평가
  • c : 실행하지 않고 문법 체크
  • r : 모듈을 미리 로딩
◎ REPL
▷ 콘솔 기반의 실행 환경
◎ 개발도구
▷ IDE : Eclipse, WebStorm
▷ Editor : Visual Studio Code, Sublime, ...
◎ 편집기
▷ 비주얼 스튜디오 코드(무료!)
  • http://code.visualstudio.com
  • 설치
▷ 개발툴 환경 설정
  • 사이트에서 Node 설정 보기
  • 콘솔에서 code

4. Hello World

◎ 코드 작성 : helloWorld.js
▷ console.log('Hello World!');
◎ 실행
▷ node helloWorld.js
◎ 서버 코드
▷ helloWorld2.js

var http = require('http');
http.createServer(function(request, response) {
    response.writeHead(200, {'Content-Type':'text/html'});
    response.end('Hello World!');
}).listen(3000);

▷ 웹브라우저로 확인
127.0.0.1:3000

5. 도큐먼트

◎ 모듈

  • Node.js 간단한 구조
  • 필요한 모듈을 로딩
  • 모듈 : 다른 언어의 라이브러리에 해당
◎ 도큐먼트 보기
  • Node.js 사이트
  • DOCS
  • API
◎ API 문서
◎ API 문서 보기
▷ API 안정도
▷ Stability
  • 0 : Deprecated
  • 1 : Experimental
  • 2 : Stable
  • 3 : Locked
◎ 모듈 사용하기
▷ 모듈 문서 보는 법을 알아보자!
▷ 모듈 Readline
  • 클래스 : Interface
  • 메소드
  • 이벤트
  • 모듈 함수
◎ 모듈 로딩
▷ 모듈 로딩
  • require('모듈 이름')
  • 절대 경로 혹은 상대 경로
    var readline = require('readline');
▷ 모듈 종류
  • 기본 모듈 : 미리 컴파일된 상태로 라이브러리 디렉토리 - 설치 불 필요
  • 확장 모듈 : npm으로 별도 설치
◎ 모듈 로딩 위치
▷ 기본 모듈 로딩 위치
  • Node.js 라이브러리 디렉토리
▷ 확장 모듈
  • 같은 폴더
  • node_modules 이름의 폴더(npm)
  • 상위 폴더의 node_modules(npm)
◎ 모듈 로딩 - 객체 생성
▷ 클래스
  • 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);
});

▷ 리스너 함수의 파라미터

  • API 문서 참조
◎ 모듈 함수
▷ 객체 생성 없이 모듈에 직접 사용
var readline = require('readline');
readline.cursorTo(process.stdout, 60, 30);


  • readline.cursorTo(stream, x, y);
  • readline.moveCursor(stread, dx, dy);
  • readline.clearLine(stream, dir);
  • readline.clearScreenDown(stream);

학습정리

◎ 지금가지 'Node.JS의 개요'에 대해 살펴보았습니다.
  • Node.js란
    비동기 방식으로 자바 스크립트 언어를 이용해서 네트워크 애플리케이션 플랫폼 제작에 적합한 프레임워크
  • Node.js의 프로그래밍 모델
    비동기 방식으로 작성하고 콜백을 이용하는 방식으로 코드를 작성합니다.
  • Node.js 환경
    Node.js를 다운로드해서 설치하고 개발 환경을 준비했습니다.
  • Hello World
    Node.js 애플리케이션을 작성하고 실행해봤습니다.
  • 도큐먼트 보기
    API 문서를 보고 모듈을 로딩하고 객체를 생성해봤습니다.
    그리고 함수 실행하는 방법을 알아봤습니다.

댓글 없음: