[JS] Syntax | 20. 파일 입출력

2025. 9. 19. 14:19·Language/JavaScript

외부 파일안의 내용을 읽거나 쓰는 방법입니다.

 

크게 일반적인 경우와 큰 파일을 다루는 경우로 나누어 정리합니다.

 

  일반적인 경우 큰 파일을 다루는 경우
읽기 readFile( ) createReadStream ( )
쓰기 writeFile( ) createWriteStream ( )

readFile( )

주로 작은 파일(.json, .config 파일 등)을 읽을 때 사용합니다.

readFile( )은 fs 모듈을 통해 사용할 수 있습니다.

const fs = require('fs');

const data = fs.readFile('file.txt', 'utf-8');

기본적으로 비동기 함수이기 때문에, 후작업을 위해서는 콜백 함수를 사용하거나 async-await으로 해소해야 합니다.

// 1. 콜백 함수
const fs = require('fs');

const data = fs.readFile('file.txt', 'utf-8', (err, data) => { ... });

// 2. async-await
const fs = require('fs/promises');

const readFile = async () => {
    const data = await fs.readFile('file.txt', 'utf-8');
    // ...
}

readFileSync( )

readFile( )과 동일하나 동기식으로 처리됩니다.

즉, 파일을 다 읽을 때 까지 코드는 진행을 멈추고 기다립니다.

const fs = require('fs');

const data = fs.readFileSync('example.txt', 'utf-8'); // 일시 정지!
// ...

writeFile( )

주로 작은 파일(.json, .config 파일 등)을 쓸 때 사용합니다.

writeFile( )은 fs 모듈을 통해 사용할 수 있습니다.

const fs = require('fs');

const data = fs.writeFile('file.txt', 'this is writing content');

마찬가지로 비동기 함수이기 때문에, 후작업을 위해서는 콜백 함수를 사용하거나 async-await으로 해소해야 합니다.

// 1. 콜백 함수
const fs = require('fs');

const data = fs.writeFile('file.txt', 'this is writing content', (err, data) => { ... });

// 2. async-await
const fs = require('fs/promises');

const readFile = async () => {
    const data = await fs.writeFile('file.txt', 'this is writing content');
    // ...
}

writeFileSync( )

writeFile( )과 동일하나 동기식으로 처리됩니다.

즉, 파일을 다 읽을 때 까지 코드는 진행을 멈추고 기다립니다.

const fs = require('fs');

const data = fs.writeFileSync('example.txt', 'this is writing content'); // 일시 정지!
// ...

createReadStream( )

파일을 스트림(stream) 형태로 읽어서, 한 번에 전체 파일을 메모리에 올리지 않습니다.

때문에 주로 수 MB ~ 수 GB 정도의 상당히 큰 크기의 파일을 읽을 때 사용합니다.

createReadStream( )은 fs 모듈을 통해 사용할 수 있습니다.

const fs = require('fs');

const fileStream = fs.createReadStream('example.txt');

createInterface( )

createReadStream( )으로 생성한 스트림을 한 줄씩 읽을 수 있도록 만들어주는 함수입니다.

createInterface( )는 readline 모듈을 통해 사용할 수 있습니다.

const readline = require('readline');

const rl = readline.createInterface({
  input: fs.createReadStream('example.txt'),
  crlfDelay: Infinity  // \r\n 도 한 줄로 처리
});

const print = async () => {
  for await(const line of rl) {
    console.log(line);
  }
}

생성한 인터페이스는 on('이벤트 종류', 이벤트 함수)의 형태로 이벤트를 생성할 수 있습니다.

// line : 한 줄이 읽힐 때 마다
rl.on('line', (line) => {
  console.log(`줄 읽음: ${line}`);
});

// close : 한 파일을 모두 읽었을 때
rl.on('close', () => {
  console.log('파일 읽기 완료');
});

// error : 에러가 발생할 때
rl.on('error', () => {
  console.log('에러 발생함');
});

createWriteStream( )

파일을 스트림(stream) 형태로 기록해서, 한 번에 전체 파일을 메모리에 올리지 않습니다.

때문에 주로 수 MB ~ 수 GB 정도의 상당히 큰 크기의 파일을 쓸 때 사용합니다.

createWriteStream( )은 fs 모듈을 통해 사용할 수 있습니다.

 

stream으로 파일을 쓸 때는 마지막에 반드시 end( )를 호출해야 합니다.

const fs = require('fs');

const fileStream = fs.createWriteStream('example.txt');

fileStream.write('first line\n');
fileStream.write('second line\n');
fileStream.end(); // end()를 호출해야 파일이 닫힘
728x90

'Language > JavaScript' 카테고리의 다른 글

[JS] Syntax | 19. require & import - 외부 파일 불러오기  (0) 2025.09.19
[JS] Syntax | 18. 배열 메소드 정리  (0) 2025.04.07
[JS] Syntax | 17. 예외처리  (0) 2025.04.06
[JS] Syntax | 16. 구조분해(Destructuring)  (0) 2025.04.05
[JS] Syntax | 15. Optional chaining - 속성 존재여부 확인하기  (0) 2025.04.04
'Language/JavaScript' 카테고리의 다른 글
  • [JS] Syntax | 19. require & import - 외부 파일 불러오기
  • [JS] Syntax | 18. 배열 메소드 정리
  • [JS] Syntax | 17. 예외처리
  • [JS] Syntax | 16. 구조분해(Destructuring)
Rayi
Rayi
  • Rayi
    아카이브
    Rayi
  • 전체
    오늘
    어제
    • 분류 전체보기 (276)
      • CS (40)
        • CV (2)
        • PS (34)
      • Reveiw (18)
        • Paper (18)
        • Github (0)
      • ML (8)
        • Pytorch (5)
      • Language (59)
        • Python (8)
        • JavaScript (32)
        • TypeScript (16)
        • C++ (3)
      • IDE (12)
      • Git (13)
      • Frontend (77)
        • React (8)
        • ReactNative (6)
        • SolidJS (20)
        • CSS (12)
      • Backend (44)
        • DB (18)
        • Node.js (11)
      • UI (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    vscode
    react
    ML
    figma
    API
    mongo
    Express
    review
    expo
    deploy
    frontend
    ReactNative
    DB
    nodejs
    PyTorch
    PRISMA
    CS
    CSS
    Git
    Three
    modal
    ts
    GAN
    ps
    js
    CV
    python
    postgresql
    SOLID
    backend
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
Rayi
[JS] Syntax | 20. 파일 입출력
상단으로

티스토리툴바