[Node.js] 파일 읽고 쓰기

노드의 파일 시스템

노드의 파일 시스템은 파일 다루는 기능, 디렉터리를 다루는 기능으로 구성되어 있으며, 동기식/비동기식 IO 기능을 함께 제공한다. 동기식 IO는 파일 작업이 끝날 때까지 대기하고, 비동기식 IO는 파일 작업을 요청만 하고 그다음 작업을 바로 수행한다. 이후 파일 작업이 끝나면 그 상태는 이벤트로 받아 처리한다. 동기/비동기식 IO를 구분하기 위해 동기식 IO 메소드는 Sync를 붙인다.

파일 읽기

우선 동기식 방식으로 파일 읽어보자.

var fs = require('fs');
var data = fs.readFileSync('./package.json''utf8');
console.log(data);
cs

파일 시스템에 접근하기 위해 fs 모듈을 사용한다. 동기식 방식은 Sync라는 단어를 붙인다. 즉, 이 코드를 실행하면 파일을 다 읽을 때까지 console.log() 메소드는 호출되지 않는다.

package.json 파일이 없다고 오류가 뜨면 cmd에서 작성 중인 js 파일이 위치한 디렉터리로 이동한 후 npm init -y를 입력하면 package.json 파일이 만들어진다.

이번에는 같은 기능의 프로그램을 비동기식 방식으로 작성해보자.

var fs = require('fs');
fs.readFile('./package.json''utf8'function(err, data){
    console.log(data);
});
console.log('파일 읽기 요청됨');
cs

대부분 비동기식 방식을 사용한다. readFile() 메소드를 실행하면서 세 번째 파라미터로 전달된 함수 function는 파일을 읽는 작업이 끝났을 때 호출된다. 이 때 err, data 2개의 파라미터를 전달받아 오류의 유무를 알 수 있다. 오류 발생 시 err에 오류 데이터가 들어가고 오류가 없다면 err는 null이 된다.

파일 쓰기

다음은 파일을 읽고 쓰는 대표적인 메소드이다.

readFile(filename, [Encoding], [Callback]): 비동기식 IO 파일 읽기
readFileSync(filename, [Encoding]): 동기식 IO 파일 읽기
writeFile(filename, data, encoding='utf8', [Callback]): 비동기식 IO 파일 쓰기
writeFileSync(filename, data, encoding='utf8'): 동기식 IO 파일 쓰기

메소드를 보면 당연히 비동기식 IO에는 이벤트가 끝난 시점에 호출되는 callback 함수가 포함된다.

이제 비동기 방식으로 파일에 데이터를 써보자.

var fs = require('fs');
fs.writeFile('./output.txt''Hello World!'function(err){
    if(err){
        console.log('Error: ' + err);
    }
    
    console.log('output.txt 파일에 데이터 쓰기 완료');
});
cs

파일에 데이터를 쓸 때 사용하는 writeFile() 메소드는 첫 번째 파라미터에 파일 이름을 전달받고, 두 번째 파라미터에 파일을 쓸 내용, 세 번째 파라미터에 작업이 끝나면 호출될 콜백 함수를 전달받는다. 파일에 쓰는 작업 중 오류가 발생하면 err에 오류 내용이 들어갈 것이고 이를 if문으로 검사한다. 이제 프로젝트 폴더에 output.txt 파일이 만들어졌을 것이다.

-

기본적인 파일 다루는 법을 알아보았다. 다음 글에서는 buffer를 이용한 심화적인 파일 다루기를 알아보겠다.

댓글 없음:

Powered by Blogger.