>  기사  >  웹 프론트엔드  >  파일 시스템: Node.js `fs` 모듈

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

WBOY
WBOY원래의
2024-08-24 15:01:33336검색

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. 파일 삭제

파일을 삭제하려면 unlink 메소드를 사용하세요.

비동기 삭제

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 문서를 참조하세요.

위 내용은 파일 시스템: Node.js `fs` 모듈의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.