더북(TheBook)

3.6 파일 시스템 접근하기

fs 모듈은 파일 시스템에 접근하는 모듈입니다. 즉, 파일을 생성하거나 삭제하고, 읽거나 쓸 수 있습니다. 또한, 폴더도 만들거나 지울 수 있습니다. 웹 브라우저에서 자바스크립트를 사용할 때는 일부를 제외하고는 파일 시스템 접근이 금지되어 있으므로 노드의 fs 모듈이 낯설 것입니다.

간단한 예제를 통해 fs 모듈의 사용 방법을 알아보겠습니다. readme.txt와 readFile.js를 만들고 readFile.js를 실행합니다.

readme.txt

저를 읽어주세요.

readFile.js

const fs = require('fs');

fs.readFile('./readme.txt', (err, data) => {
  if (err) {
    throw err;
  }
  console.log(data);
  console.log(data.toString());
});

fs 모듈을 불러온 뒤 읽을 파일의 경로를 지정합니다. 여기서는 파일의 경로가 현재 파일 기준이 아니라 node 명령어를 실행하는 콘솔 기준이라는 점에 유의해야 합니다. 지금은 크게 상관없으나 폴더 내부에 들어 있는 파일을 실행할 때 경로 문제가 발생할 수 있습니다. 만약 C:\ 디렉터리에서 node folder/file.js를 실행하면 C: older eadme.txt가 실행되는 게 아니라 C: eadme.txt가 실행됩니다.

파일을 읽은 후에 실행될 콜백 함수도 readFile 메서드의 인수로 같이 넣습니다. 이 콜백 함수의 매개변수로 에러 또는 데이터를 받습니다. 파일을 읽다가 무슨 문제가 생겼다면 에러가 발생할 것이고, 정상적으로 읽었다면 다음과 같이 콘솔에 결과가 나올 것입니다.

콘솔

$ node readFile
<Buffer ec a0 80 eb a5 bc 20 ec 9d bd ec 96 b4 ec a3 bc ec 84 b8 ec 9a 94 2e>
저를 읽어주세요.

console.log(data)를 했더니 Buffer라는 이상한 것이 출력됩니다. 그래서 datatoString()을 붙여서 로그를 찍었더니 제대로 문자열이 출력됩니다. readFile의 결과물은 버퍼(buffer)라는 형식으로 제공됩니다. 지금은 단순히 버퍼를 메모리의 데이터라고 생각하면 됩니다. 이에 대한 내용은 3.6.2절에서 자세히 설명합니다. 버퍼는 사람이 읽을 수 있는 형식이 아니므로 toString을 사용해 문자열로 변환했습니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.