동캄의 코딩도장

Quest7 checklist 본문

WebDevCurriculum

Quest7 checklist

동 캄 2023. 3. 28. 22:44

node.js는 무엇인가요? node.js의 내부는 어떻게 구성되어 있을까요?

  • Node.js 는 확장성 있는 네트워크 애플리케이션을 만들 수 있도록 설계된 비동기 이벤트 주도 JavaScript 런타임
  • 논 블로킹 I/O 와 단일 스레드 이벤트 루프를 통한 높은 성능 가짐

  • JavaScript(Apllication), Node JS, V8, Libuv 로 구성
  • libuv: node js에서 비동기 처리를 담당하는 라이브러리
  • V8: javascript 엔진으로 자바스크립트를 실행시키는 라이브러리

npm이 무엇인가요? package.json 파일은 어떤 필드들로 구성되어 있나요?

  • node package module의 약자로, 노드 패키지를 관리해주는 틀을 의미

  • 패키지들은 서로 연관되어 있는 경우가 많아서, 하나의 패키지가 다른 패키지에 영향을 줄 수 있기 때문에, package.json이 이를 관리

  • package.json 필드

    • name: 패키지의 이름을 저장하는 필드
    • version: 패키지의 버전을 저장하는 필드. [major]-[minor]-[patch] 순으로 표현된
    • description: 문자열로 기술된 패키지에 대한 설명이다. npm search에 사용
    • keywords: 프로젝트를 검색할 때 참조되는 키워드 npm search에 사용
    • author: 프로젝트 작성자 정보로 한 사람의 정보가 저장
    • contributor: 프로젝트 공헌자 정보로 여러 사람의 정보 저장
    • repository: 프로젝트의 소스코드를 저장한 저장소의 정보
    • scripts: 여러가지 npm 명령어에 대한 지정 ex) scripts에 build라는 명령어가 저장되어 있으면, npm run build 명령어 사용 가능
    • dependencies: 프로젝트 의존성 관리를 위한 부분으로, 이를 이용하여 프로젝트가 어떤 확장 모듈을 요구하는지 정리가능 + npm install 명령 시, 어플리케이션 설치시 dependencides를 참조하여 확장 모듈 설치

npx는 어떤 명령인가요? npm 패키지를 -g 옵션을 통해 글로벌로 저장하는 것과 그렇지 않은 것은 어떻게 다른가요?

  • node package execute의 약자로, 모듈을 로컬에 저장하지 않고, 매번 최신 버전의 파일만 임시로 불러와 실행시키고, 그 파일을 사라지는 형태로 작동
  • npm -g 명령을 사용하면 전역적으로 모듈이 설치 됨. 따라서 다른 프로젝트 진행시에도 npm을 통해 설치하지 않고 사용이 가능. but 서로 다른 프로젝트 진행시에 업데이트에 따라 버전이 달라지는 경우도 있고, 직접 업데이트를 하지 않는 이상 모듈이 업데이트 되었는지 확인 할 수 없다는 단점 존재

자바스크립트 코드에서 다른 파일의 코드를 부르는 시도들은 지금까지 어떤 것이 있었을까요? CommonJS 대신 ES Modules가 등장한 이유는 무엇일까요?

각각의 스크립트 파일을 전역변수 처럼 사용

  • 순서가 뒤틀리면 에러 발생,하위 script가 상위 script의 값을 변경시키는 '전역 오염'이 발생 가능
모듈화 등장

COMMON JS 사용

  • 파일 시스템에서 파일을 로드
  • 파일 불러오는 동안 주 스레드를 차단
  • 파일로드-구문분석-인스턴스화-평가가 각 파일마다 바로 실행 --> 모듈 지정자에 변수를 삽입 가능
  • export 객체에 값을 복사해서 삽입
  • 비동기 처리 시 값이 바뀌는 경우 반영 x, 순환 참조 시 빈 객체 반환

ES Modules 사용

  • 파일의 구문 분석 --> 의존성 확인 --> 의존성 파일 구문분석 --> 의존성 확인 .... 반복
  • 파일을 불러오는 동안 주 스레드를 차단 x
  • 인스턴스 화, 평가는 더이상 구문 분석할 의존성이 발견되지 않으면 실행
  • 모듈 지정자에 변수 삽입 가능 x

ES Modules는 기존의 require()와 동작상에 어떤 차이가 있을까요? CommonJS는 할 수 있으나 ES Modules가 할 수 없는 일에는 어떤 것이 있을까요?

  • ESM은 전부 import를 한 뒤, 실행하는 방식
  • CJS는 Reqire()이 호출 되면, Script가 실행되고, export 반환
  • ESM을 쓰는 이유
    • export 하는 파일에서 비동기 처리로 값이 바뀐다면, COMMON JS에서는 반영이 되지 않지만, ESM은 반영 가능
    • 순환 참조의 경우 COMMON JS는 빈 객체를, ESM은 Reference를 발생

node.js에서 ES Modules를 사용하려면 어떻게 해야 할까요? ES Modules 기반의 코드에서 CommonJS 기반의 패키지를 불러오려면 어떻게 해야 할까요? 그 반대는 어떻게 될까요?

node js에서 ESM 사용

  1. package.config의 "type:": "module"로 setting
  2. .js-> .mjs 로 변경

ESM기반 코드에서 CJS 기반 패키지 사용

  1. default import 로 사용 가능
  2. 내부메서드는 CJS.method() 처럼 .을 찍어 사용가능

참조 블로그

'WebDevCurriculum' 카테고리의 다른 글

Quest6 checklist  (0) 2023.03.09
Quest5 checklist  (0) 2023.03.09
Quest 4 checklist  (0) 2023.03.09
Quest3 checklist  (0) 2023.03.07
Quest2 checklist  (1) 2023.03.07