🔎 SPA(Single Page Application)이란?
단일 페이지로 구성된 웹 애플리케이션
history.pushState(브라우저 히스토리에 저장할 데이터, 타이틀(빈문자열), 변경할 url);
history.pushState({ page: page, custom: "test" }, "", 'page');
popstate
window.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 파일명.js
node 파일명.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
: 자식 프로세스를 생성하고 외부 명령 실행