동기와 비동기
Synchronous(동기) vs Asynchronous(비동기)
줄여서 Sync, Async 로 표현한다.
실생활에서의 비유를 통한 설명
> 상황 : 세 가지 일을 해야한다. 빨래. 설거지. 청소 각각 한시간씩 걸린다.
동기적으로 일을 처리하는 것
빨래를 하고 다 하고 나서 그 다음에 설거지를 하고 다 하고 나서 그 다음에 청소를 한다.
총 3시간이 걸린다.
비동기적으로 일을 처리하는 것
빨래하는 업체가 있고 설거지 하는 업체가 있고 청소를 하는 업체가 있다.
그 빨래업체에게 전화를 한다. "빨래 좀 해주세요. 끝나면 말해주세요." 전화를 하는데 1분이 걸렸다.
그 설거지업체에게 전화를 한다. "설거지 좀 해주세요. 끝나면 말해주세요." 전화를 하는데 1분이 걸렸다.
그 청소업체에게 전화를 한다. "청소 좀 해주세요. 끝나면 말해주세요." 전화를 하는데 1분이 걸렸다.
전화를 하는데 총 3분이 걸렸다.
뭐가 먼저 될지는 모른다. 이게 단점이 될 수 있다.
하지만 순서가 중요하지 않다면 이렇게 처리할 수 있다.
다른 업체에 의해 일이 처리되는 동안에 나는 다른 일을 처리할 수 있다.
즉, 자원을 효율적으로 활용할 수 있다는 장점이 있다.
이 차이다.
컴퓨터에서 구체적인 예
> 이메일 전송 프로그램
상황 : 100명에게 보낸다. 한 명당 10초가 걸린다.
동기로 처리하는 경우 : 발행! -> 한 명, 한명... 총 1000초가 걸린다.
비동기로 처리하는 경우 : 발행! -> 발행 시스템에게 전송 업무를 위임한다. 전송 완료 메세지만 받으면 된다.
코드로 살펴본다.
Node.js 라이브러리에서 검색해본 결과
fs.readFile / fs.readFileSync 두 가지가 검색되었다.
Sync 라는 단어가 있고 없고 한다.
Node.js 는 추구하는 철학이 기본적으로 비동기다.
그래서 없으면 비동기 방식, 있으면 동기 방식.
기본적으로 시간이 필요한 작업들은 (I/O가 필요한 작업들은) 기본적으로 비동기적으로 처리한다.
두 메서드에 관한 문법은 Docs에 나와있다.
fs.readFileSync(file[, options])
fs.readFile(file[, options], callback)
코드)
var fs = require('fs');//syncconsole.log(1);var data = fs.readFileSync('data.txt', {encoding:'utf8'});console.log(data);//asyncconsole.log(2);fs.readFile('data.txt', {encoding:'utf8'},function(err, data){console.log(3);console.log(data);console.log(5);});console.log(4);
실행결과)
1
Hello Sync and Async
2
4
3
Hello Sync and Async
5
코드분석)
"3, Hello Sync and Async, 5"는 data 부분이다.
‘2'출력 -> data.txt readFile ‘요청' -> ‘4' 출력 -> 요청에 의한 ‘응답' 완료 = ‘data’ 출력
-> 3,data,5 출력(3,5는 function에 속해있기 때문에 data와 함께 출력)
function(err,data) 이므로 err에 대하여, 즉 error 상황을 고려하여
if 구문으로 분기를 구분해줘야 한다.
하지만 지금 포스팅에선 Skip하겠다.
우리는 동기 방식과 비동기 방식을 적재 적소에 위치시켜서 웹 브라우저의 반응 속도를 최대화시킬 수 있다.
생활코딩 감사합니다.
-...-
'Dev.BackEnd > Node.js' 카테고리의 다른 글
[여섯번째] Node.js 기본 / 정적 파일 제공 (0) | 2016.04.08 |
---|---|
[다섯번째] Node.js 기본 / Express 도입 (0) | 2016.04.08 |
[세번째] Node.js 기본 / 콜백 복습 (0) | 2016.04.07 |
[두번째] Node.js 기본 / 모듈과 NPM (0) | 2016.04.07 |
[첫번째] Node.js 기본 / About node! / 간단한 웹 애플리케이션 만들기 (0) | 2016.04.06 |