Node.js의 개요

Node.js 소개

  • Node.js

    • 2009년 Ryan Dahi이 처음 발표한 프로젝트
    • 자바 스크립트 언어
    • 크롭 V8 엔진
  • Node.js의 특징

    • 싱글 쓰레드 기반
    • 비동기 I/O 사용
    • 이벤트 기반 (event driven)
    • 네트워크 애플리케이션에 적합
  • 비동기 I/O

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

    • 성능 및 메모리 사용 측면에서 유리하다
  • Node.js의 장점

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

    • 실시간 소셜 네트워크 서빗
    • 데이터 중심의 서비스
    • IoT 기기 연동
  • Node.js 아키텍처

    • 상위레벨 - JavaScript
    • 하위레벨 - C (바인딩, V8 엔진)

프로그래밍 모델

  • 동기식 함수 구현
1
2
3
function add(i,j){
return i+j;
}
  • 동기식 함수 사용
1
2
var result = add(1,2);
console.log('Result:', result);
  • 비동기식 함수 구현
1
2
3
4
function add(i,j,callback){
var result = i+j;
callback(result);
}
  • 비동기식 함수 사용
1
2
3
add(1,2, function(result){
console.log('Result:', result);
});

Hello World

  • helloWorld.js
1
console.log("Hello World!");
- node helloWorld 실행
  • helloWorld2.js
1
2
3
4
5
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 실행
- 127.0.0.1:3000 으로 확인

도큐먼트

  • 모듈

    • Node.js 간단한 구조
    • 필요한 모듈을 로딩
    • 모듈 : 다른 언어의 라이브러리에 해당
  • API 확인

    • Node.js 사이트 -> DOCS -> API
  • API 안정도 (Stability)

    • 0 : Deprecated
    • 1 : Experimental
    • 2 : Stable
    • 3 : Locked
  • 모듈 로딩

    • require(‘모듈 이름’)
    • 절대 경로 혹은 상대 경로
1
var readline = require('readline');
  • 모듈 종류

    • 기본 모듈 : 미리 컴파일된 상태로 라이브러리 디렉토리 (설치 불 필요)
    • 확장 모듈 : npm로 별도 설치
  • 모듈 로딩 - 객체 생성

    • 클래스 : Interface
1
2
var readline = require('readline');
var rl = readline.createInterface();
  • 객체 생성 함수 옵션
1
2
3
4
var rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
  • 이벤트 (.on([이벤트 이름], [리스너 함수]))
1
2
3
rl.on('line', function(cmd){
console.log('You just typed: '+ cmd);
});