Node.js | Node.js 스크립트 기본 | 파일을 로드하는 fs 객체


그런데 response의 write로 내보낸다고 하더라도, 설마 write으로 HTML 코드를 모두 써내려가야만 하는가? 라고 생각한 사람이 있을 것이다. 그대로 표시하는 Web 페이지의 내용을 스크립트에서 문자열로 준비해야 한다면, 이는 있을 수 없는 일이다.

아무래도 표시할 페이지의 내용은 HTML 파일로 준비하고, 그것을 읽어 표시할 수 있도록 되어 있지 않으면 Web 아니다. 그럼, 여기에서는 이에 대해서 설명하겠다.

파일 로드하는 fs 객체

파일 로드는 “fs"라는 객체로 사용할 수 있다. require 함수에서 “fs"를 읽고, 그 안에 있는 메소드를 호출하여 로드한다. 다음과 같이 정리된다.

fs 객체 가져 오기

var fs = require('fs');

이미 http 객체 가져 오기는 해봤기에 알고 있을 것이다. fs 객체도 마찬가지로 읽어 변수에 할당해야 한다.

파일 가져 오기

fs.readFile( 파일의 경로 , 인코딩 , 콜백 함수 );

파일을 로드한다. 보통으로 생각하면 “readFile에서 읽은 데이터를 반환"이라고 상상하지만, 다르다. readFile는 반환 값이 없다. 왜냐하면 이것은 비동기적으로 실행되는 처리기 때문이다.

파일을 읽는 것은 시간이 걸리는 처리이다. 따라서 로딩이 끝나면 데이터를 반환하고 나서 진행이 된다면, 경우에 따라서는 매우 오래 기다리게 된다. 서버에서 그런 일을 하면 이전에 액세스한 사람의 파일을 로드가 완료까지 모두 기다리고 있어야 한다는 것이 된다.

그래서 읽기 시작하면 바로 다음 작업으로 진행하도록 설계가 되어 있는 것이다. 읽기 작업은 백그라운드에서 이루어 진다. 그리고 로드가 완료되면 미리 설정해둔 처리를 호출하고, “읽기 후의 처리"를 진행시킨다는 개념이다. 이 “작업이 끝나면 나중에 호출되는 함수"를 “callback 함수"라고 한다.

readFile에는 첫번째 인수에 가져올 파일의 경로를 지정하고, 두 번째 인수로 인코딩 이름, 그리고 세번재 인수에 로드 완료 후 콜백 함수를 지정한다. 로드 작업이 끝나면, 콜백 함수에서 처리를 하도록 하는 것이다.