본문 바로가기
Javascript/Node.js

파일 시스템 접근하기

by 모스키토끼 2019. 10. 10.

fs 모듈의 사용 방법

...더보기

//파일명: readme.txt

HelloHello

//파일명: reaedFile.js

const fs = require('fs');

fs.raedFile('./readme.txt', (err, data) => {
	if(err){
    	throw err;
    }
    console.log(data);
    console.log(data.toString());
});

명령어: node readFile

결과: <Buffer ~~~~~>

        HelloHello

 

readFile의 결과물은 Buffer 형식으로 제공된다. (data - Buffer형식) 따라서 toString을 사용하여 문자열로 변환해야지 읽을 수가 있다.

//파일명: writeFile.js

const fs = require ('fs');

fs.writeFile('./writeme.txt', '글이 입력됩니다.', (err) => {
	if(err) {
    	throw err;
    }
    fs.readFile('./writeme.txt', (err,data) => {
    	if(err) {
        	throw err;
        }
        console.log(data.toString());
    });
});

writeFile() 메서드에 생성될 파일의 경로와 내용을 입력하면 같은 폴더안에 생성된다.

위 코드는 파일을 생성하고 바로 읽고 콘솔에 출력하는 코드이다.

 

동기 메서드와 비동기 메서드

readFile 메서드는 비동기 메서드이다. 이러한 비동기 메서드는 백그라운드에 해당 파일을 읽으라고만 요청하고 다음 작업으로 넘어간다.

(메인스레드에서 readFile을 하면 백그라운드에서 return 값을 받는 것이 아니라 콜백 함수를 받는다. 그런 후 다른 작업을 하다가 백그라운드에서 요청작업이 완료되었다는 알림을 받으면 메인스레드는 콜백 함수를 실행해 return 값을 받는다.

만약 '시작 -> readFile x3 -> 끝' 순서로 코드를 돌린다면 시작을 콘솔에 찍고 파일 읽기 요청을 3번하고 끝을 찍는다. 후에 백그라운드에서 요청처리가 끝난 순으로 메인 스레드에 알림을 주면 그때! 콜백함수를 실행한다.

==> 파일이 읽기가 완료되는 시점은 비동기이기 때문에 어떤 readFile의 요청이 먼저 처리될 지 알 수 없다. 따라서 그때 그때 실행 순서가 달라질 수 있다.

 

비동기의 장점: 수백 개의 I/O 요청이 들어와도 메인 스레드는 백그라운드에 요청 처리를 위임하여 그 후로도 얼마든지 요청을 더 받을 수 있다.

 

readFileSync 메서드는 동기 메서드이다. 이 메서드는 readFile에서 한 것처럼 콜백 함수를 넣는 대신 직접 return 값을 받아온다. 따라서 요청하면 요청한 작업이 끝날 때 까지 메인스레드는 다른 작업을 하지 않는다.

const fs = require('fs');

console.log('시작');

let data = fs.readFileSync('./readme2.txt');
console.log('1번', data.toString());

data = fs.readFileSync('./readme2.txt');
console.log('2번', data.toString());

data = fs.readFileSync('./readme2.txt');
console.log('3번', data.toString());

console.log('끝');

명령어: node sync(위 코드 파일명)

결과: 

시작

1번 ~~

2번 ~~

3번 ~~

 

동기방식은 비효율적...그러면 비동기 방식에서 순서대로 readFile을 호출할 수 있는 방법은?

이전 readFile()의 콜백에 다음 readFile()을 넣어주면 된다.

ex)

fs.readFile(~~){

    fs.readFile(~~){

    }

}

 

'Javascript > Node.js' 카테고리의 다른 글

요청과 응답 이해하기(서버구현)  (0) 2019.10.19
버퍼와 스트림 이해하기  (0) 2019.10.17
모듈 만들기  (0) 2019.10.10
Front end Javascript  (0) 2019.10.04
알아두어야 할 Javascript  (0) 2019.10.03

댓글