01. Node.js와 웹 서버

surra77·2024년 3월 22일
0

01. 자바스크립트 엔진

자바스크립트를 실행하려면 자바스크립트 엔진이 필요!
브라우저에는 이미 자바스크립트 엔진이 있기 때문에 자바스크립트를 실행할 수 있음

JavaScript 엔진은 자바스크립트 코드를 실행하는 소프트웨어 구성 요소. 최초의 JavaScript 엔진은 단순한 interpreter였지만, 모든 관련 최신 엔진은 성능 향상을 위해 Just-in-Time 컴파일을 사용. JavaScript 엔진은 일반적으로 웹 브라우저 공급업체에서 개발하며 모든 주요 브라우저에 하나가 있음

컴퓨터가 소스 코드를 이해하려면?

컴퓨터 프로세서는 오직 0과 1만 이해할 수 있기 때문에 우리가 작성한 소스 코드를 머신 코드로 변환해 줘야 함. 이 변환 과정은 컴파일과 인터프리터를 통해 일어남

Interpreter

High Level Language를 한 줄씩 번역하고 실행

Compiler

High Level Language를 한번에 기계어로 변환하여 실행

JIT Compilation (Just In Time)

interpreter는 코드를 한줄 한줄 해석하고 실행하기 때문에 매우 느림. 따라서 더 나은 퍼포먼스를 위해 JIT 컴파일 사용

JIT compilation은 ahead-of-time compilation(AOT)와 interpretation 두 가지 방식의 결합

자바스크립트 엔진의 종류

브라우저자바스크립트 엔진
ChromeV8
FirefoxSpiderMonkey
SafariJavascriptCore
Internet ExplorerChakra

08. Module

Node.js에서 module은 '필요한 함수들의 집합'
사용하고자 하는 모든 기능을 처음부터 다 만들어서 사용할 수는 없음
다른 사람이 이미 만들어 놓은 모듈을 사용하거나 노드 JS에서 제공해주는 많은 모듈을 사용

모듈을 불러오는 방법

const module = require("module_name")
  • Core Module

    Node.js에서 기본으로 제공하는 모듈
    - http: 서버를 생성하기 위한 클래스, 메소드, 이벤트를 포함
    - url: URL 확인 및 구문 분석을 위한 메소드 포함
    - querystring: 쿼리 문자열을 처리하는 메소드 포함
    - path: 파일 경로를 처리하는 메소드 포함
    - fs: 파일 I/O 작업을 위한 클래스, 메소드, 이벤트 포함
    - util: 프로그래머에게 유용한 유틸리티 기능이 포함

  • Local Module

    Node.js 애플리케이션에 사용자가 로컬로 생성한 모듈
    Node.js 커뮤니티에서 사용할 수 있도록 패키지로 만들어 NPM을 통해 배포할 수 도 있음

  • Third Party Module

    다른 사람이 만든 모듈을 NPM을 통해 가져와 사용할 수 있음


13. CommonJS vs. ECMA script 모듈

CommonJS Module

module.exports로 내보내고 requrie로 가져오는 것은 CommonJS
이 CommonJS는 Node.js에서 기본 모듈로 사용되고 있음

ECMAScript Module

ECMAScript는 export, import를 이용해서 모듈을 내보내고 가져오는 Syntax 사용

  • ES 모듈은 JavaScript의 표준이고 CommonJS는 Node.js의 기본값
  • 모든 주요 브라우저는 ES 모듈을 지원하며 React 및 Vue.js와 같은 프레임워크에서도 ES 모듈의 import와 export를 사용할 수 있음
    이러한 프레임워크는 Babel과 같은 transpiler를 사용하여 이전 Node.js 버전이 기본적으로 지원하는 require()로 컴파일함
  • Node.js 13.2.0 버전부터 ECMAScript 모듈을 지원함

15. 모듈 캐싱

모듈에서 다른 모듈을 가져올 때 (load할 때) ECMAScript를 사용하든 CommonJS를 사용하든 해당 모듈을 캐싱함
따라서 한번 가져오면 다음에 다시 load할 필요없음


17. npm

npm 이란?

  • 오픈 소스 Node.js 프로젝트 게시를 위한 온라인 레포지토리(저장소)
    NPM 레지스트리 모듈들이 저장되어 있는 곳
  • 패키지 설치, 버전 관리 및 종속성 관리를 지원하는 해당 저장소와 상호 작용하기 위한 명령줄 유틸리티

21. package-lock.json

package-lock.json이 생성되는 시점의 의존성 트리(node_modules)에 대한 정보를 가지고 있는 파일

package-lock.json 파일을 사용하는 이유

  • 이 파일은 소스 레포지토리에 커밋하기 위한 것이며 다양한 용도로 사용됨
  • 팀원, 배포 및 지속적인 통합이 정확히 동일한 종속성을 절치하도록 보장하는 종속성 트리의 단일 표현을 설명함
  • 사용자가 디렉토리 자체를 커밋하지 않고도 node_moduels의 이전 상태로 돌아갈 수 있는 기능을 제공
  • 읽을 수 있는 소스 제어 diff를 통해 트리 변경 사항을 더 쉽게 볼 수 있음
  • npm이 이전에 설치된 패키지에 대해 반복되는 메타데이터 확인을 건너뛸 수 있도록 하여 설치 프로세스를 최적화

22. npm audit

audit 명령은 프로젝트에 구성된 종속성에 대한 설명을 기본 레지스트리에 제출하고 알려진 취약성에 대한 보고서를 요청. 취약점이 발견되면 적절한 교정도 해줌. fix 인수가 제공되면 수정사항이 패키지 트리에 적용됨


24. Yarn

Yarn은 페이스북에서 만든 자바스크립트 패키지 매니저

원래는 npm만을 이용해서 패키지 관리를 했지만 Facebook에서 npm의 단점들(보안 및 성능)에 대응하기 위해 yarn을 개발하게 됨
Yarn은 npm보다 속도와 보안에서 더 향상된 성능을 가짐

  • 패키지 병령 설치

    npm은 패키지들을 설치할 때 설치하는 패키지를 다 설치하고 난 후에 다른 패키지를 순차적으로 실행. yarn은 병렬로 패키지를 설치하기 때문에 더 빠르게 설치할 수 있음

  • lock 파일 생성

    npm으로 패키지를 설치하면 package-lock.json 파일을 생성하는 것처럼 yarn으로 패키지를 설치하면 yarn.lock 파일을 생성하게 됨
    package-lock.json과 마찬가지로 yarn.lock에도 최초 패키지 추가 시에 설치된 버전들이 들어 있음
    yarn.lock 파일이 있으면 레지스트리에 패키지의 더 최신 버전이 있어서 yarn install로 패키지를 설치할때 yarn.lock에 있는 버전을 사용하므로 패키지 버전 문제를 최소화할 수 있음

  • 향상된 보안

    yarn은 패키지를 다운로드하는 동안 백그라운드 프로세스로 보안 검사를 수행. 패키지 라이센스 정보를 사용하여 악성 스크립트를 다운로드하거나 종속성 충돌을 일으키지 않도록 함

profile
개발자 준비생

0개의 댓글