🔎 SPA(Single Page Application)이란?
단일 페이지로 구성된 웹 애플리케이션
history.pushState(브라우저 히스토리에 저장할 데이터, 타이틀(빈문자열), 변경할 url);
history.pushState({ page: page, custom: "test" }, "", 'page');
popstatewindow.addEventListener("popstate", function (e) {
const page = e.state?.page || "home;
document.getElementById("page").innerHTML = pages[page];
});
history.back() // 한 단계 뒤로 이동
history.forward() // 한 단계 앞으로 이동
history.go(숫자) // 음수는 back, 양수는 forward (원하는 스텝 숫자)
🔎 REPL이란?
Node.js에서 제공하는 JavaScript 코드를 즉시 실행하고 결과를 확인할 수 있는 환경
node 명령어 입력.exit 명령어 입력node 파일명.jsnode 파일명.js 다음으로 인수를 함께 입력 (띄어쓰기로 구분)process.argv로 확인 가능process.argv는 [node, 파일명.js, 인수1, ...] 형식process.argv.slice(2)로 사용node app.js arg1 arg2 arg3
process.argv는 다음과 같음
[ 'node', 'app.js', 'arg1', 'arg2', 'arg3' ]
Node.js에는 기본 내장 모듈이 존재한다.
🔎 모듈이란?
모듈은 관련된 코드와 기능을 그룹화하여 재사용성을 높이고, 코드의 가독성과 관리성을 향상시키기 위해 사용됨. Node.js에서는 모듈을 통해 여러 파일로 코드를 나눌 수 있음.
- 미리 만들어둔 함수들의 집합
- 독립된 기능을 갖는 함수 또는 파일들의 모임
- 모든 모듈은 독립된 스코프 소유
// fs : 파일 시스템 관련 작업을 하는 내장 모듈
// require : 내장 모듈 호출
const fs = require('fs');
// readFile : 비동기적으로 파일 읽어오는 함수
fs.readFile('example.txt', 'utf8', (err, data) => {
if (err) {
console.log(err);
return;
}
console.log(data);
});
// promises : fs 모듈의 Promise 버전
// 콜백 함수 대신, Promise를 반환하는 메서드 사용 가능
const fs = require('fs').promises;
// async await 사용으로 깔끔한 비동기 코드 작성
async function readFileAsync() { // Promise 반환
try {
// await를 통해 Promise가 해결될 때까지 대기
// fs.promises.readFile : Promise 반환
const data = await fs.readFile('example.txt', 'utf8');
console.log(data);
} catch (err) {
console.error(err);
}
}
readFileAsync();
첫번째 코드는 일반 fs 사용은 콜백 기반 비동기 함수를 제공하는 것.
두번째 코드는 Promise 기반의 비동기 함수를 제공하는 것이다.
const fs = require("fs");
const content = fs.readFileSync(filePath, "utf-8");
동기적으로도 읽을 수 있다.
const path = require("path");
const filePath = path.resolve(file);
module.exports로 기능을 외부로 내보냄// math.js
const add = (a, b) => a + b;
const subtract = (a, b) => a - b;
module.exports = {
add,
subtract
};
require() 함수를 사용해 모듈 가져옴// app.js
const math = require('./math');
const sum = math.add(5, 3);
const difference = math.subtract(5, 3);
const fs = require('fs')
const path = require('path')
const math = require('./math')
Node.js에서 npm을 사용하여 패키지 생성 가능
npm init으로 package.json 파일 생성mkdir greet-module
cd greet-module
npm init -y
// index.js
const greet = (name) => `Hello, ${name}!`;
module.exports = greet;
npm login 명령어) -> 조직 생성npm whoami조직_이름/모듈_이름로 변경npm publish --access public 명령어로 패키지 배포npm install 배포한_이름
const greet = require('@minhadev/greet-module');
console.log(greet('Alice')); // hello, Alice!
global : 전역 객체console : 출력 및 디버깅 도구setTimeout : 일정 시간 후 1회 실행clearTimeout : 타이머 취소setInterval : 일정 시간마다 반복 실행clearInterval : 반복 중지setImmediate : 이벤트 루프의 현재 작업이 끝난 직후 실행__filename : 현재 파일의 절대 경로__dirname : 현재 파일의 디렉터리 경로__filename과 함께 파일 경로 조작에 사용module : 현재 모듈 객체exports : 모듈 내보내기 객체module.exports = { ... } : module(현재 파일/모듈에 대한 정보를 담고있는 객체)를 exports(내보낸다)require : 모듈 가져오기process : 현재 실행 중인 Node.js 프로세스 관련 정보 제공 및 제어process.env : 환경 변수 접근process.exit : 프로세스 종료process.env : 환경 변수 접근process.cwd : 현재 작업 디렉터리process.platform : 운영체제 확인process.nextTick() : 현재 이벤트 루프가 끝난 후 실행process.exit() : 프로세스 종료os : 운영 체제 관련 정보 제공path : 파일 및 디렉터리 경로를 조작하는 유틸리티url : URL 문자열을 파싱하고 조작https://ex.com/path?name=Jay#fragment)를 쉽게 추출querystring : 쿼리 문자열을 파싱하고 조작?name=Jay&age=20)를 처리할 때 유용crypto : 암호화와 해싱 기능 제공util : 다양한 유틸리티 함수와 메서드 제공Promise로 변환할 때 유용worker_threads : Node.js 애플리케이션에 멀티스레딩 기능 추가child_process : 자식 프로세스를 생성하고 외부 명령 실행