Node.js 설명

  • nodejs

posted on 30 Aug 2024 under category nodejs

Node.js 설명

Node.js 특징

💫 Node.js

  • 자바스크립트를 스크립트 언어 이상으로 프로그래밍 언어 역할을 할 수 있도록 함.
  • 객체지향적이고, 웹브라우저 밖에서도 자바스크립트로 작동하는 코드를 짜고 싶어서 사용

💫 싱글 스레드, 이벤트 기반, 논블로킹 I/O

요리사가 한 명이면!

싱글 스레드 -> 주문이 밀려도 한 명이 악으로 깡으로 해야함..😭
즉 하나의 클라이언트가 하나의 작업을 함!

논블로킹 I/O -> 한명이 일을 하는데, 요리를 순차적으로 X, 중간중간 비는 시간이 있다면 다른 요리O
ex) 라면 1개(10분 중 물 끓는 시간 5분: 요리사는 물만 쳐다봄.), 볶음밥(완성 5분)
라면 물 끓여놓고 => 볶음밥 요리 => 라면 요리
즉 다른 작업이 완료되는 걸 기다리지않고, 다른 작업을 수행!

따라서 Node.js는 싱글 스레드로 동작 but 비동기 I/O 작업을 통해 요청들을 서로 블로킹X
즉, 동시에 많은 요청들을 비동기로 수행하여 싱글스레드일지라도 논블로킹O
클러스터링을 통해 프로세스를 포크(fork)하여 멀티스레드인것 처럼 사용O
트래픽에 따라, 프로세스를 포크할 수 있으므로 확장성이 용이함.

이벤트 기반 -> 주문이 들어와야만 일을 함.(없으면 안함!!!)
이벤트가 발생할 때 미리 지정해둔 작업을 수행하는 방식.
이벤트 리스너에 등록해둔 콜백함수 실행.

스레드(Thread) : 프로세스 내에서 실행되는 흐름의 단위.
하나의 프로세스는 스레드를 여러개 가질 수 있음. 스레드들은 부모 프로세스의 자원 공유

프로세스(Process) : 운영체제에서 할당하는 작업의 단위.
Node.js나 인터넷 브라우저 같은 프로그램은 개별적인 프로세스. 프로세스 간 메모리 자원 공유 X


패키지 매니저

출처: 패키지 매니저의 과거, 토스의 선택, 그리고 미래

💫 패키지 매니저란?
모든 소스 코드의 파일이 특정 버전을 사용할 수 있도록 함!
package.json의 dependancy에 명시

💫 패키지 매니저의 동작 단계

  1. Resolution
    • 라이브러리 버전 고정
    • 라이브러리 의존성 확인 및 버전 고정(package-lock.json에 저장됨)
  2. fetch
    • 네트워크를 통해 결정된 버전의 파일 다운로드
  3. link
    • Resolution/Fetch 된 라이브러리를 소스코드에 사용할 수 있도록 환경 제공.
    • ex) npm, pnpm, PnP(Plug’n’Play) 사용!
종류 장점 단점
npm Linker 단순함, node 설치 시 자동설치 디렉토리 너무 커짐. node_modules 디렉토리로 인해 패키지 하나 찾으려면 속도가 느림
pnpm 디렉토리 크기가 작음. npm에 비해 빠르고, 기존 npm linker와 호환성도 좋음 node_modules 디렉토리는 유지하기 때문에 , 여전히 느림
PnP(Plug’n’Play) 빠름 node_modules가 문제라 버전을 MAP 방식으로 관리하기로 함
yarn 빠름 + 보안강화 / yarn.lock 이나 package.json에 있는 것만 설치함 npm, yarn 모두 설치해야 함



npm

💫 npm

  • 외부 모듈을 사용할 수 있게 함!
  • 일종의 모듈 관리자라고 생각하기!
  • 외부 모듈을 내 프로젝트에 설치할 수 있게 해주는 멋진 칭구.
  • npm이 저장소에 “외부 모듈”의 설치를 우리가 원하는 프로젝트에 자동으로 해줌!
    = “프로그램”설치 파일 다운로드 받아서 더블 클릭
    = npm install 모듈

npm은 빠르고 간편하게 삭제도 가능 = npm uninstall 모듈


💫 모듈이란?

  • 내가 만든 게 아닌, 이미 만들어져 있는 코드 덩어리
  • 모듈을 만들 때 어디서부터 어디까지 칭하는지는 내 마음!

💫 모듈을 가져가 쓰고 싶을 때는?

  1. 기본으로 내장된 모듈: 내장 모듈, 표준 모듈이라고 함
    ex) setTimeout(), …
  2. 외부 모듈 어떻게 사용하지? NPM

“Node.js 덕분에 자바스크립트 모듈을 만들 수도 있게 되었고 사용도 가능하게 됨!”