본문 바로가기

Back-End/Node.js

readFile(비동기)와 readFileSync(동기)의 차이

반응형

fs

fs는 노드가 기본적으로 제공하는 FileSystem 모듈로, opendir, readdir, closedir 등 다양한 디렉토리 메서드를 제공한다.

 

 

readFile과 readFileSync

readFile(비동기)

다음 예제를 살펴보면서 콘솔 결과를 예상해보자.

// test.txt
readFile
const fs = require('fs');
fs.readFile('./test.txt', 'utf-8', (err, data) => {
   if (err) throw err;
   console.log(data);
});

console.log('1');

콘솔 결과는 '1' ➡ 'readFile' 이다.

일반적으로 프로그램은 코드 순서대로 진행될 것이라고 생각한다. 하지만 비동기 처리는 그렇지 않다.

순서대로 들어가긴 한다. 하지만 파일을 읽기 위해 test.txt에 접근하고 데이터(data)를 가져오는 동안 main.js는 멈추지 않고 다음으로 넘어가서 다음 코드를 읽는다. 이것이 바로 비동기이다.

데이터(data)를 가져오면 그 후에 콜백함수가 호출된다. 한 갈래로 가던 코드가 두 갈래로 갈라져서 실행되는 것이다. 더 정확히 말하자면, 가져온 파일(test.txt)을 fs 프로세스에 넘긴 후에 나머지 코드를 실행한다.

비동기 처리는 데이터를 가져올 때 프로그램이 진행되는 것을 멈추기 때문에 비효율적이다.

 

 

readFileSync(동기)

위의 비효율적인 처리를 해결하기 위해서 동기 처리를 해야 한다.

파일을 읽어온 후에 실행해야 하는 경우를 말한다. 이럴 땐 readFileSync 메소드를 사용하면 된다.

// test.txt
readFileSync
let data = fs.readFileSYnc('test.txt', 'utf-8');
util.log(data);
util.log('2');

해당 코드는 파일을 읽어오는 동안 전체 프로세스가 멈추고 데이터를 가져온다. 그리고 데이터를 가져오면 그제야 다음 코드가 진행된다.

따라서 콘솔 결과는 'readFileSync' ➡ '2'가 된다.

 

 

동기와 비동기

그럼 둘 중 어느 것을 선택하여 사용해야 할까?

Node.js의 매력은 비동기처리를 할 수 있다는 것이다. 따라서 콜백함수를 넣어 처리하는 것이 좋다.

하지만 경우에 따라 비동기처리를 하면 코드가 복잡해지는 경우도 있다. 따라서 동기 처리가 필요한 경우를 잘 구분하여 사용하자.

 

 

결론

비동기(readFile) 동기(readFileSync)
다음 코드와 파일의 데이터를 읽는 코드가 동시에 실행된다. 파일의 데이터를 모두 읽어온 후 다음 코드로 넘어간다.

 

 

 


참고 자료

 

nodejs readFile과 readFileSync의 차이(비동기와 동기의 차이)

fs는 nodejs가 기본적으로 제공하는 filesystem이다. 파일을 불러오는 등의 기능을 제공한다. readFile과 readFileSync의 차이 reaFile로 파일을 다음과 같이 불러오면 어떤 결과가 나올까? test.json은 아래와

balmostory.tistory.com

 

반응형