본문 바로가기

verdantjuly/Today I Learned

TIL 20241024

728x90

이번 주 목표  Weekly Plan

짧은 산책 기획

수업

오늘 목표  Daily Plan

수업 듣기 

오늘 한 것  Done Today

수업 듣기 

 

1. http.createServer()

const http = require("http"); // commonjs import 방식

// req : HTTPRequest 객체
// res : HTTPResponse 객체
const server = http.createServer((req, res) => {
  res.statusCode = 200;
  res.setHeader("Content-Type", "text/plain"); // client에 제공해 줄 컨텐트 데이터 타입은 text
  res.write("Hello World");
  res.end();
});

// http 80, https 443일 경우에는 생략
server.listen(4500);

2. 서버 버전 보기

ver. 2.1.0

첫 번째 자리 : 메이저

두 번째 자리 : 마이너

번째 자리 : 패치

 

3. module.exports

const add = (a, b) => {
  return a + b;
};
const substract = (a, b) => {
  return a - b;
};

module.exports.substract = substract;
module.exports.add = add;

 

4. fs

const fs = require("fs");
fs.readFile("hello.txt", "utf-8", (err, data) => {
  if (err) {
    console.log(err);
  }
  console.log(`data : ${data}`);
});

 

 

5. readFileSync

const fs = require("fs");
fs.readFile("hello.txt", "utf-8", (err, data) => {
  if (err) {
    console.log(err);
  }
  console.log(`data : ${data}`);
});

// 가독성 때문에 readFileSync로 쓰면 좋다.
try {
  const data = fs.readFileSync("hello.txt", "utf-8");
  console.log(`readFileSync data : ${data}`);
} catch (err) {
} finally {
}

 

 

6. writeFileSync

const fs = require("fs");
const content = `안녕하세요
홍길동입니다. 오늘은 날씨가 
참 좋아요 열두시 사십오분에
밥먹으러 가요
`;

// 1. 파일명 2. 내용 3. 에러 콜백 함수
fs.writeFile("out.txt", content, (err) => {
  console.log(err);
});

try {
  fs.writeFileSync("out2.txt", content);
} catch (err) {
  console.log(err);
}

 

 

7. readDirSync

const fs = require("fs");

const dirName = "naver/daum/google";

// recursive : parent 폴더 생성 여부
fs.mkdirSync(dirName, { recursive: true });

const content = `안녕하세요 네이버
구글 
다음 중에 하나에 입사하고 싶어용`;

// 문제
// naver/daum/google/out.txt 에 content를 넣어 주세요
try {
  const isDirExist = fs.readdirSync(dirName);
  if (isDirExist) {
    console.log("디렉터리가 존재합니다.");
  }
  const fileName = "out.txt";
  fs.readFile(dirName + "/" + fileName, (err, data) => {
    if (err && err.message.includes("ENOENT")) {
      console.log("파일이 존재하지 않습니다. 파일을 새로 씁니다.");
    }
    if (data) {
      console.log("파일이 존재합니다. 파일을 덮어씁니다.");
    }
  });
  fs.writeFile(dirName + "/" + fileName, content, (err) => {
    if (!err) {
      console.log("파일 작성이 완료되었습니다.");
    }
  });
} catch (err) {
  console.log(`에러 발생 : ${err}`);
} finally {
}

 

 

8. child_process

const { exec } = require("child_process");
const cmd = "ls -la";
exec(cmd, (err, stdout, stderr) => {
  if (err) {
    console.log(`에러 발생 : ${err}`);
  }
  console.log(stdout);
});

 

9. path.parse()와 fs.existsSync

const fs = require("fs");
const path = require("path");

const newFilePath = path.join(__dirname, "a3", "b3", "c3", "d3.txt");
console.log(newFilePath);
console.log(path.parse(newFilePath).dir); // path를 파싱해서 dir까지만
console.log(path.parse(newFilePath).base); // full path

const makeFile = (filepath, content) => {
  const fileName = path.parse(filepath).base;
  const dirPath = path.parse(filepath).dir;
  const isDirExist = fs.existsSync(dirPath);
  if (!isDirExist) {
    console.log("디렉터리가 존재하지 않습니다. 디렉터리를 생성합니다.");
    fs.mkdirSync(dirPath, { recursive: true });
  }
  if (fileName.includes(".")) {
    fs.writeFileSync(filepath, content);
  }
};

makeFile(newFilePath, "새로운 파일이 생성되었습니다.");

 

