본문 바로가기

Programming/Node.js

4. Node 기능 살펴보기 (5) - 파일 시스템 접근하기 [fs] 1

node js logo image

 

 

 

 

fs 모듈에 대해서 살펴보겠습니다. fs 모듈은 파일 시스템에 접근하는 모듈입니다. 좀 더 풀어서 설명하자면, 파일을 생성하거나 삭제하고, 읽거나 쓸 수 있으며 폴더를 만들거나 지우기도 합니다. 

 

fs 모듈을 제대로 학습하려면 동기와 비동기, 버퍼와 스트림, 스레드 풀에 이르기까지 다양한 개념들에 대해서 심도있는 이해가 필요합니다. 이는 차근차근 살펴볼테니 이번 예제에서는 fs 모듈을 통해 텍스트 파일을 간단히 읽고 출력하는 정도를 실습해 보겠습니다. 

 

우선은 임의의 텍스트를 담은 [readme.txt] 파일을 실습 폴더 내에 만들어보겠습니다. 그리고 아래 예제를 작성해 보죠.

 

const fs = require('fs');

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

/* 출력
<Buffer 66 73 20 eb aa a8 eb 93 88 20 ed 85 8c ec 8a a4 ed 8a b8 eb a5 bc 20 ec 9c 84 ed 95 9c 20 ed 8c 8c ec 9d bc ec 9e 85 eb 8b 88 eb 8b a4 2e>
fs 모듈 테스트를 위한 파일입니다.
*/

 

 

우선 위 코드 라인 상단부터 하나씩 짚어보겠습니다. 여기서 경로 './readme.txt'를 작성했습니다. 이렇게 작성한 경우 실행되는 기준은 "node 명령어를 실행하는 콘솔 기준"이 됩니다. 만일 위 예제 파일이 readFile.js인데, 이 readFile.js가 있는 폴더인 c:\javascript안에 readme.txt가 같이 있다고 가정해 볼까요?

 

그런데 우리가 만일 node 명령어 실행을 c:\에서 c:\node javascript/readFile.js 와 같은 방식으로 실행했다  가정해 봅시다. 그럴 경우, 실제로 코드에서는 c:\readme.txt를 찾게 됩니다. 이해가 가시나요?

 

 

 

다음으로는 콜백함수를 보겠습니다. readFile이라는 fs 메서드에 err, 그리고 data가 인수로 전달됩니다. err는 말 그대로 에러 발생 시에 처리되는 내용이니 이해가 쉽게 가실 겁니다. 

 

그런데 파일을 읽어들인 결과인 data 출력에 특이사항이 보입니다. 그냥 console.log로 출력하면 버퍼(buffer)가 출력되고, 이를 toString( )으로 처리해야 제대로 텍스트가 출력됩니다. 버퍼는 일단 사람이 읽을 수 없는 형태인 메모리의 데이터라고 생각해 주세요. 따로 살펴보겠습니다.