File System 모듈

Category
스터디노트 NodeJS
Status
Published
Tags
FileSystem 모듈
Study
Description
Published
Slug
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); // 읽기 성공 } });