"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > 파일 시스템: Node.js `fs` 모듈

파일 시스템: Node.js `fs` 모듈

2024-08-29에 게시됨
검색:690

File System: Node.js `fs` Module

Node.js의 fs(파일 시스템) 모듈은 파일 시스템 작업을 위한 강력한 도구로, 서버의 파일 및 디렉터리와 상호 작용할 수 있습니다. Node.js에 내장되어 있으므로 사용하기 위해 추가로 설치할 필요가 없습니다. fs의 작동 방식과 주요 기능을 살펴보겠습니다.

1. fs 모듈이란 무엇입니까?

fs 모듈은 표준 POSIX 기능을 중심으로 밀접하게 모델링된 방식으로 파일 시스템과 상호 작용하기 위한 API를 제공합니다. 이 모듈은 파일 읽기 및 쓰기, 디렉터리 생성 등과 같은 작업에 사용됩니다.

2. 기본 설정

fs 모듈을 사용하려면 Node.js 스크립트 시작 부분에 이를 요구해야 합니다:

const fs = require('fs');

3. 파일 읽기

파일을 읽는 기본 방법에는 비동기식과 동기식의 두 가지가 있습니다.

비동기식 읽기

이 방법은 비차단 방식입니다. 즉, 파일을 읽는 동안 프로그램 실행이 중단되지 않습니다.

fs.readFile('example.txt', 'utf8', (err, data) => {
    if (err) {
        console.error(err);
        return;
    }
    console.log(data);
});
  • 'example.txt': 읽고 싶은 파일입니다.
  • 'utf8': 사용할 인코딩을 지정합니다.
  • 콜백 함수: 오류 및 파일 데이터를 처리합니다.

동기식 읽기

이 메서드는 차단됩니다. 즉, 파일을 읽을 때까지 프로그램 실행이 중지됩니다.

try {
    const data = fs.readFileSync('example.txt', 'utf8');
    console.log(data);
} catch (err) {
    console.error(err);
}

4. 파일 쓰기

파일 읽기와 마찬가지로 쓰기도 비동기식 또는 동기식으로 수행할 수 있습니다.

비동기 쓰기

fs.writeFile('example.txt', 'Hello, World!', (err) => {
    if (err) {
        console.error(err);
        return;
    }
    console.log('File has been saved!');
});

동기식 쓰기

try {
    fs.writeFileSync('example.txt', 'Hello, World!');
    console.log('File has been saved!');
} catch (err) {
    console.error(err);
}

5. 파일에 추가

기존 파일을 덮어쓰지 않고 콘텐츠를 추가하려면,appendFile 메소드를 사용하세요.

비동기 추가

fs.appendFile('example.txt', '\nAppended Content', (err) => {
    if (err) {
        console.error(err);
        return;
    }
    console.log('Content has been appended!');
});

동기식 추가

try {
    fs.appendFileSync('example.txt', '\nAppended Content');
    console.log('Content has been appended!');
} catch (err) {
    console.error(err);
}

6. 파일 삭제

파일을 삭제하려면 연결 해제 방법을 사용하세요.

비동기 삭제

fs.unlink('example.txt', (err) => {
    if (err) {
        console.error(err);
        return;
    }
    console.log('File deleted!');
});

동기 삭제

try {
    fs.unlinkSync('example.txt');
    console.log('File deleted!');
} catch (err) {
    console.error(err);
}

7. 디렉토리 작업

디렉토리 생성

fs.mkdir('newDir', { recursive: true }, (err) => {
    if (err) {
        console.error(err);
        return;
    }
    console.log('Directory created!');
});

디렉토리 읽기

fs.readdir('newDir', (err, files) => {
    if (err) {
        console.error(err);
        return;
    }
    console.log('Files in directory:', files);
});

디렉토리 삭제

fs.rmdir('newDir', { recursive: true }, (err) => {
    if (err) {
        console.error(err);
        return;
    }
    console.log('Directory deleted!');
});

8. 파일 보기

fs.watch 메소드를 사용하여 파일의 변경 사항을 감시할 수 있습니다.

fs.watch('example.txt', (eventType, filename) => {
    if (filename) {
        console.log(`${filename} file Changed!`);
    }
});

9. 스트림 작업

Node.js는 메모리에 맞지 않을 수 있는 대용량 파일을 처리하기 위한 fs 스트림을 제공합니다.

스트림으로 읽기

const readStream = fs.createReadStream('example.txt', 'utf8');
readStream.on('data', (chunk) => {
    console.log(chunk);
});

스트림으로 작성

const writeStream = fs.createWriteStream('example.txt');
writeStream.write('Hello, ');
writeStream.write('World!');
writeStream.end();

10. 파일 복사

Node.js는 파일을 복사하는 간단한 방법을 제공합니다.

fs.copyFile('source.txt', 'destination.txt', (err) => {
    if (err) {
        console.error(err);
        return;
    }
    console.log('File copied successfully!');
});

11. 약속된 fs

fs 모듈에는 약속 기반 메서드도 있어 async/await와 같은 최신 JavaScript 기능을 더 쉽게 사용할 수 있습니다.

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

async function readFile() {
    try {
        const data = await fsPromises.readFile('example.txt', 'utf8');
        console.log(data);
    } catch (err) {
        console.error(err);
    }
}

readFile();

12. 실제 사용 사례

  • 구성 파일: 설정을 저장하기 위한 구성 파일(예: JSON 파일)을 읽거나 씁니다.
  • 로그 파일: 애플리케이션 이벤트를 추적하기 위해 로그 파일에 추가합니다.
  • 파일 업로드: 업로드된 파일을 저장하고 검색합니다.
  • 데이터 처리: 스트림을 사용하여 대규모 데이터 세트를 효율적으로 읽고 처리하고 작성합니다.

13. 오류 처리 및 모범 사례

  • 항상 콜백 함수의 오류를 처리하거나 동기 코드와 함께 try-catch 블록을 사용하세요.
  • 대부분의 경우 더 나은 성능을 위해 비동기식 방법을 사용합니다.
  • 보다 깔끔하고 현대적인 코드를 위해 fs.promises 사용을 고려해보세요.
  • 동기식 메서드는 이벤트 루프를 차단할 수 있으므로 주의하세요.
  • 파일 시스템 플래그에는 fs.constants를 사용하세요(예: 읽기 전용 액세스의 경우 fs.constants.O_RDONLY).

14. 보안 고려사항

  • 디렉터리 순회 공격을 방지하기 위해 파일 경로를 검증하고 삭제합니다.
  • 사용자가 제공한 파일 이름이나 경로로 작업할 때는 주의하세요.
  • 파일 및 디렉터리를 생성하거나 수정할 때 적절한 파일 권한을 사용하십시오.

15. 결론

fs 모듈은 다재다능하며 파일 시스템과 상호 작용해야 하는 모든 Node.js 애플리케이션에 필수적입니다. 다양한 방법을 이해하고 스트림을 효율적으로 처리하며 모범 사례를 활용함으로써 Node.js에서 파일 작업을 효과적이고 안전하게 관리할 수 있는 준비를 갖추게 됩니다.

fs 모듈의 최신 정보와 추가 기능에 대해서는 공식 Node.js 문서를 참조하세요.

릴리스 선언문 이 글은 https://dev.to/shanu001x/file-system-nodejs-fs-module-1hg6?1에서 복제되었습니다.1 침해 내용이 있는 경우, [email protected]으로 연락하여 삭제하시기 바랍니다.
최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3