[javascript] 자바스크립트의 비동기 제어와 파일 입출력

이번 포스트에서는 자바스크립트에서 비동기 제어와 파일 입출력을 다룹니다.

비동기 제어(Asynchronous Control)

Promise

대부분의 자바스크립트 코드는 비동기적으로 작동합니다. 즉, 코드는 순차적으로 실행되지 않고 비동기 작업을 수행한 후에 다음 작업을 실행합니다. 이때 사용되는 것이 Promise입니다. Promise는 비동기 작업의 성공 또는 실패와 같은 결과가 끝났을 때 콜백 함수를 호출하고 결과값을 전달합니다.

예를 들면:

const fetchData = () => {
  return new Promise((resolve, reject) => {
    // 비동기 작업 실행
    if (작업이 성공했을 ) {
      resolve(결과값);
    } else {
      reject(에러);
    }
  });
};

fetchData()
  .then((data) => {
    // 성공한 경우의 처리 로직
  })
  .catch((error) => {
    // 실패한 경우의 처리 로직
  });

async/await

ES8(ES2017)에서 도입된 async/await는 Promise를 더 쉽게 다룰 수 있게 해줍니다. async 함수는 항상 Promise를 반환하며, await 키워드는 Promise가 처리될 때까지 함수의 실행을 일시 중지합니다.

예를 들면:

const fetchData = async () => {
  try {
    const response = await fetch('https://api.example.com/data');
    const data = await response.json();
    return data;
  } catch (error) {
    throw new Error(error);
  }
};

(async () => {
  try {
    const result = await fetchData();
    // 결과값을 이용한 추가 작업
  } catch (error) {
    // 에러 처리
  }
})();

파일 입출력(File I/O)

Node.js 환경에서는 파일 시스템 모듈을 사용하여 파일 입출력 작업을 수행할 수 있습니다. 이 모듈은 비동기 및 동기 방식으로 파일 읽기 및 쓰기 작업을 제공합니다.

예를 들면:

const fs = require('fs');

// 동기 방식
const data = fs.readFileSync('file.txt', 'utf8');
console.log(data);

// 비동기 방식
fs.readFile('file.txt', 'utf8', (err, data) => {
  if (err) throw err;
  console.log(data);
});

// 파일 쓰기
fs.writeFile('output.txt', 'Hello, World!', (err) => {
  if (err) throw err;
  console.log('Write operation complete');
});

이렇게 Node.js를 사용하여 파일 시스템을 다룰 수 있습니다.

위에서 다룬 내용을 통해 자바스크립트의 비동기 제어와 파일 입출력에 대한 기본 개념을 이해할 수 있었습니다. 다음 포스트에서는 위에서 다룬 내용을 실제로 활용하는 예시들을 살펴볼 것입니다.

참고자료: