Node js

BackEnd_Ash.log·2021년 1월 9일
0

node

목록 보기
5/9

Node js 란 ?

https://perfectacle.github.io/2017/06/18/what-is-node-js/

처음엔 Node js 도 그냥 백엔드를 구현하는데 ,
웹 프레임워크가 아닐까 ?? 생각을 했는데, 전혀아니다 .

런타임은 프로그래밍 언어가 구동되는 환경이다.
그러니깐 Node.js 는 javscript 라는 프로그래밍 언어가 구동되기위한 환경이다 .

모든 브라우저에는 Javascript 코드를 해석하기 위해 Javascript Engine 을 내장하고 있다.

웹브라우저에서

console 창을 열어서 ,
console.log("test") 라고 입력을 하게 되면 ,
test 라는 문자열이 나오게 된다.

alert() 도 일반적인 그냥 코드이다.
이것을 enter 를 누르게 되면 , alert() 창이 나오게 된다.
이러한 역할을 해주는게 웹 브라우저인데, 웹브라우저 안에는 자바스크립트 코드를 해석해주는 엔진이 있기때문이다 .

그리고 크롬에서는 V8 이라는 엔진을 사용하고 있다.

Chrome 은 V8 , FireFox 는 SpiderMonkey , Safari 는 Webkit 등등

이와 같이 Node.js 는 Chrome 의 V8엔진을 이용하여 브라우저에서 JavaScript 를 해석하듯이 서버에서 JavaScript 를 동작할 수 있도록 하는 환경(플랫폼) 이라고 생각하면 된다.

왜 Node js 를 사용하는걸까 ??

그런데 왜 Node js 를 사용하는걸까 ?? 라는 생각이 들었다 .

1. Node js 는 싱글 스레드 이다 .

  • 하나의 스레드가 request 를 받으면 바로 다음 처리에 요청을 보내놓고 다른 작업을 처리하다가 먼저 요청한 작업이 끝나면 이벤트를 받아서 응답을 보낸다 .

  • 동시 request 가 오더라도 처리가 완료될때까지 기다리지 않아도 되기 때문에 서버 부하가 적다.
    오래 걸리는 작업을 기다려주지 않고 다음 코드를 바로 실행하기 때문에 , 오래 걸리는 작업은 일단 보낸 뒤 , 나중에 할 일이 없을 때 , 해당 작업이 끝나서 나온 결과물을 처리한다.

2. 이벤트 기반의 비동기 I/O 프레임 워크

Non-blocking I/O 와 단일 스레드 이벤트 루프를 통한 높은 처리성능이 빠르다.

3. npm(node package manater) 를 통한 다양한 모듈( 패키지 ) 제공

npm(node package manager) 을 통한 다양한 모듈 ( 패키지 ) 제공을 하며 , npm 을 이용해 자신이 필요한 라이브러리와 패키지를 검색해서 설치하고 사용할 수 있기 때문에 개발속도와 효율성이 크게 향상한다.

  • 기본 모듈
const util = require('util')

const name = 'world'
const msg = util.format('hello %s', name)
console.log(msg); // hello world
  • 써드파티 모듈
const express = require('express')
  • 사용자 정의 모듈

내가 원하는 모듈이 없을때는 사용자가 직접 만들어서 사용할 수가 있다.


// add.js
const addNumber = {
   add(a , b){
     return a + b 
   }
}

module.export = addNumber 

//index.js
const addNumber = require('./add')
console.log(addNumber.add(1,2)) // 3

4. 개발 효율성

데이터를 실시간으로 다루는 애플리케이션이나 싱글페이지 애플리케이션(SPA) , 입출력이 잦은 애플리케이션을 개발할 때 효율성을 발휘하게 된다.

언제 사용하는것이 좋을까 ??

  • 빠른 응답시간 요구
  • 빠른 개발 요구
  • 비동기 방식에 어울리는 서비스 ( 네트워크 스트리밍 서비스 , 채팅 서비스 등등 )

단점

아까 위에서 얘기했듯이 싱글 스레드 이기때문에 단일 처리가 오래 걸리는 경우 권장하지 않는다.
그리고 에러가 발생하게 되면 서버게 바로 죽게된다. 이점이 제가 생각하기엔 가장 큰 단점같다 .

만약에 서버단 로직이 복잡하게 짜여있을 경우 콜백함수 늪에 빠질 수 있다.

  • 단일처리가 오래 걸리는 경우
  • 에러가 나면 바로 죽게 된다.

테스트

테스트 1


// console.log('call 1')

setTimeout(() => {
    console.log('call 1')
}, 3000);


console.log('call 2')

위의 코드는 3초후에 코드가 실행되는것이고

console.log('call 2')

같은경우는 바로 실행이된다.

참고자료

profile
꾸준함이란 ... ?

0개의 댓글