728x90
fs는 nodejs가 기본적으로 제공하는 filesystem이다.
파일을 불러오는 등의 기능을 제공한다.
readFile과 readFileSync의 차이
reaFile로 파일을 다음과 같이 불러오면 어떤 결과가 나올까?
test.json은 아래와 같다.
{
"id":123,
"name":"lim"
}
const fs = require('fs');
fs.readFile('./test/test.json','utf-8',(err,data)=>{
if (err) return console.log(err);
console.log(data);
})
console.log('1111111111111');
1번 data->11111111111
2번 11111111111-> data
정답은 2번이다.
프로그램에 대한 기본적인 생각은 코드 순서대로 진행된다는 것이다.
하지만 비동기는 처리는 그렇지 않다.
순서대로 들어가는 것은 맞지만 파일을 읽기 위해 test안의 test.json에 접근해
data를 가져오는 동안 main.js는 멈추지 않고 다음으로 넘어간다.
이것이 비동기 처리이다.
data를 가져오면 그때서야 {} 안에 있는 코드들이 실행된다.
이를 콜백 함수라고 부른다.
한 갈래로 가던 것이 두 갈래로 갈라지는 것이다.
더 정확히 말하면 fs프로세스에 파일을 가져오는 것을 넘기고 나머지 코드를 실행한다.
비동기 처리는 데이터를 가져올 때 프로그램이 진행을 멈추는 비효율성을 비동기 처리로 보완한다.
동기 처리를 하고 싶다면(파일을 꼭 읽고 와서 그 후에 실행해야 하는 경우) readFileSync을 사용하면 된다.
let data2 = fs.readFileSync('test.json','utf-8');
util.log('data2 : ',data2)
util.log("222222222222222")
해당 코드는 파일을 읽어오는 동안 전체 프로세스가 멈추고 데이터를 가져온 후 진행된다.
때문에 data2가 나온 후 222222.. 가 나온다.
사실 파일을 꼭 읽고 와서 실행해야 하는 코드의 경우 콜백 함수에 넣는 것이 전체 프로세스를 효율적으로 하는데 도움이 된다.
사실 nodejs의 매력은 비동기처리에 있다 때문에 콜백함에 넣어서 처리하는 것을 추천한다.
하지만 경우에 따라 그렇게 처리하면 코드가 복잡해지는 경우도 있다.
때문에 동기 처리가 필요한 경우를 잘 구분해 사용하면 된다.
728x90
'기타 > node js' 카테고리의 다른 글
node js npm 모듈설치 방법과 .gitignore node_modules, npmjs로 패키지 정보 알아보기 (0) | 2020.11.01 |
---|---|
node js fs.writeFile, fs.writeFileSync, fs.appendFile 사용방법 (0) | 2020.10.31 |
Node js 동작원리 및 npm 사용법 (0) | 2020.10.29 |
XHRHttpRequest 이해, cors 해결하는 방법 (0) | 2020.10.25 |
node js에서 mongoose 사용하기 (0) | 2020.10.23 |