학교에서 웹개발실무 수업들으면서 정리한 내용이다.
Node.js 특징
•
자바스크립트 언어로 개발 되었다. 단일 언어로 서버와 클라이언트 모두 구현
•
크롬 V8 엔진채택(자바스크립트 해석과 동작해줌)
•
npm 사용하여 외부 모듈을 자유롭게 사용 가능(npm: 자체적으로 포함된 모듈 시스템)
•
다양한 플랫폼에서 사용가능
•
관계형 데이터베이스, NoSQL 모두 지원
•
기본적으로 싱글 스레드로 동작 (자바스크립트는 동시에 실행될수 없다는 말)
크롬 V8엔진
•
크롬V8 엔진덕에 웹브라우저를 벗어나도 우리가 javascript실행가능
•
이 상황을 javascriptruntime이라고도 부름
Node.js장점
•
I/O 처리 잘 하는 노드를 서버로 사용
•
ex) 네트워크, 데이터베이스, 디스크작업
•
ex) 실시간 채팅 앱, 주식 차트, JSON 데이터 제공하는 API서버, IOT 기기연동
Node.js 단점
•
CPU 부하가 큰 작업에는 부적합
•
ex) 이미지, 비디오 처리, 대규모 데이터 처리로 CPU 많이 사용
장단점 결론
•
개수는 많지만 크기는 작은 데이터를 실시간으로 주고 받는 작업에 적합
•
짧은 시간에 대량의 클라이언트 요청에 대응하는 웹 애플리 케이션에 적합
싱글 스레드, 논블록킹
점원은 스레드 고객은 클라이언트(일시키는 사람)
점원은 고객의 주문을 받고 고객의 주문을 서빙하는 역할만 한다.
서빙만 한다는것은 음식이
비동기식 I/O
//비동기 코드 예시
function longRunningTask() {
// 오래 걸리는 작업
console.log('작업 끝');
}
console.log('시작');
setTimeout(longRunningTask, 0)
console.log('다음 작업');
// 시작 -> 다음 작업 -> 작업끝 순서 출력
Python
복사
function longRunningTask() {
// 오래 걸리는 작업
console.log('작업 끝');
}
console.log('시작');
longRunningTask();
console.log('다음 작업');
// 시작 -> 작업 끝 -> 다음작업 순서로 출력
Python
복사
위에 비동기 코드는 다른 먼저 처리되는 코드가 있으면 그것이 먼저 처리되고 아래 동기식은 무조건 본인이 먼저 처리되고 그 아래 코드가 실행된다.
Nodejs에서는 이런 비동기식 코드를 지원한다.
동기식: I/O 동작이 끝날 떄까지 대기
비동기식: I/O 동작이 끝날 때까지 대기하지 않는다.
콜백함수도 비동기방식에 쓰인다.
이벤트 루프
•
NodeJS에서 논블록킹이 가능한 이유이다. 위에서 말한 점원이다!
•
이벤트 발생시 호출할 콜백함수 관리하고, 호출된 콜백함수의 실행 순서를 결정
•
단 1개다. 즉 NodeJS는 단일 스레드다.
이벤트 기반 방식(Event-driven)
•
이벤트가 발생할 때 미리 지정해 둔 작업을 수행하는 방식
•
이벤트 리스너에 콜백함수 등록
비동기 방식
메인 스레드가 존재하고 메인 스레드는 실제 코드를 실행
1) 메인 스레드는 실행시간이 오래 걸린다고 판단하면 내부에 처리하는 다른 스레드로 해당 작업을 넘긴다.
2) 메인 스레드에게 작업을 받은 스레드는 해당 작업이 끝나면 콜백함수를 메인 스레드에게 돌려준다.
3) 메인 스레드는 전달 받은 콜백함수를 실행한다.
이 콜백함수를 실행할 때 이미 다른 코드가 처리된 이후이다.
콜백 함수
•
함수에서 매개변수로 또다른 함수를 콜하는 함수
•
CPU 내부에서 작업하는 것과 달리 느린 네트워크와 같은 자원을 다루는 대부분의 함수다.
•
장점:
◦
원래 함수의 실행 종료를 기다릴 필요가 없다.
싱글 스레드 :
•
실제 사용자의 요청을 받는 스레드가 한 개
논 블록킹 방식
•
작업을 처리할때 이벤트루프가 나머지 요청을 막지 않고 계속 요청을 받는 방식
값이 아니라 종료되면 함수를 반환(콜백함수)
routing(라우팅)
•
사용자 요청에 따라 응답결과를 다르게 전달하는 것
package.json
•
Node.js 패키지/프로젝트 정보를 가지고 있는 설정 파일