Node.js에서 비동기 파일 읽기는 어떻게 하나요?
_____A: Node.js에서는 기본 내장 모듈인 `fs`(File System) 모듈을 사용하여 비동기 파일 읽기를 할 수 있습니다. 가장 대표적인 방법은 `fs.readFile` 메서드를 사용하는 것이며, 콜백 함수 또는 프로미스(Promise)를 이용해 비동기 처리를 합니다.
---
Q: `fs.readFile` 함수는 어떻게 사용하나요?
A: `fs.readFile` 함수는 세 가지 인자를 받습니다: 파일 경로, 인코딩(선택적), 그리고 콜백 함수입니다. 콜백 함수의 첫번째 인자는 에러 객체, 두번째 인자는 읽어온 데이터입니다.
예시:
```js
const fs = require('fs');
fs.readFile('example.txt', 'utf8', (err, data) => {
if (err) {
console.error('파일 읽기 실패:', err);
return;
}
console.log('파일 내용:', data);
});
```
---
Q: 프로미스를 사용해서 비동기 파일 읽기를 하고 싶어요. 어떻게 해야 하나요?
A: Node.js 10 이상부터 `fs.promises`를 통해 프로미스 기반 API를 사용할 수 있습니다. 또는 `util` 모듈의 `promisify` 함수를 이용해서 콜백 기반 API를 프로미스화 할 수도 있습니다.
프로미스 사용 예:
```js
const fs = require('fs').promises;
async function readFileAsync() {
try {
const data = await fs.readFile('example.txt', 'utf8');
console.log('파일 내용:', data);
} catch (err) {
console.error('파일 읽기 실패:', err);
}
}
readFileAsync();
---
Q: 대용량 파일을 스트리밍으로 비동기 읽기 할 수 있나요?
A: 네, `fs.createReadStream` 메서드를 사용해서 스트림 방식으로 데이터를 처리할 수 있습니다. 스트림은 파일을 작은 청크 단위로 읽어 효율적으로 메모리 사용이 가능합니다.
예시:
```js
const fs = require('fs');
const stream = fs.createReadStream('large-file.txt', { encoding: 'utf8' });
stream.on('data', chunk => {
console.log('읽은 청크:', chunk);
});
stream.on('error', err => {
console.error('스트림 에러:', err);
});
stream.on('end', () => {
console.log('파일 읽기 완료');
});
```
---
Q: 파일 인코딩을 지정하지 않으면 어떻게 되나요?
A: `fs.readFile`이나 스트림에서 인코딩을 지정하지 않으면 기본적으로 버퍼(Buffer) 형태로 데이터를 반환합니다. 문자열로 처리하고 싶으면 `'utf8'` 같은 인코딩을 명시해야 합니다.
---
Q: 요약해주세요
A:
- `fs.readFile(path, encoding, callback)` : 콜백 기반 비동기 읽기
- `fs.promises.readFile(path, encoding)` : 프로미스 기반 비동기 읽기 (async/await 사용 가능)
- `fs.createReadStream(path, options)` : 스트림 기반 대용량 파일 비동기 읽기
- 인코딩 지정 시 문자열, 미지정 시 버퍼로 데이터 반환
이 방법들을 상황에 따라 적절히 사용하면 Node.js에서 효율적으로 비동기 파일 읽기를 구현할 수 있습니다.
작성자:
정수빈 [비회원]
| 작성일자: 1년 전
2024-09-12 16:03:43
조회수: 140 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
조회수: 140 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.