본문 바로가기
소프트웨어 공학

비동기 함수와 동기함수 / 공식문서에서 readFile, readFileSync 함수 찾아읽기

by iwuooh 2022. 2. 3.

Node.js의 코어 모듈인 fs에 내장된 readFile 함수와 readFileSYNC 함수에 대해 알아보자.

1. readFile 함수

readFile 함수는 비동기 함수로, 문서에서 볼 수 있듯이 세 개의 인자가 필요하다.

1) path : 내용을 읽어올 파일의 경로

2) options : 파일의 내용을 읽을 때 적용할 옵션

3) callback : 파일의 내용을 다 읽었을 때 실행될 콜백

 

[]로 묶인 2) options인자는 필수 인자가 아닌 선택 인자이고, 1) path와 3) callback은 필수 인자이다. 해당 파일의 내용을 utf-8이라는 인코딩으로 읽기 위해 options인자에 'utf8'이라 써줄 수 있고, 예시처럼 options의 인자로 ['encoding':'utf8', 'flag':'r'] 이런 식의 객체를 넣을 수도 있다. flag는 파일을 열 때 그 파일을 여는 목적을 나타내는 일종의 모드를 지정하기 위해 사용된다. 

 

여기서 중요한 인자는 3) callback이다. callback의 구조는 다음과 같다.

이는 콜백을 Arrow Function의 형태로 나타낸 것이고, 파일의 읽기가 마무리되면 이 콜백이 실행되면서 data의 인자로 파일의 내용이 넘어오게 된다. 만약 파일을 읽다가 예기치 못한 오류가 발생하면 err인자로 해당 오류의 정보를 담은 객체가 전달된다. Node.js에 콜백은 일반적으로 err인자를 첫 번째 인자로 두고 data처럼 작업의 결과를 나타내는 인자를 뒤에 둔다.

2. readFileSync 함수

readFileSync 함수는 동기 실행되는 함수로 인자에 콜백이 없고 path와 options인자만 있다. Node.js에서 프로그래밍을 할 때는 주로 비동기 함수를 사용하지만 초기화 코드에서는 동기 함수를 써야 하는 경우도 있다.

3. 동기 실행/비동기 실행 함수 결과 차이

3-1. 동기 실행

readFileSync 함수는 동기 함수이므로 코드를 실행한 결과는 다음과 같다.

console.log('Start'); 가 첫 번째로 실행되고,

console.log(content); 가 실행된 결과인 hello node js! 가 출력되고,

console.log('Finish'); 가 실행된다.

3-2. 비동기 실행

readFile함수는 비동기 함수이므로 코드를 실행한 결과는 다음과 같다.

console.log('Start'); 가 첫 번째로 실행되고,

console.log('Finish'); 가 실행된 후에

콜백 함수가 실행되어 console.log(data);의 결과인 hello node js! 가 마지막으로 출력된다.

4. 비동기 실행에 자주 쓰이는 setTimeout 함수

setTimeout 함수는 밀리 세컨즈(1000분의 1초) 후에 callback 인자에 설정한 함수를 실행한다. 따라서 위의 코드의 setTimeout 함수는 10000밀리 세컨즈 초, 즉 1초 후에 num 변수에 2를 대입하라는 의미이다. 위 코드의 실행결과는 3이다.

 

1) 처음 num 변수에 1이 할당

2) setTimeout 함수가 실행(1초후에 실행될 콜백이 설정됨)

3) num 변수에 3이 대입

4) num 변수의 값이 출력

5) setTimeout 에서 정해둔 콜백 실행

 

의 순서로 진행되므로 개발자가 직접 비동기 실행을 구현할 수 있게 해 준다.

 

콜백 함수 참고

https://nodejs.org/en/

댓글