🍰 겁나 빠르다.
🍴 module
: SW 개발에서 코드의 조직과 재사용성을 높이기 위해 사용하는 개념.
- 독립적인 코드 조각
- 특정 기능을 수행하는 단위
- ex. 클래스 하나, 특정 목적을 가진 복수의 함수로 구성된 라이브러리 하나
🍫 특징
- 캡슐화 - 자체적인 scope를 가지며, 외부와의 상호작용 최소화
- 재사용성 - 한 번 정의한 모듈을 다른 코드에서 가져다 사용 가능
- 분리와 조직화 - 코드 기능 논리적으로 분리 가능
- 복잡한 프로그램 -> 작고 관리하기 쉬운 조각으로 나누어 개발
🍴 ES(ECMAScript) module(표준) vs CommonJS module
1. server.mjs (ES 모듈)
import liveServer from "live-server";
const params = {
host: "localhost",
port: 3000,
root: ".",
open: false,
mount: [["/", "./public"]],
};
liveServer.start(params);
🍫 import와 export 사용
- import 구문을 사용하여 모듈 가져옴
- export 구문을 사용하여 모듈 내보냄
🍫 파일 확장자
- .mjs 파일 확장자
- 가장 가까운 상위 package.json의 "type" 필드를 "module"로 설정
🍫 비동기 로딩
- ES 모듈은 기본적으로 비동기적으로 로드됨
- 따라서 top level await이 가능해짐
- 결과적으로 전체 파일 로드에 대한 성능 향상
🍫 정적 분석
- 정적으로 분석됨
- 코드 실행 전 import와 export가 체크 되기 때문에 tree-shaking같은 최적화 기법 가능
2. server.cjs (CommonJS 모듈)
const liveServer = require("live-server");
// live-server 패키지를 import
// live-server 모듈 가져와서 사용할 준비
// 로컬 개발 서버를 실행, 파일 변경 시 자동으로 브라우저 새로 고침해주는 기능 제공
const params = { // 서버의 동작 방식을 설정하는 여러 옵션 포함하고 있는 설정 객체
host: "localhost", // 서버가 localhost에서만 접근 가능하도록
port: 3000, // 서버가 이 포트에서 요청 수신
root: ".", // 현재 작업 디렉토리에서 파일 제공하도록 설정
open: false, // 서버 시작 시 브라우저 자동 열림 X
mount: [["/", "./public"]], // '/'경로에 대해 ./public 디렉토리를 마운트
// 요청이 '/'로 들어오면 서버는 ./public 디렉토리의 파일 제공
};
liveServer.start(params);
// 위 설정을 바탕으로 서버 시작
🍫 require와 module.exports 사용
- require 구문을 사용하여 모듈 가져옴
- module.exports를 사용하여 모듈 내보냄
🍫 파일 확장자
- .cjs 파일 확장자
- .js 확장자 사용 시 가장 가까운 상위 package.json의 "type" 필드를 "commonjs"로 설정
- .mjs, .cjs, .json, .node, .js가 아니거나, package.json 파일이 없거나 "type" 필드가 없으면 기본적으로 CommonJS 모듈로 간주
🍫 동기 로딩
- 동기적으로 로드됨
🍫 동적 분석
- 동적으로 분석되며, require 호출 시에 모듈이 로드됨
🍴 esm.sh
: CDN(Content Delivery Network) 서비스. 주로 JavaScript 모듈 제공.
import React from '<https://esm.sh/react>';
- ES 모듈 지원 - ECMAScript 모듈 형식으로 패키지 제공
- npm 패키지 접근 - npm에 있는 거의 모든 패키지를 ESM 형식으로 변환하여 제공
- 번들링 없이 사용 - 브라우저에서 직접 import 문을 사용하여 모듈을 로드 할 수 있음
🍫 사용 목적
- 복잡한 빌드 과정 없이도 최신 JavaScript 모듈을 쉽게 사용할 수 있음
- 프로토타이핑, 작은 프로젝트에서 유용
🍴 Virtual DOM
: 실제 DOM의 가벼운 복사본, React의 성능 최적화 전략의 중요한 부분.
- 실제 DOM 요소와 속성을 가진 객체의 트리 구조
🍫 작동 방식
- 상태 변경 시 React는 새로운 Virtual DOM 트리 생성
- 이전 Virtual DOM과 새로운 Virtual DOM 비교
- 차이점만 실제 DOM에 적용
🍴 Reactivity
'회고 > Techit Frontend School 10기' 카테고리의 다른 글
[멋쟁이 사자처럼 프론트엔드 스쿨] 61일차 TIL - Vite 환경 구성 (0) | 2024.08.03 |
---|---|
[멋쟁이 사자처럼 프론트엔드 스쿨] 60일차 TIL - React Component, props, createElement, JSX(w. Babel, TypeScript) (0) | 2024.07.28 |
[멋쟁이 사자처럼 프론트엔드 스쿨] 바닐라 프로젝트 7일차 (0) | 2024.07.11 |
[멋쟁이 사자처럼 프론트엔드 스쿨] 43일차 TIL - Vite, 개발자 서버/클라이언트 서버, 정적/동적 자산 관리, DocumentFragment (0) | 2024.07.01 |
[멋쟁이 사자처럼 프론트엔드 스쿨] 42일차 TIL - localStorage, sessionStorage (0) | 2024.06.30 |