2023.12.05(화)

🤔Why Node.js?

  • Node.js는 자바스크립트를 웹 브라우저 밖에서도 사용할 수 있게 해주는 운동장(런타임)
  • 관련 Survey : Stack Overflow Developer Survey 2023
    • 한국 전자정부표준프레임워크의 기반 기술이며 한국정보화진흥원에서는 공공기관의 웹 서비스 제공 시 Spring을 권장🔗 → 우리나라는 공공기관에서 Spring을 사용하기 때문에 비중이 높은 편이다.
    • 지표를 보면 Node.js와 React를 많이 사용함을 알 수 있다.
    • Netflix,Airbnb, LinkedIn, Uber, NASA, PayPal, eBay 등 많은 곳에서 Node.js를 사용하고 있다.

👀Node.js 특징

  • 장점🔗🔗
    1. Node.js는 단일 스레드(Single-Thread)의 논 블로킹(Non-blocking I/O) 이벤트 기반 비동기 방식으로 처리되어 높은 처리 성능을 가지고 있다.
    2. 내장 HTTP 서버 라이브러리를 포함하고 있어 웹 서버에서 아파치 등의 별도의 소프트웨어 없이 동작하는 것이 가능하며 이를 통해 웹 서버의 동작에 있어 더 많은 통제를 가능케 한다.
    3. Javascript 언어로 Front-end 뿐만 아니라 Back-end 개발 환경을 구성할 수 있기에 생산성이 높고 러닝 커브가 줄어든다.
    4. 다양한 패키지 매니저(npm: node Package Manager)를 기반으로 다양한 모듈(패키지)을 제공하며 필요 라이브러리에 대해 설치하고 사용할 수 있기에 효율성이 좋다

👍Single-Thread

💡Process & Thread

  • 주문을 점원 한 명이 처리 singel-thread & non-blocking
  • 노드 프로세스는 멀티 스레드이지만, 직접 다룰 수 있는 스레드는 하나이기 때문에 싱글 스레드라고 표현
  • 하지만 노드 14버전에 멀티 스레드 가능! (worker_threads 모듈) → CPU를 많이 사용하는 작업인 경우에 활용 가능 → 멀티 프로세싱만 가능했던 아쉬움을 달래줌

✌️Non-blocking I/O

💡Sync/Async & Blocking/Non-blocking

  • 다른 요청의 작업을 처리하기 위해 현재 작업을 막지 않음 → 요청 순서와 상관없이 처리 속도가 빠른 것부터 응답 (Async & Non-blocking)

👌이벤트 기반

  • 이벤트가 발생할 때 미리 지정해둔 작업을 수행하는 방식

❓모듈(Module), 라이브러리(Library), 프레임워크(Framework)

  • 모듈 \approx 라이브러리 : 코드 모음집, 덩어리

  • 프레임워크 : 필요해보이는 라이브러리/모듈을 미리 틀 안에 준비해둔 것

  • 사실 우리는 이미 모듈을 사용해보았다. [🔗]
    (http 모듈을 사용해서 다소 raw하게 코드를 작성했었는데 요즘에는 express라는 모듈을 사용한다고 한다.)

  • npm을 이용해 외부 모듈/패키지를 다운로드 받을 수 있다.

    • 설치 : npm install module-name

    • 삭제 : npm uninstall module-name

    • 유명한 ascii art 모듈 "figlet"

      • Install:
        npm install figlet or npm i figlet

      • Simple usage:

        var figlet = require("figlet");    // figlet module 가져오기 (require는 node.js built-in module)
        
        figlet("Hello World!!", function (err, data) {    // anonymous callback function
          if (err) {
            console.log("Something went wrong...");
            console.dir(err);
            return;
          }
          console.log(data);
        });
profile
이것저것 관심 많은 개발자👩‍💻

0개의 댓글