Node.js - 비동기 version 파일 읽기 쓰기

박선규's avatar
Feb 07, 2025
Node.js - 비동기 version 파일 읽기 쓰기
📌
노드에서 이 비동기 방식 콜백을 많이쓰는 이유는
기본적으로 노드JS는 단일 스레드로 구성이 돼있기 때문이다.
그래서 파일에서 데이터를 다 읽을 때까지 백그라운드에서 무거운 일을 하고 콜백함수도 등록한다.
I/O 작업(파일 읽기, 네트워크 요청 등)은 백그라운드에서 실행되고, 완료되면 콜백 함수 실행
 

파일 읽기

해당 파일을 읽을거다.
해당 파일을 읽을거다.
 

콜백함수 동작방식

📌
노드가 해당 파일을 읽기 시작하고 준비가되는 즉시에 지정한 콜백함수가 실행이된다.
notion image
📌
해당 파일을 읽기 시작하고 다음줄 코드로 넘어가 “읽기 파일 동작” 이 코드를 읽고, 파일이 완전히 읽혔을 때 콜백 함수가 실행돼 텍스트가 출력이 된다.
 

파일 읽기 안에 파일 읽기

notion image
notion image
📌
start.txt의 파일 내용을 출력하고 read-this.txt 파일 내용을 출력 할 거다.
 

파일명 대신 변수로

notion image
📌
data1에 내용이 data2의 파일 이름가 동일하므로 변수로 data1을 변수로 받아줘 파일명으로 대체한다.
 

출력

notion image
 

파일안에 파일 읽기 + 파일작성

notion image
📌
추가적으로 이 파일까지 같이 출력 해볼거다.
또한 작성 할 것이다.
 
 
notion image
notion image
📌
글 쓰기는 파일명 뒤에, 넣을 데이터, 확장자, 콜백함수 순으로 온다.

⚡ 핵심 개념: 이벤트 루프(Event Loop)

Node.js는 싱글 스레드 기반이지만, 비동기 작업을 처리할 때 **이벤트 루프(Event Loop)**를 사용한다.
📌 정확한 동작 방식
  1. 동기 코드(Synchronous Code) 먼저 실행
      • console.log('읽기 파일 동작');처럼 즉시 실행 가능한 코드는 **콜 스택(Call Stack)**에서 바로 실행된다.
  1. 비동기 작업(Async Task)은 백그라운드로 이동
      • fs.readFile() 같은 비동기 함수는 **Node.js의 백그라운드(Worker Pool)**에서 실행된다.
      • 파일을 읽는 동안 이벤트 루프는 다른 동기 코드 실행을 계속 진행한다.
  1. 파일 읽기가 끝나면 콜백 큐(Callback Queue)로 이동
      • 비동기 작업이 완료되면 콜백 함수가 **태스크 큐(Task Queue)**에 들어간다.
      • 이벤트 루프는 현재 실행 중인 코드가 끝날 때까지 대기한 후, 큐에서 콜백을 꺼내 실행한다.
 

콜백지옥 대체 함수 async

📌
위 코드는 가독성이 떨어지는 부분이 있으니 async로 함수로 대체하여 기능은 그대로인 상태에서 가독성은 챙기자
const fs = require('fs').promises; // fs의 Promise 버전 사용 async function processFiles() { try { const data1 = await fs.readFile('./starter/txt/start.txt', 'utf-8'); const data2 = await fs.readFile(`./starter/txt/${data1}.txt`, 'utf-8'); console.log(data2); const data3 = await fs.readFile(`./starter/txt/append.txt`, 'utf-8'); console.log(data3); await fs.writeFile('./starter/txt/final.txt', `${data2} \n ${data3}`, 'utf-8'); console.log('파일이 작성됐습니다.'); } catch (err) { console.error('오류 발생:', err); } } console.log('읽기 파일 동작'); processFiles();
 
Share article

p4rksk