Node-5 (22/12/13)

nazzzo·2022년 12월 13일
0

fs (파일 시스템)

노드에 내장된 fs모듈에 대해 정리합니다
fs는 File System의 약자입니다


const fs = require('fs')
// 내장모듈이기에 바로 불러올 수 있습니다

fs.readFile()
// readFile 메서드는 비동기로 처리됩니다
fs.readFileSync()
// readFileSync 메서드는 동기로 처리됩니다

fs 모듈은 같은 기능의 메서드를 비동기와 동기 방식으로 나눠서 제공합니다
(이름 끝에 'Sync'가 붙으면 동기 메서드, 그렇지 않으면 비동기 메서드입니다)



1. readFile() & readFileSync()


fs.readFile

const filename = path.join(__dirname, './src/index.html')
// __dirname :  ~/Documents/workspace/Node/221212/filesystem + /src/index.html

fs.readFile(filename,'utf8', (err, data)=> {
    if(err) console.log("파일을 불러오는데 실패했습니다")
    console.log(data)
})

console.log('hello world')

readFile 메서드는 3가지 인자값을 가집니다

  • 첫번째 인자값 : 불러올 파일(절대)경로+파일명 (path모듈을 사용합니다)

  • 두번째 인자값 : 인코딩 방식(Buffer 타입을 text로) ~ 생략 가능합니다

  • 세번째 인자값 : 콜백(파일을 읽었을때 실행할 함수)

    • 콜백함수의 인자값 : 파일을 읽는데 실패할 경우 첫번째 인자값을,
      성공하면 두번째 인자값을 출력합니다
  • readFile은 비동기로 처리되기 때문에 하단의 hello world가 먼저 출력됩니다



fs.readFileSync

const data = fs.readFileSync(filename, 'utf8')
// readFileSync()는 동기로 처리됩니다

console.log("sync : ",data)

console.log('hello world2')
  • readFileSync 메서드는 불러올 파일경로(첫 번째)와 인코딩 방식(두 번째)
    이 두가지 인자값만 사용합니다
  • 코드가 동기로 처리되기 때문에 'hello world2'는 나중에 출력됩니다
  • 요청을 할 경우에는 동기/비동기 어떤 방식을 써도 아무런 상관이 없지만,
    응답할 때는 순서대로 파일을 읽어야 하기 때문에 readFileSync
    사용하는 것이 좋습니다



2-1. fs.readdir() & readdirSync()


fs.readdir
fs.readdirSync

해당하는 디렉토리에 담긴 파일목록을 출력하며, 리턴 데이터 타입은 배열입니다
(리눅스 터미널의 ls 명령어와 유사한 역할을 합니다)

마찬가지로 이름에 Sync가 붙어있으면 동기적으로 실행됩니다

const searchPath = path.join(__dirname, 'public')
const dir = fs.readdirSync(searchPath)
// 인자값은 경로입니다

console.log(dir)
// > [ 'css', 'img', 'js' ]



2-2. fs.stat() & fs.statSync()


fs.stat
fs.statSync

Stats 객체를 생성하며 지정한 경로에 대한 각종 정보를 출력합니다

  • fs.stat.isFile() : 파일인지 아닌지를 boolean 타입으로
    출력하는 하위 메서드입니다 (file: true / directory: false)
    (fs.stat.isDirectory()는 반대)
const find = path.join(searchPath, 'css')
const stat = fs.statSync(find) // object로 리턴

console.log(stat)

// > 
// Stats {
//   dev: 16777229,
//   mode: 16877,
//   nlink: 3,
//   uid: 501,
//   gid: 20,
//   ...
// }
  
const isFile = fs.statSync(find).isFile()
console.log(isFile)
// > Boolean

readdir, stat등의 메서드는 라우팅 처리시
미들웨어를 만들기 위해 사용하기도 합니다

  • 라우팅 : 클라이언트의 요청에 따라 지정한 경로를 찾아가서
    해당하는 모듈을 실행하도록 응답하는 과정
  • 미들웨어 : 요청과 응답과정 사이에 항상 실행될 함수를 끼워넣은 것



3. 토막 정리

[NodeJs]

[NodeJs]

  • 내장객체
    • global
      • process
      • Buffer
      • __dirname
      • __filename
      • module
      • require
  • 내장모듈
    • path
      • .join(__dirname + 파일경로)
    • net
    • fs (fileSystem)
  • 외장모듈
    • express
  • Javascript
    • 비동기

노드의 자바스크립트는 모듈을 통해 잘게 쪼개어지고
비동기형식의 코드를 주로 사용하는 만큼
콜백이 이루어지는 흐름을 잘 따라가야 합니다

0개의 댓글