10. os 모듈

const os = require("os");

console.log(`Platform : ${os.platform()}`);
console.log(`Architecture : ${os.arch()}`);
console.log(`CPU : ${os.cpus().length}`);
console.log(`Total Memory : ${os.totalmem() / 1024 / 1024 / 1024} GB`);

 

11. json

{
  "data": [
    {
      "title": "첫 번째 제목",
      "content": "내용입니다. 오늘 저녁은 뭐 먹을까요? ",
      "author": "홍길동",
      "createdAt": "2024-10-24"
    },
    {
      "title": "두 번째 제목",
      "content": "내용입니다. 오늘 저녁은 뭐 먹을까요? ",
      "author": "홍길동",
      "createdAt": "2024-10-24"
    },
    {
      "title": "세 번째 제목",
      "content": "내용입니다. 오늘 저녁은 뭐 먹을까요? ",
      "author": "홍길동",
      "createdAt": "2024-10-24"
    },
    {
      "title": "네 번째 제목",
      "content": "내용입니다. 오늘 저녁은 뭐 먹을까요? ",
      "author": "홍길동",
      "createdAt": "2024-10-24"
    },
    {
      "title": "다섯 번째 제목",
      "content": "내용입니다. 오늘 저녁은 뭐 먹을까요? ",
      "author": "홍길동",
      "createdAt": "2024-10-24"
    },
    {
      "title": "여섯 번째 제목",
      "content": "내용입니다. 오늘 저녁은 뭐 먹을까요? ",
      "author": "홍길동",
      "createdAt": "2024-10-24"
    },
    {
      "title": "일곱 번째 제목",
      "content": "내용입니다. 오늘 저녁은 뭐 먹을까요? ",
      "author": "홍길동",
      "createdAt": "2024-10-24"
    },
    {
      "title": "여덟 번째 제목",
      "content": "내용입니다. 오늘 저녁은 뭐 먹을까요? ",
      "author": "홍길동",
      "createdAt": "2024-10-24"
    },

    {
      "title": "아홉 번째 제목",
      "content": "내용입니다. 오늘 저녁은 뭐 먹을까요? ",
      "author": "홍길동",
      "createdAt": "2024-10-24"
    },
    {
      "title": "열 번째 제목",
      "content": "내용입니다. 오늘 저녁은 뭐 먹을까요? ",
      "author": "홍길동",
      "createdAt": "2024-10-24"
    }
  ]
}

 

12. JSON.parse()

const fs = require("fs");
const result = fs.readFileSync("test.json");
const { data } = JSON.parse(result);

data.forEach((post) => {
  console.log(`제목 : ${post.title}`);
  console.log(`내용 : ${post.content}`);
});

 

13. map의 특성

map은 빈 값은 iterate 하지 않는다. 

 

14. 배열 순회하여 json 만들기

const { makeFile } = require("./ch03_07");
const count = 10;

let posts = Array.from({ length: count }, (v, index) => {
  return {
    title: `${index}번째 제목`,
    content: `${index}번째 내용입니다.`,
    author: `${index}번째 저자`,
  };
});

console.log(posts);
const data = { data: posts };
const result = JSON.stringify(data);
makeFile("test2.json", result);

 

15. json 게시판 만들기

const http = require("http");
const url = require("url");
const fs = require("fs");
http
  .createServer((req, res) => {
    const path = url.parse(req.url, true).pathname;
    if (path == "/json") {
      res.setHeader("Content-Type", "application/json;charset=UTF-8");
      const data = {
        name: "lee",
        age: 40,
        address: "서울시 양천구 신림동",
      };
      const result = JSON.stringify(data);
      res.end(result);
    } else if (path == "/test") {
      res.setHeader("Content-Type", "application/json;charset=UTF-8");
      const fileName = "test2.json";
      const fileData = fs.readFileSync(fileName, "utf-8");
      res.end(fileData);
    }
  })
  .listen(4500);

KPT

Keep

착실히 수업을 듣고 있다

Problem

수업 외에 다른 것을 못하고 있다

Try

더 열심히 하기 

소감  Diary

예전보다 몰입도가 떨어진 것 같다 

 

 

 

 

'verdantjuly > Today I Learned' 카테고리의 다른 글

TIL 20241031  (1) 2024.10.31
TIL 20241025  (0) 2024.10.31
TIL 20241023  (5) 2024.10.23
TIL 20241022  (1) 2024.10.22
TIL 20241021  (0) 2024.10.21