노드JS의 특징

  1. 브라우저 밖에서 자바스크립트 코드를 실행할 수 있다
  2. 크롬에서 사용하는 V8 엔진(자바스크립트 코드 해석기)을 사용한다
  3. 모듈 시스템이 있다
  4. 이벤트 기반의 비동기 I/O 프레임웍크다

Detail about 노드JS 특징의 3,4번.

3. 모듈 시스템이 있다

  • browser에서는 모듈 시스템을 구현하기 위해서 Window contector을 구현했다.
    brower의 전역객체 this === window 객체.
    JS의 전역 객체는 Window 객체이다.
    Window의 module을 정의해서 모듈 시스템 작업을 한다.
  • nodejs는 새로운 형태의 모듈 시스템을 구현.
    CommonJs인데, 이는 파일 형태로 모듈을 관리.
    web brower에서는 파일에 접근 할 수, nodejs는 서버에서 들어가기 때문에 파일을 읽을 수 있다.
    ex_1) 모듈 사용하기
const http = require('http')

: 노드에는 http라는 기본 모듈이 존재.
그 모듈을 불러오기 위해서는 require을 사용.
이후에는 http 모듈이 제공하는 여러가지 함수들을 사용 가능.
ex_2) 모듈 만들어, 사용하기
< maith.js >

function sum(a, b) {
  return a + b;
}

module.exports = {
  sum: sum //sum 키에 sum 함수 할당
}

< index.js >

const math = require('/math.js')

const result = math.sum(1, 2);

console.log(result);

4.이벤트 기반의 비동기 I/O 프레임웍크다

→ 1) 이벤트 기반

nodejs로만든 application은 보통 client가 사용.
client가 application으로 요청을 보냄.
nodejs는 클라이언트의 요청을 event로 만들어 Event Que 에 차곡차곡 쌓아놓는다.
EventLoop는 Event QUE에 있는 Event 하나하나 뽑아서 실행한다.
이 EventLoop는 singleThread이며, 기본적으로 job을 처리한다.
그래서 job을 처리한 후, 요청한 client에게 결과를 응답 해 주다.
☞ nodejs는 singleThread다! 하는 이유!

→ 2) 비동기 I/O 프레임 워크

EvnetLoop가 event를 하나씩 처리하는데, 그 event가 바로 실행되서 응답 될 수 없는 많은 시간이 필요한 작업 ( 디스크 파일 일기, 외부 네트워크 통신 등) 은 EventLoop가 직접 실행하지 않는다. 이는 다른 thread에게 위임한다.
무거운 jobd을 실행하는 worker.
이곳에서 실행이 완료되면, 결과를 다시 Event 형태로 que에 전달한다. 그럼, EventLoop는 Event Que에 있는 Event를 실행하다가 Worker Thread에서 보내준 event를 Event Que 에서 뽑으면, 다시 그 event를 실행한다.
실행이 완료되면 그 결과를 Client에게 보내주는 구조.

Summary

  1. Client가 보낸 모든 요청을 Event로 처리.
  2. 무거운 job들은 workerThread에게 전달해, 비동기로 처리.

비동기 세계

: 노드는 기본적으로 비동기로 동작하므로, 비동기 사용을 잘 할 줄 알아야 한다.
비동기 코드를 쓸 때 콜백 함수(err,data) 사용 & 실행 순서 유의!

readFile()
비동기 방식으로 파일을 읽는 함수
https://nodejs.org/api/fs.html#fs_fs_readfile_file_options_callback
readFileSync()
동기 방식으로 파일을 읽는 함수
https://nodejs.org/api/fs.html#fs_fs_readfilesync_file_options

profile
Coder가 아닌 Engineer를 향해서.

0개의 댓글