Node.js_promise, async await

Node.js

  • JavaScript를 기계가 이해할 수 있게compile해서 구동하고,이벤트 기반의 non-blocking model이기에 속도가 빠른 JavaScript runtime
  • a JavaScript runtime built on Chrome’s V8 JavaScript engine => V8 엔진으로 만들어진 JS runtime(JS을 compile해주는 엔진으로 만들어진 JS가 구동 중인 환경)
V8
- compiles JavaScript directly to native machine code
- 자바스크립트를 기계어로 컴파일한다
runtime
-프로그램이 구동되고 있는 환경
  • As an asynchronous event-driven JavaScript runtime, Node.js(asynchronous as default) is designed to build scalable network applications.(highly scalable, data-intensive and real-time apps)
  • 이벤트 기반 및 non-blocking I/O model => 유저의 클릭이나 네트워크에 리소스를 요청하는 이벤트가 non-blocking으로 이루어지느 input/output model
Non-blocking(비동기)
- 다음 함수 실행이 현재 함수의 종료를 기다리지 않음
Blocking(동기)
- 다음 함수 실행이 현재 함수의 종료 이후에 이루어지는 것
I/O model
-input을 주면 output을 반환하는 모델

Node Core modules

  • node와 함께 번들링 되어 있는 모듈
  • 노드 설치 이후, 별도 설치 없이, node 상에서 쓸 수 있는 모듈 존재
  • require(‘ ’) 방식으로 사용가능
  • fs: 읽고 쓰고 지우고 같은 역할
  • http
  • url
  • path
fs.readFile(path[, options], callback)
- 어떤 파일을 읽어서, (err, data)의 callback을 받을 수 있음 => 비동기적으로 실행
path <string> | <Buffer> | <URL> | <integer>
- 파일 이름을 인자로 넘길 수 있음. 4가지 종류의 타입을 넘길 수 있지만, 보통은 문자열로 넘김
http.get(url[, options][, callback])
- client로서 get 요청 가능, server로서 서버 생성 가능

NOT a PROMGRAMMING LANGUAGE
NOT a FRAMEWORK

  • While database is executing query, that thread will be used to serve another client. When database prepares the result, it puts a message to ‘Event Queue’. Node monitors this queue in the background. When it finds an event in this queue, it will take it out and process
  • Ideal of I/O-intensive apps => ideal for building applications that includes a lot of disk and network access. can serve more clients without more hardware, which makes highly scalable
  • Do not use for CPU-intensive apps like video encoding or image manipulation service because JavaScript is single thread so other client has to wait during calculation and those require lots of calculations done by CPU and only few touch file system or networks will be done
  • Upon each connection, the callback is fired, but if there is no work to be done, Node.js will sleep
  • free from worries of dead-locking the process, since there are no locks.
  • Almost no function in Node.js directly performs I/O, so the process never blocks
  • Because nothing blocks, scalable systems are very reasonable to develop in Node.js.
  • presents an event loop as a runtime construct instead of as a library
  • no such start-the-event-loop call.
  • simply enters the event loop after executing the input script
  • exits the event loop when there are no more callbacks to perform like browser JavaScript — the event loop is hidden from the user
  • designed without threads doesn’t mean you can’t take advantage of multiple cores in your environment. Child processes can be spawned by using our child_process.fork()
  • API, and are designed to be easy to communicate with. Built upon that same interface is the cluster module, which allows you to share sockets between processes to enable load balancing over your cores

Node Package Manager(npm)

  • 세계에서 가장 큰 open source library 생태계 중 하나
  • node와 번들링 되어있지 않아서 다운로드해서 사용
const $ = require('jquery')
  • package.json에 그 정보들이 모두 담겨 있음

package.json

  • npm을 활용하기 위한 정보들이 모여있는 파일
  • project 전반에 관한 정보가 들어있음
  • npm init을 통해 생성할 수 있음
scripts
- 설정 된 script 정보
- cli에서 해당 정보를 실행
- ex. npm start
dev-dependency
- 프로젝트와 관계 없는, 개발 만을 위한 dependency
- ex. --dev 옵셥을 줘서 등록
dependency
- 직접 production과 관계있는 library
- npm --save 옵션 주기
- 설치할 때 꼭 SAVE => 만약에 안하게 된다면 협업에서 문제 발생
- 보통 git clone 후 npm install(package.json에 있는 dependency 바탕으로 설치하게 됨) 실제 node module은 git 상에서 포함 시키지 않음
- 만약 dependency에 등록되지 않고 사용되고 있으면, 코드에서 해당 모듈을 쓰지만, npm install로는 설치가 되지 않아 error가 발생함
nodemon
- 일회성이 아니라 저장사항을 반영해서 즉각적으로 서버 실행
- ex. nodemon download한 후
"scripts": {
"start": "nodemon index.js."},
Debugging
- scripts에 --inspect을 추가한 후,
"scripts": {
"start": "node(nodemon) --inspect index.js."},
- npm start하고 chrome 열기
- --inspect-brk => 시작하자마자, breakpoint가 잡혀있음
- 아니면 vsc에서 breakpoint잡고 debug

reference: https://nodejs.org/en/about/

https://meetup.toast.com/posts/89

reference: https://nodejs.org/dist/latest-v12.x/docs/api/fs.html#fs_fs_readfile_path_options_callback

--

--

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store