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
비동기 I/O의 장점
- 성능 및 메모리 사용 측면에서 유리하다
Node.js의 장점
- 싱글 쓰레드로 작성
- 비동기 I/O 사용
- 간단한 구조의 경량 프레임워크와 풍부한 라이브러리
- 서버와 클라이언트에서 사용하는 언어가 같다.
Node.js 권장 분야
- 실시간 소셜 네트워크 서빗
- 데이터 중심의 서비스
- IoT 기기 연동
Node.js 아키텍처
- 상위레벨 - JavaScript
- 하위레벨 - C (바인딩, V8 엔진)
프로그래밍 모델
- 동기식 함수 구현
1 | function add(i,j){ |
- 동기식 함수 사용
1 | var result = add(1,2); |
- 비동기식 함수 구현
1 | function add(i,j,callback){ |
- 비동기식 함수 사용
1 | add(1,2, function(result){ |
Hello World
- helloWorld.js
1 | console.log("Hello World!"); |
- node helloWorld 실행
- helloWorld2.js
1 | var http = require('http'); |
- 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 | var readline = require('readline'); |
- 객체 생성 함수 옵션
1 | var rl = readline.createInterface({ |
- 이벤트 (.on([이벤트 이름], [리스너 함수]))
1 | rl.on('line', function(cmd){ |