월요일,화요일,수요일 비동기를 학습하는 기간이다. 비동기가 무엇인지 공부한 후 타이머 API를 이용하여 간단한 비동기 구현을 해보았다. 비동기에서는 헷갈릴 수 있는 부분이 있다. 바로 blocking/non-blocking 그리고 synchronous/asynchronous이다. 그래서 이 부분은 이전에 정리한적이 있지만 다시한번 정리해보았다.
호출되는 함수가 바로 return을 하는지 안하는지의 여부를 나타낸다.
호출된 함수의 작업을 모두 마칠 때까지 호출한 함수에게 제어권을 넘겨주지 않고 기다리게 한다면 blocking이다.
호출한 함수가 호출되는동안 다른 일을 할 수 있는 기회를 줄 수 있으면 non-blocking이다.
호출되는 함수의 작업 완료 여부를 호출한 함수가 직접 확인하는지의 여부를 말한다.
호출한 함수가 작업 완료 여부를 신경쓰지 않는다면 비동기이다.
작업 완료 여부를 호출한 함수가 스스로 확인하며 신경 쓴다면 동기이다.
브라우저에서 사용할 수 있는 비동기 흐름은 타이머 혹은 DOM 이벤트와 관련된 상황으로 다소 한정적이지만, Node.js의 경우 많은 API가 비동기로 작성되어 있다. 개발자는 자신이 이해하는 범위만큼 모듈을 사용할 수 있다. 예를 들어, DNS에 대한 지식을 알고 있다면, DNS 모듈 사용법 문서에서 관련 메소드를 사용할 수 있다. 당장 DNS가 무엇인지 모를 수는 있지만, 파일 시스템 모듈은 파일을 읽거나 저장하는 기능을 구현할 수 있도록 돕는다. 메소드 목록을 살펴보면, 파일을 읽을 때에 쓸법한 메소드 이름을 찾을 수 있다. 물론, 처음부터 필요한 메소드를 정확하게 찾는 일은 쉽지 않다. 파일을 읽을 때에는 readFile이라는 메소드가 적합하다. 파일의 저장은 어떨까? saveFile 이라는 메소드는 찾을 수 없지만, 비슷해 보이는 메소드가 있다. 파일을 저장할 때에는 writeFile을 쓰면 된다. 모든 모듈은 '모듈을 사용하기 위해 불러오는 과정'이 필요하다. 브라우저에서 다른 파일을 불러올 때에는 다음과 같이
<script src="불러오고싶은_스크립트.js"></script>
//HTML에서 JavaScript 파일을 불러오는 script 태그
Node.js 에서는 자바스크립트 코드 가장 상단에 require 구문을 이용하여 다른 파일을 불러온다.
const fs = require('fs'); // 파일 시스템 모듈을 불러옵니다
const dns = require('dns'); // DNS 모듈을 불러옵니다
// 이제 fs.readFile 메소드 등을 사용할 수 있습니다!
//Node.js에서 다른 파일을 불러오는 require 구문(CommonJS)