(수근수근)

[NodeJS] Nodejs 기초 본문

type & Javascript

[NodeJS] Nodejs 기초

InformationFarm 2021. 10. 1. 11:08

해당 내용은 인프런의 테스트주도개발(TDD)로 만드는 NodeJS API 서버를 정리한 내용입니다.

 

기존의 JS는 브라우저에서 동작하는 언어이다.

Node.js 기초

  • 브라우저 밖에서 자바스크립트 코드를 진행할 수 있다.
  • 크롬에서 사용하는 V8엔진을 사용한다
  • 이벤트 기반의 비동기 I/O 프레임워크
  • CommonJS를 구현한 모듈 시스템

[NodeJS 특징] 이벤트 기반의 비동기 I/O 프레임워크

  1. 클라이언트에서 어플리케이션으로 요청을 보낸다
  2. 노드js는 클라이언트의 요청을 이벤트 큐에 차곡차곡 쌓아 넣는다
  3. 이벤트 루프는 이벤트큐에있는 것을 하나하나 뽑아서 실행합니다
    1. 이벤트 루프는 하나의 싱글쓰레드 입니다.(싱글쓰레드가 job을 처리하고 결과를 응답해줍니다)
    2. 따라서 노드JS는 싱글쓰레드라고 보통은 말합니다.
  4. 하지만 디스크에 있는 파일이나 외부 네트워크 처리는 큰 작업의 단위이기 때문에 이벤트루프가 직접 실행하지 않고 다른 쓰레드에 일을 위임합니다.
  5. 해당 쓰레드는 작업 단위가 큰 일을 처리하고 완료되면 결과를 다시 이벤트 큐에 이벤트 형태로 전달합니다.
  6. 그럼 이벤트 루프는 차곡차곡 작업을 처리하다가, 이벤트처리가 완료되면 클라이언트에게 결과를 전달해줍니다.

따라서 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