함수가 비동적으로 동작하는 것이 무엇인가에 대한 이해가 필요하다

 

 

3가지 일이 있다. 

빨래 설거지 청소 

 

동기 : 나 혼자서 한다.

빨래 1시간한다. 끝나고 나서 다음 일을 시작한다.

설거지 1시간, 청소 1시간을 순차적으로 끝낸다.

 

비동기 : 여럿에게 시킨다.(일들을 나눠준다.)

3명한테 동시에 시킨다.

빨래 시작. 그와 동시에 설거지 시작. 그와 동시에 청소 시작. 

 


 

File 읽는 함수를 예시로 동기, 비동기를 비교해보자. 

 

Node.js Documentation 에 접속한다.

File System 을 찾아서 파일 읽는 함수 원형을 보자. 

 

https://nodejs.org/dist/latest-v12.x/docs/api/fs.html

 

File System | Node.js v12.16.1 Documentation

 

nodejs.org

 

Node.js 의 철학은 비동기를 권장한다. 

 

그래서 readFile 처럼 'Sync'가 안붙은 함수는 기본적으로 비동기로 동작한다. 

근데 특별히 '동기'적으로 동작하고자 하면 함수명 뒤에 'Sync' 를 명시적으로 붙은 것을 쓰면 된다. 

일단, 권장하지 않는 '동기' 방식으로 Sync가 붙어있는 함수 readFileSync() 를 써보자. 

실행해 보면

순차적으로 1이 출력되고 

readFileSync로 읽은 파일 내용이 한줄 출력되고,

2가 출력된다. 

 

이어서 비동기 readFile() 함수를 console.log('2. async') 밑에 써보자. 

 

readFile() 함수의 인자에는 마지막에 익명의 콜백함수가 있다.

readFile()도 data.txt 똑같은 파일을 읽어서 출력한다. 

 

실행 결과를 보자. 

코드를 쓴 순서대로 1, 2, 3, 4 가 아니라 

1, 2, 4, 3 이 찍힌다. 

 

readFile 함수는 readFileSync 함수와는 달리, 비동기로 동작한다. 

비동기는 다른 애한테 일을 위임하는 것이다.

그 애가 일을 끝나면, function 콜백함수를 실행하여 나에게 "시키신 일 끝났어요." 하고 알려주는 구조다.

 

콘솔 결과를 보니 남한테 시킨 readFile 함수 작업보다 console.log('4') 가 빨리끝나는 작업인가보다. 

 

동기 비동기에는 장단점이 있다. 

만약에 readFileSync 가 10분씩 걸리는 일이라면, 1 하고나서 readFileSync 작업이 끝날 때 까지 기다리게 된다.

그러면 10분이 지나고 나서야 파일 내용 출력되고, 그 다음에야 2 가 찍힐 것이다. 

 

너무 오래걸리는 작업은 비동기로 걸어 두고 나머지 것들을 우선으로 처리하는게 좋다. 

 

 

 

 

 

728x90

'프로그래밍 > Node.js' 카테고리의 다른 글

Express  (0) 2020.03.13
Node.js  (0) 2020.03.13
npm 모듈을 이용해보자  (0) 2020.03.13
Node.js 설치 , NPM 모듈 설치  (0) 2020.03.13
자바스크립트 입문  (0) 2020.03.10

+ Recent posts