• [Node.js] fs(파일 시스템) 사용하기

    2023. 4. 11.

    by. 지은이: 김지은

    728x90

     

    File System

    파일 시스템에 접근하는 모듈로 파일을 생성, 삭제, 읽기, 쓰기가 가능하다.

    따라서 파일 시스템 접근 시 보안에 신경써야 한다.

    const fs = require('fs');

     

    파일 읽기

    const fs = require("fs");
    
    fs.readFile("./readme.txt", (err, data) => { // Node 콜백은 항상 err와 data 순서
      if (err) {
        throw err;
      }
      console.log(data.toString());
    });

    readFile()메서드를 이용해 파일을 읽을 수 있다.

    첫번째 인자에 파일 경로, 두번째 인자에 콜백함수를 갖는다. 

     

    toString()을 해주는 이유는 Buffer 형태로 출력되기 때문

     

    위 코드는 콜백함수이지만, promises 속성으로 .then 키워드 사용이 가능하다.

    const fs = require("fs").promises;
    
    fs.readFile("./readme.txt")
      .then((data) => {
        console.log(data.toString());
      })
      .catch((err) => {
        throw err;
      });

     

    파일 쓰기

    const fs = require("fs").promises;
    
    fs.writeFile("./writeme.txt", "글 입력하기")
      .then(() => {})
      .catch((err) => {
        throw err;
      });

    writeFile() 메서드를 이용해서 파일을 생성 후 쓰기가 가능하다.

    첫번째 인자로 파일명, 두번째 인자로 data를 넣어주면 해당 데이터의 파일이 생성된다.

     

    동기와 비동기

    callback, promise는 비동기방식(작업이 끝날 때 까지 기다리지 않고 다른 작업 수행) 이기 때문에 순서대로 실행이 되지 않지만,

    fs는 동기 메서드를 지원하기 때문에 순서대로 실행이 가능하다.

    const fs = require("fs");
    
    let data = fs.readFileSync("./readme.txt");
    console.log("1번", data.toString());
    data = fs.readFileSync("./readme.txt");
    console.log("2번", data.toString());
    data = fs.readFileSync("./readme.txt");
    console.log("3번", data.toString());

    readFile뒤에 Sync를 붙여주면 동기적으로 실행이 되어 순서대로 파일을 읽을 수 있다. (하지만 처리할 게 많을 수록 비효율적)

     

    예외 처리

    노드는 싱글스레드라 스레드가 멈추면 프로세스가 멈추기 때문에 에러처리가 필수!

    동기함수는 에러가 발생할 만한 곳에 try catch문으로 감싸고, 비동기 함수는 콜백함수의 매개변수로 에러를 전달한다.

     

     

    댓글