File System 모듈
파일 처리와 관련된 작업을 하는 모듈로, 보통 FileSystem을 줄여서 fs 모듈이라고 줄여 부름.
노드에서 가장 중요한 모듈 중 하나. 전체 메소드는 API 문서에서 확인 가능.
대부분의 메소드들이 동기/비동기로 나뉘는데,
Sync라는 이름이 붙어있는 메소드가 동기방식을 사용한다고 보면 됨
동기적 읽기 방식을 사용하면 파일을 읽으면서 다른 작업을 동시에 할 수 없음
하지만 비동기적으로 읽으면 파일을 읽으면서 다른 작업도 동시에 수행할 수 있고, 파일을 다 읽으면 매개변수 callback으로 전달한 함수가 호출 됨.
(비동기 형식은 항상 마지막 인수가 수행 완료 시 호출할 콜백 함수로 작성되어야 함)
주로 비동기적 형식을 많이 사용하지만,
서버 시작 시 설정 파일을 읽는 작업과 같이 동기적 형식이 더 적절한 경우도 있음.
[options]에는 보통 인코딩 방식을 쓰며, 웹에서는 UTF-8을 주로 사용
fs.readFile(filename, [options], callback): filename의 파일을 [options]의 방식으로 읽은 후 callback으로 전달된 함수를 호출. (비동기적)
fs.readFileSync(filename, [options]): filename의 파일을 [options]의 방식으로 읽은 후 문자열을 반환.(동기적)
fs.writeFile(filename, data, [options], callback): filename의 파일에 [options]의 방식으로 data 내용을 쓴 후 callback 함수를 호출.(비동기적)
fs.writeFileSync(filename, data, [options]): filename의 파일에 [options]의 방식으로 data 내용을 씀.(동기적)
파일을 읽어야 하기 때문에 text.txt라는 텍스트 파일을 main.js와 같은 폴더에 생성
readfile
//main.js var fs = require('fs'); // 비동기적 읽기 fs.readFile('text.txt', 'utf8', function(err, data) { console.log('비동기적 읽기 ' + data); }); // 동기적 읽기 var text = fs.readFileSync('text.txt', 'utf8'); console.log('동기적 읽기 ' + text); // --------- // 경로 변경 버전 var fs = require("fs"); const path = require("path"); // 경로 모듈 불러오기 const filePath = path.join(__dirname, "text.txt"); fs.readFile(filePath, "utf-8", function (err, data) { console.log("비동기적 읽기 " + data); }); var text = fs.readFileSync(filePath, "utf8"); console.log("동기적 읽기 " + text);
→ 비동기적 읽기가 먼저 실행됨에도 불구하고 console에는 동기적 읽기가 먼저 출력됨
writefile
// main.js var fs = require('fs'); var data = 'fs.writeFile test'; fs.writeFile('text1.txt', data, 'utf8', function(err) { console.log('비동기적 파일 쓰기 완료'); }); fs.writeFileSync('text2.txt', data, 'utf8'); console.log('동기적 파일 쓰기 완료'); // --------- // 경로 변경 버전 var fs = require("fs"); const path = require("path"); // 경로 모듈 불러오기 const filePath1 = path.join(__dirname, "text1.txt"); const filePath2 = path.join(__dirname, "text2.txt"); var data = "fs.writeFile test"; fs.writeFile(filePath1, data, "utf8", function (err) { console.log("비동기적 파일 쓰기 완료"); }); fs.writeFileSync(filePath2, data, "utf8"); console.log("동기적 파일 쓰기 완료");
동기적 처리방식 예외처리
// main.js var fs = require('fs'); // 파일 읽기(동기적) try { var data = fs.readFileSync('notexist.txt', 'utf8'); // 파일이 없는데 읽으려 함 console.log(data); } catch (err) { console.log(err); }
비동기적 처리방식 예외처리
// main.js var fs = require("fs"); // 파일 읽기 fs.readFile("notexist.txt", "utf8", function (err, data) { // 존재하지 않는 파일 읽기 if (err) { console.log(err); // 읽기 실패 } else { console.log(data); // 읽기 성공 } });