[typescript] async/await를 사용하여 파일 시스템 작업 처리 방법

파일 시스템을 다루는 작업은 대개 시간이 오래 걸리는 비동기 작업에 해당합니다. Typescript에서는 이러한 작업을 쉽게 다룰 수 있도록 asyncawait 키워드를 제공합니다. 이 튜토리얼에서는 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에서 파일 시스템 작업을 간단하고 가독성 좋게 처리할 수 있습니다.

이러한 방법을 응용하여 파일 시스템 작업 외에도 다른 비동기 작업을 보다 효율적으로 다룰 수 있습니다.

링크: Node.js 파일 시스템 모듈 문서