>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
>Node.js의 장점
- 싱글 쓰레드로 작성
- 비동기 I/O
- 간단한 구조의 경량 프레임워크와 풍부한 라이브러리
- 서버와 클라이언트에서 사용하는 언어가 같다.
>Node.js 권장 분야
- 실시간 소셜 네트워크 서비스
- 데이터중심의 서비스
- IoT 기기 연동
>아키텍처
- 상위 레벨 - 자바스크립트
- 로우 레벨 - C언어
- 바인딩
- v8엔진
- libev : Event (event loop)
- libeio : I/O (Thread pool : 싱글 쓰레드 이지만 내부적으로는 멀티 쓰레드로 작동)
Node.js홈페이지
>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 프로그래밍 강의
'IT > NodeJS' 카테고리의 다른 글
Node.js에서 비동기 함수 최적화 방법 (0) | 2024.11.21 |
---|---|
Node.js의 비동기 작업 처리 패턴 (0) | 2024.11.21 |
requires elevated privileges 관련 에러 (0) | 2021.01.10 |
js.html 확장자가 겹치는 경우 - stockAdmin[project] (0) | 2021.01.09 |
Node.js 교과서 목차 (0) | 2020.07.11 |