본문 바로가기

Programming/Node.js

4. Node 기능 살펴보기 (7) - 버퍼와 스트림 4

node js logo image

 

 

 

 

앞선 아티클에서 우리는 읽기 스트림에 대해서 살펴보았습니다. 그렇다면, 이번에는 반대로 쓰는 기능도 있겠죠? wrtieStream에 대해서 살펴보고 예제를 작성해 보겠습니다. 

 

 

const fs = require('fs');

const writeStream = fs.createWriteStream('./writeme2.txt');
writeStream.on('finish', () => {
    console.log('파일 쓰기 작업 완료!');
});

writeStream.write('글을 작성한다.');
writeStream.write('글을 다시 한번 작성한다.');
writeStream.end();

/* 출력
파일 쓰기 작업 완료!
*/

 

 

 

위의 실행 결과를 살펴보면, 우선 콘솔 창에서는 "파일 쓰기 작업 완료!" 텍스트만 출력됩니다. 그리고 해당 js파일이 실행된 폴더 내에는 [writeme2.txt] 파일이 생성된 것을 확인할 수 있습니다. 해당 파일을 열어보면 다음과 같이 작성되어 있습니다. 

 

글을 작성한다.글을 다시 한번 작성한다.

 

 

코드를 읽어보면 그리 어렵지 않게 이해가 가실 것입니다. 차례로 살펴보면 우선 createWriteStream을 이용해 쓰기 스트림을 생성하는데, 첫 번째 인수로 생성할 파일명을 입력합니다. 그리고 finish 이벤트 리스너를 선언해 파일 작성 종료 시 동작을 정의합니다. 

 

wirte 메서드로는 넣을 데이터를 작성해주었고, end 메서드로 쓰기 스트림의 종료를 선언합니다. 그럼 이와 동시에 선언해두었던 finish 이벤트가 발생하여 미리 선언해둔 동작이 실행됩니다. 

 

 

 


 

 

readStream과 writeStream을 함께 이용해 파일을 복사하는 방법도 있습니다. 특정 파일을 readStream으로 읽어둔 다음, wrtieStream으로 즉시 연결해 보내는 원리죠. 우선, [readme4.txt]를 미리 만들어 두겠습니다. 

 

[readme4.txt]

이 파일을 readme3.txt로 보냅니다.

 

const fs = require('fs');

const readStream = fs.createReadStream('readme4.txt');
const wrtieStream = fs.createWriteStream('writeme3.txt');
readStream.pipe(wrtieStream);

 

 

위 코드를 실행하면, [writeme3.txt] 파일이 자동으로 생성되면서 내용도 복사됩니다. 따로 이벤트 리스너로 on('data'), wrtieStream.write를 사용하지 않아도 대부분의 동작이 실행된 것을 알 수 있습니다. 노드 8.5 이전까지는 이 방식으로 파일 복사를 진행했는데, 추후 새로운 파일 복사는 따로 살펴보겠습니다.