(수근수근)
[NodeJS] Nodejs 기초 본문
해당 내용은 인프런의 테스트주도개발(TDD)로 만드는 NodeJS API 서버를 정리한 내용입니다.
기존의 JS는 브라우저에서 동작하는 언어이다.
Node.js 기초
- 브라우저 밖에서 자바스크립트 코드를 진행할 수 있다.
- 크롬에서 사용하는 V8엔진을 사용한다
- 이벤트 기반의 비동기 I/O 프레임워크
- CommonJS를 구현한 모듈 시스템
[NodeJS 특징] 이벤트 기반의 비동기 I/O 프레임워크
- 클라이언트에서 어플리케이션으로 요청을 보낸다
- 노드js는 클라이언트의 요청을 이벤트 큐에 차곡차곡 쌓아 넣는다
- 이벤트 루프는 이벤트큐에있는 것을 하나하나 뽑아서 실행합니다
- 이벤트 루프는 하나의 싱글쓰레드 입니다.(싱글쓰레드가 job을 처리하고 결과를 응답해줍니다)
- 따라서 노드JS는 싱글쓰레드라고 보통은 말합니다.
- 하지만 디스크에 있는 파일이나 외부 네트워크 처리는 큰 작업의 단위이기 때문에 이벤트루프가 직접 실행하지 않고 다른 쓰레드에 일을 위임합니다.
- 해당 쓰레드는 작업 단위가 큰 일을 처리하고 완료되면 결과를 다시 이벤트 큐에 이벤트 형태로 전달합니다.
- 그럼 이벤트 루프는 차곡차곡 작업을 처리하다가, 이벤트처리가 완료되면 클라이언트에게 결과를 전달해줍니다.
따라서 Nodejs는 클라이언트의 모든요청을 이벤트로 처리하고, 큰 작업량이 드는것은 워커쓰레드에 전달하여 비동기로 처리하는 것 자바스크립트의 엔진 구조이기 때문에 Node.js를 이벤트 기반의 비동기 I/O 프레임워크라고 부릅니다.
[NodeJS 특징] 모듈시스템
- 브라우저에서는 윈도우전역객체를 사용하거나, RequireJS같은 의존성 로더를 사용함
window.module1 = function() {return 'module1'}
//위처럼 모듈을 추가한다
- 노드는 파일 형태로 모듈을 관리할 수 있는 CommonJS로 구현
- 기본모듈 (CommonJS에서 제공하는 모듈들)
const http = require('http') //http모듈을 가지고 옴 //이후 여러가지 http의 함수를 사용이 가능하다
- 써드파티모듈
- 사용자 정의 모듈
//모듈파일 불러와 사용하기 const math = require('./math.js') const result = math.sum(1, 1); console.log(result); //2
//모듈 파일 math.js function sum(a,b) { return a+b } module.exports = { sum : sum //객체할당 };
[NodeJS 특징] 비동기 세상
- readFileSync(파일경로, option)
- readFileSync - 동기적으로 파일을 읽음
//동기적인 코드 작성
const fs = require('fs');
const data = fs.readFileSync('./data.txt', 'utf-8');
console.log(data);
- readFile(파일경로, 콜백함수)
- readFile - 비동기적으로 파일을 읽음
- node에서는 비동기 코드를 많이 쓴다.
- 콜백함수 스타일을 많이 사용한다.
const fs = require('fs');
console.log('before');
const data = fs.readFile('./data.txt', 'utf-8', function(err, data){
console.log(data);
});
console.log('after');
→ 결과
'type & Javascript' 카테고리의 다른 글
[ NodeJS ] Express 기초 (0) | 2021.10.03 |
---|---|
[NodeJS] Hello Node (0) | 2021.10.03 |
[JS] JSON데이터 CSV파일로 저장 (0) | 2021.09.26 |
[JS] 콜백함수 (0) | 2021.09.15 |
[JS] expression & operator (0) | 2021.09.11 |
Comments