BE 공부/Node.js

동기와 비동기란?

꼬질꼬질두부 2023. 4. 6. 14:03

동기(Synchronous)

 작업을 순차적으로 처리하는 방식

>> 한 작업이 완료되기 전까지 다음 작업은 대기 상태에 머물게 됨.


동기 특징

  • 코드의 실행 순서를 쉽게 파악 가능
  • I/O 작업이 오래 걸리는 경우, 프로그램 전체의 실행이 차단(blocked)되어 효율성 저하

동기 활용 예시 코드

fs.readFileSync 메서드를 사용하여 'example.txt' 파일의 내용을 읽어오고, 콘솔에 출력.

이 과정이 동기적으로 처리되기 때문에, 파일 읽기가 완료되기 전까지 다음 코드는 실행되지 않음.

const fs = require('fs'); // 파일 시스템 모듈을 불러옵니다.

try {
  // 동기 방식으로 파일 읽기
  const data = fs.readFileSync('example.txt', 'utf8'); // 'example.txt' 파일을 동기적으로 읽어서 'data' 변수에 저장합니다. 인코딩은 'utf8'로 설정합니다.
  console.log('File content:'); // 파일 내용을 출력하기 전에 "File content:"라는 문자열을 출력합니다.
  console.log(data); // 파일 내용을 출력합니다.
} catch (error) {
  console.error('Error reading file:', error); // 파일 읽기에 실패하면 에러를 출력합니다.
}

console.log('End of synchronous example'); // 동기 예제가 끝났음을 알리는 문자열을 출력합니다.

비동기(Asynchronous)

작업을 독립적으로 처리하는 방식
>>  결과를 기다리지 않고 다음 작업을 수행


비동기 특징

  • 작업이 완료되면 콜백 함수를 실행하여 결과를 처리
  • I/O 작업이 오래 걸리더라도, 다른 작업들이 계속 진행될 수 있어 프로그램의 효율성 증가
  • 비동기 코드를 작성하면서 콜백 함수를 사용할 때, 코드의 가독성이 떨어질 수 있습니다.  >> Promise나 async/await를 사용해 해결 가능
  • Node.js는 주로 비동기 방식을 사용하여 개발됨_  ex) 파일 시스템(fs) 모듈에서는 주로 비동기 방식으로 I/O 작업을 수행

비동기 활용 예시 코드

fs.readFile 메서드를 사용하여 'example.txt' 파일의 내용을 읽어오고, 콘솔에 출력.

이 과정이 비동기적으로 처리되기 때문에, 파일 읽기가 완료되지 않아도 다음 코드가 실행 됨.

파일 읽기가 완료되면 콜백 함수가 호출되어 결과를 처리.

const fs = require('fs'); // 파일 시스템 모듈을 불러옵니다.

// 비동기 방식으로 파일 읽기
fs.readFile('example.txt', 'utf8', (error, data) => {
  // 'example.txt' 파일을 비동기적으로 읽고, 인코딩은 'utf8'로 설정합니다.
  // 파일 읽기가 완료되면 콜백 함수가 호출됩니다. 에러가 발생하면 'error' 변수에 값이 할당되고, 성공하면 'data' 변수에 파일 내용이 할당됩니다.
  
  if (error) {
    console.error('Error reading file:', error); // 파일 읽기에 실패하면 에러를 출력합니다.
    return;
  }
  
  console.log('File content:'); // 파일 내용을 출력하기 전에 "File content:"라는 문자열을 출력합니다.
  console.log(data); // 파일 내용을 출력합니다.
});

console.log('End of asynchronous example'); // 비동기 예제가 끝났음을 알리는 문자열을 출력합니다. 비동기 처리이기 때문에 파일 읽기가 완료되기 전에 이 문자열이 출력됩니다.