[typescript] async/await를 사용하여 파일 시스템 작업 처리 방법
파일 시스템을 다루는 작업은 대개 시간이 오래 걸리는 비동기 작업에 해당합니다. Typescript에서는 이러한 작업을 쉽게 다룰 수 있도록 async
와 await
키워드를 제공합니다. 이 튜토리얼에서는 Typescript의 async
/await
를 사용하여 파일 시스템 작업을 어떻게 다루는지 살펴볼 것입니다.
1. fs.promises
모듈 사용
Node.js 파일 시스템 모듈인 fs
에는 fs.promises
모듈이 있습니다. 이 모듈을 사용하면 파일 시스템 작업을 Promise 기반으로 처리할 수 있습니다. 아래는 fs.promises
모듈을 사용하여 파일을 읽고 쓰는 예제입니다.
파일 읽기
import * as fs from 'fs';
async function readFile(filePath: string): Promise<string> {
try {
return await fs.promises.readFile(filePath, 'utf-8');
} catch (error) {
console.error('파일을 읽을 수 없습니다:', error);
throw error;
}
}
// 사용 예
(async () => {
try {
const data = await readFile('example.txt');
console.log(data);
} catch (error) {
// 에러 처리
}
})();
파일 쓰기
import * as fs from 'fs';
async function writeFile(filePath: string, data: string): Promise<void> {
try {
await fs.promises.writeFile(filePath, data, 'utf-8');
console.log('파일 쓰기 성공');
} catch (error) {
console.error('파일을 쓸 수 없습니다:', error);
throw error;
}
}
// 사용 예
(async () => {
try {
await writeFile('example.txt', '내용을 쓰세요');
} catch (error) {
// 에러 처리
}
})();
2. 콜백에서 util.promisify
사용
만약 fs.promises
모듈을 사용할 수 없는 환경이라면, util.promisify
를 사용하여 기존의 콜백 기반 함수를 Promise 기반으로 변환할 수 있습니다.
import * as fs from 'fs';
import * as util from 'util';
const readFile = util.promisify(fs.readFile);
const writeFile = util.promisify(fs.writeFile);
// 사용 예
(async () => {
try {
const data = await readFile('example.txt', 'utf-8');
console.log(data);
await writeFile('example.txt', '내용을 쓰세요', 'utf-8');
} catch (error) {
// 에러 처리
}
})();
위의 방법들을 사용하면 Typescript에서 파일 시스템 작업을 간단하고 가독성 좋게 처리할 수 있습니다.
이러한 방법을 응용하여 파일 시스템 작업 외에도 다른 비동기 작업을 보다 효율적으로 다룰 수 있습니다.