2022 OSAM 해커톤 사전 온라인 교육에서 배운 내용입니다.
모르는 내용만 발췌하여 정리한 것이기 때문에 내용의 연결성이 부족한 점 양해 부탁드립니다.
// function.js
function helloWorld() {
console.log("Hello World");
}
module.exports = {
sayHelloWorld: HelloWorld;
};
// hello.js
const { sayHelloWorld } = require("./function.js");
sayHelloWorld();
.mjs
확장자 사용// function.mjs
export function helloWorld() {
console.log("Hello World");
}
// hello.mjs
import { helloWorld } from "./function.mjs";
helloWorld();
package.json
에 명시 (.mjs
를 안 쓸 수 있다)// package.json
{
"type": "module"
}
// function.js
export function helloWorld() {
console.log("Hello World");
}
// hello.js
import { helloWorld } from "./function.mjs";
helloWorld();
fs
(File System API)const fs = require("fs");
const content = "Hello World";
fs.writeFile("./hello.txt", content, (err) => {
if (err) {
console.error(err);
return;
}
fs.readFile("./hello.txt", "utf8", (err, data) => {
if (err) {
console.error(err);
return;
}
console.log(data);
});
});
const fs = require("fs");
const content = "Hello World";
try {
fs.writeFileSync("./hello.txt", content);
} catch (err) {
console.error(err);
return;
}
try {
const data = fs.readFileSync("./hello.txt", "utf8");
console.log(data);
} catch (err) {
console.error(err);
return;
}
const fs = require("fs/promises");
const content = "Hello World";
async function helloWorld() {
try {
await fs.writeFile("./hello.txt", content);
const data = await fs.readFile("./hello.txt", {encoding: "utf8"});
console.log(data);
} catch (err) {
console.log(err);
}
}
cross-env
모듈을 활용한 환경변수 사용npm install cross-env
// package.json
{
"scripts": {
// 여기서 fs는 스크립트명. 명령어를 작성한다.
"fs": "cross-env FILE_PATH=./hello.txt node fs.js
},
"dependencies": {
"cross-env": "^7.0.3"
}
}
// fs.js
// ./hello.txt를 process.env.FILE_PATH로 변경한다.
node fs.js # (X)
npm run fs # (O) package.json에서 fs라는 스크립트를 찾아 실행한다.
npm
명령어npm init
: package.json 생성npm install [package][@version]
npm run [scripts]
: package.json의 scripts에서 탐색하여 스크립트 실행npm start
(=npm run start) : scripts에 start가 없다면 node server.jsnpm restart
: npm stop && npm start// package.json
{
"scripts": {
// 여기서 fs는 스크립트명. 명령어를 작성한다.
"fs": "cross-env FILE_PATH=./hello.txt node fs.js,
"debug": "cross-env FILE_PATH=./hello.txt node --inspect-brk fs.js
},
"dependencies": {
"cross-env": "^7.0.3"
}
}
// fs.js
debugger; // 원하는 중단점에 입력
{
"version": "0.2.8",
"configuration": [
{
"name": "Launch via NPM",
"request": "launch",
"runtimeArgs": ["run-script", "fs"] // debug -> fs
"runtimeExecutable": "npm",
...
}
]
}
과거 Tomcat은 Multi Thread(using thread pool)을 사용하였다. 그러나,
Node.js는 Single Thread에다가 Async & Non-blocking I/O를 함으로써, 불필요한 컨텍스트 스위칭도 없고 쉬는 시간도 없는 효율적인 서버 구축을 가능하도록 함.
Node.js 이벤트 루프(Event Loop) 샅샅이 분석하기
👩💻 동기&비동기 / 블로킹&논블로킹 💯 완벽 이해하기