3-2. 파일 시스템 접근하기

fs 모듈 기초

fs는 파일 시스템에 접근할 수 있는 모듈이다. 파일 생성, 삭제, 읽기, 쓰기 등을 할 수 있다.
기초적인 사용법은 아래와 같다.

파일 읽기파일 쓰기
동기 방식fs.readFileSync()fs.writeFileSync()
비동기 방식fs.readFile()fs.writeFile()

WARNING

콘솔에서 fs를 사용하는 파일을 실행할 경우, 상대경로를 사용한다면 현재 콘솔 경로를 기준으로 경로를 탐색한다.

기존 방식

const fs = require('fs');

fs.readFile('./readme.txt', (err, data) => {
    console.log(data); // Buffer가 출력됨
    console.log(data.toString()) // 원하는 문자열이 출력됨
});

Promise 방식 (.promises)

const fs = require('fs').promises;

fs.readFile('./readme.txt')
.then((data) => {
    console.log(data);
    console.log(data.toString());
});

버퍼 & 스트림

버퍼

전송할 데이터를 일시적으로 저장해놓는 메모리 공간이다.
데이터의 크기만큼 메모리에 버퍼를 지정해주고 꽉 찼을 때 한번에 데이터를 전송한다.
이렇게 데이터를 모아서 보내면 API 호출 횟수를 줄여주므로 입출력 성능을 개선해준다.
buffer

유튜브 영상을 보면 미리 로딩되어 있는걸 볼 수 있는데 이것이 버퍼다.
buffer-example

스트림

버퍼크기를 작게 만들어 여러번에 걸쳐서 보내는 통로라고 생각하면 된다.
기존의 버퍼는 데이터의 크기만큼 메모리를 사용했지만,
스트림을 이용하면 버퍼를 크기를 줄이고 여러번에 걸쳐 지속적으로 버퍼를 전송해주는 작업을 해준다. 스트림을 통해 데이터를 나눠서 보냄으로써 메모리의 부담을 덜어준다.
stream

기타 fs 메서드들

파일 접근, 이동, 생성

메서드명설명
fs.access(경로, 옵션, 콜백)폴더나 파일에 접근할 수 있는지 체크함.
F_OK, R_OK, W_OK로 리턴됨.
에러는 ENOENT 리턴
fs.mkdir(경로, 콜백)폴더를 만들어 줌
fs.open(경로, 옵션, 콜백)파일의 아이디를 가져옴
파일이 없다면 생성한 뒤 가져옴
넣을 수 있는 옵션 : w, r, a
(write, read, add)
fs.rename(기존경로, 새경로, 콜백)파일의 이름과 위치를 바꿔줄 수 있음

폴더 내용 확인 및 삭제

메서드명설명
fs.readdir(경로, 콜백)폴더 안의 내용물을 확인
fs.unlink(경로, 콜백)파일을 지워줌
fs.rmdir(경로, 콜백)폴더를 지워줌

파일 복사 및 파일/폴더의 변경사항 감시

메서드명설명
fs.copyFile(복사할 파일, 복사될 경로, 콜백)파일을 복사함
fs.watch(경로, 콜백)파일 변경 시 콜백 실행
Last Updated: