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'); // 비동기 예제가 끝났음을 알리는 문자열을 출력합니다. 비동기 처리이기 때문에 파일 읽기가 완료되기 전에 이 문자열이 출력됩니다.